如何实现Docker高级篇中分布式存储的主从容错切换与迁移实战案例?

2026-05-24 00:531阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1324个文字,预计阅读时间需要6分钟。

如何实现Docker高级篇中分布式存储的主从容错切换与迁移实战案例?

在上一篇文章中,我们学习了三种主流的Redis集群搭建。接下来,让我们学习Redis集群,主要从以下几个方面入手:主从容错切换案例,迁移案例;本案例从模拟两个场景出发+1:数据读写存储+a:一个新key数据来了,是否会被“

在上一篇,学会了3主3从的Redis集群搭建。那么接下来,我们就来学习Redis集群主从容错切换迁移案例​

本次案例从模拟两个场景​

1:数据读写存储​

a:一个新key数据来了,是否会按照预设的进入槽中?集群是否生效​

2:容错切换迁移​

a:如果master 6381挂了。那么对应的从6384是否会补位?​

下面就开始实操。​

数据读写存储操作案例​

步骤:​

1:启动6台机器构成的集群并通过exec进入​

2:对6381新增两个key​

查看当前6381机器上是否存在缓存key:​

发现没有。​

好,那么我们就来set k1 v1.​

发现错误了。错误信息:​

(error) MOVED 12706 192.168.50.128:6383​

这不对啊。set k v是最简单的命令。这个命令都不支持。那么要集群有什么用?​

我们来分析原因:​

我们现在使用的是集群的,是有hash槽的。如下图:​

我们可以看到,master 1 只能管理5461个槽。master2只能管理5462个。master3也是管理5461个槽。​

通过之前的学习,我们也知道,集群的时候,是通过把key通过hash值,算出的hash值找到对应具体需要存放在哪个master上的。​

通过这些理论知识,我们知道,可能我们set的k1这个key经过hash之后,不在当前master1所管理的0~5460共5461个hash槽中。所以会报错。​

那根据这些,我们试试存放其他的呢?​

我们可以看到,set k2和k3的时候可以的。但是k1和k4是不行的。​

我们看看k1和k4的错误:MOVED 12706和MOOVED 8455​

感觉这两个数字应该是hash槽。我们可以看到这两个值都大于master1所能管理的最大槽的值。master1最大槽值为:5460.因为我们使用的是redis-clie -p 6381 这种直连的方式连接的,所以master1存放不了。​

3:防止路由 失效,加参数-c 并新增加两个key​

如果是集群模式下,我们需要添加一个参数-c。来防止路由失效​

我们重新set k1 k4试试。​

可以看到,key路由到对应的master上了。​

4:查看集群信息​

命令公式:​

redis-cli --cluster check ip:端口​

如何实现Docker高级篇中分布式存储的主从容错切换与迁移实战案例?

容错切换迁移​

假设master1(6381)宕机了,那么对应的slave4(6384)是否会正常补位。​

架构图:​

步骤:​

1:maser1 6381和从机6384切换,先停止主机6381​

使用docker stop 容器id/或者容器names​

停止后,等一会。因为集群之间有心跳检查。所以等待一会。​

2:再次查看集群信息​

因为6381已经宕机了。那么我们进入6382中,注意以集群的方式进入。需要加参数-c。​

查看进群情况;​

cluster nodes ​

注意看:我们发现集群还是6个。但是6481这特master,是fail了。6381对应的从及6384现在成了master.说明,从机补位了。​

这就实现了故障容错切换迁移。​

get下k1 k2 k3 k4看看情况:​

可以正常获取​

3:先还原之前的3主3从​

4:查看集群状态​

我们可以看到,虽然6381重新启动了。但是6381却成了6384的从节点了。

​下一篇预告:下一篇咱们将实操:主从扩容案例

大家好,我是凯哥Java(kaigejava),乐于分享,每日更新技术文章,欢迎大家关注“凯哥Java”,及时了解更多。让我们一起学Java。也欢迎大家有事没事就来和凯哥聊聊~~~

结束语

如操作有问题欢迎去 我的​​个人博客(www.kaigejava.com)​​留言或者 ​​微信公众号(凯哥Java)​​留言交流哦。

本系列教程直通车

直通车,本系列教程已发布文章,快速到达,《Docker学习系列》教程已经发布的内容如下:

​​Windows11下安装Docker Desktop​​

​​在windows系统下安装Docker Desktop后迁移镜像位置​​

​​Docker学习1-docker安装​​

​​Docker学习2-docker设置镜像加速器​​

​​Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?​​

​​Docker学习2-常用命令之启动命令和镜像命令​​

​​Docker学习系列3:常用命令之容器命令​​

​​Docker学习4-常用命令之重要的容器命令​​

​​Docker学习5-Docker镜像理解​​

​​Docker学习6-Docker镜像commit操作案例​​

​​7-如何将本地的Docker镜像发布到阿里云​​

​​8-如何将本地的Docker镜像发布到私服?​​

​​「Docker学习系列教程」9-Docker容器数据卷介绍​​

​​「Docker学习系列教程」10-Docker容器数据卷案例​​

​​Docker学习11-Docker常规方式安装软件​​

​​「Docker学习系列教程」基础篇小总结及高级篇预告​​

​​docker高级篇1-dockeran安装mysql主从复制​​

​​docker高级篇2-分布式存储之三种算法​​

​​docker高级篇第二章-分布式存储之实战案例:3主3从redis集群扩容配置​​

​​笔记及遇到问题解决文章​​

本文共计1324个文字,预计阅读时间需要6分钟。

如何实现Docker高级篇中分布式存储的主从容错切换与迁移实战案例?

在上一篇文章中,我们学习了三种主流的Redis集群搭建。接下来,让我们学习Redis集群,主要从以下几个方面入手:主从容错切换案例,迁移案例;本案例从模拟两个场景出发+1:数据读写存储+a:一个新key数据来了,是否会被“

在上一篇,学会了3主3从的Redis集群搭建。那么接下来,我们就来学习Redis集群主从容错切换迁移案例​

本次案例从模拟两个场景​

1:数据读写存储​

a:一个新key数据来了,是否会按照预设的进入槽中?集群是否生效​

2:容错切换迁移​

a:如果master 6381挂了。那么对应的从6384是否会补位?​

下面就开始实操。​

数据读写存储操作案例​

步骤:​

1:启动6台机器构成的集群并通过exec进入​

2:对6381新增两个key​

查看当前6381机器上是否存在缓存key:​

发现没有。​

好,那么我们就来set k1 v1.​

发现错误了。错误信息:​

(error) MOVED 12706 192.168.50.128:6383​

这不对啊。set k v是最简单的命令。这个命令都不支持。那么要集群有什么用?​

我们来分析原因:​

我们现在使用的是集群的,是有hash槽的。如下图:​

我们可以看到,master 1 只能管理5461个槽。master2只能管理5462个。master3也是管理5461个槽。​

通过之前的学习,我们也知道,集群的时候,是通过把key通过hash值,算出的hash值找到对应具体需要存放在哪个master上的。​

通过这些理论知识,我们知道,可能我们set的k1这个key经过hash之后,不在当前master1所管理的0~5460共5461个hash槽中。所以会报错。​

那根据这些,我们试试存放其他的呢?​

我们可以看到,set k2和k3的时候可以的。但是k1和k4是不行的。​

我们看看k1和k4的错误:MOVED 12706和MOOVED 8455​

感觉这两个数字应该是hash槽。我们可以看到这两个值都大于master1所能管理的最大槽的值。master1最大槽值为:5460.因为我们使用的是redis-clie -p 6381 这种直连的方式连接的,所以master1存放不了。​

3:防止路由 失效,加参数-c 并新增加两个key​

如果是集群模式下,我们需要添加一个参数-c。来防止路由失效​

我们重新set k1 k4试试。​

可以看到,key路由到对应的master上了。​

4:查看集群信息​

命令公式:​

redis-cli --cluster check ip:端口​

如何实现Docker高级篇中分布式存储的主从容错切换与迁移实战案例?

容错切换迁移​

假设master1(6381)宕机了,那么对应的slave4(6384)是否会正常补位。​

架构图:​

步骤:​

1:maser1 6381和从机6384切换,先停止主机6381​

使用docker stop 容器id/或者容器names​

停止后,等一会。因为集群之间有心跳检查。所以等待一会。​

2:再次查看集群信息​

因为6381已经宕机了。那么我们进入6382中,注意以集群的方式进入。需要加参数-c。​

查看进群情况;​

cluster nodes ​

注意看:我们发现集群还是6个。但是6481这特master,是fail了。6381对应的从及6384现在成了master.说明,从机补位了。​

这就实现了故障容错切换迁移。​

get下k1 k2 k3 k4看看情况:​

可以正常获取​

3:先还原之前的3主3从​

4:查看集群状态​

我们可以看到,虽然6381重新启动了。但是6381却成了6384的从节点了。

​下一篇预告:下一篇咱们将实操:主从扩容案例

大家好,我是凯哥Java(kaigejava),乐于分享,每日更新技术文章,欢迎大家关注“凯哥Java”,及时了解更多。让我们一起学Java。也欢迎大家有事没事就来和凯哥聊聊~~~

结束语

如操作有问题欢迎去 我的​​个人博客(www.kaigejava.com)​​留言或者 ​​微信公众号(凯哥Java)​​留言交流哦。

本系列教程直通车

直通车,本系列教程已发布文章,快速到达,《Docker学习系列》教程已经发布的内容如下:

​​Windows11下安装Docker Desktop​​

​​在windows系统下安装Docker Desktop后迁移镜像位置​​

​​Docker学习1-docker安装​​

​​Docker学习2-docker设置镜像加速器​​

​​Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?​​

​​Docker学习2-常用命令之启动命令和镜像命令​​

​​Docker学习系列3:常用命令之容器命令​​

​​Docker学习4-常用命令之重要的容器命令​​

​​Docker学习5-Docker镜像理解​​

​​Docker学习6-Docker镜像commit操作案例​​

​​7-如何将本地的Docker镜像发布到阿里云​​

​​8-如何将本地的Docker镜像发布到私服?​​

​​「Docker学习系列教程」9-Docker容器数据卷介绍​​

​​「Docker学习系列教程」10-Docker容器数据卷案例​​

​​Docker学习11-Docker常规方式安装软件​​

​​「Docker学习系列教程」基础篇小总结及高级篇预告​​

​​docker高级篇1-dockeran安装mysql主从复制​​

​​docker高级篇2-分布式存储之三种算法​​

​​docker高级篇第二章-分布式存储之实战案例:3主3从redis集群扩容配置​​

​​笔记及遇到问题解决文章​​