首页 > 其他分享 >docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例

docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例

时间:2022-12-20 10:57:01浏览次数:65  
标签:学习 系列 容错 案例 6381 集群 docker Docker

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

本次案例从模拟两个场景

1:数据读写存储

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

2:容错切换迁移

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

下面就开始实操。

数据读写存储操作案例

步骤:

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

e4a451ce220af6a0f0a50e7092428504.png

 

2:对6381新增两个key

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

5e807a99557ff5aa3b79e618993a727b.png

发现没有。

 

好,那么我们就来set k1 v1.3c1ef8b332c1978d9047c8ce97a7cf62.png

发现错误了。错误信息:

(error) MOVED 12706 192.168.50.128:6383

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

我们来分析原因:

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

8c2a97a2b29272e35b4b4d27784b6a8e.png

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

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

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

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

9092ac70c9ff100a8392e81eb0582f81.png

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

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

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

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

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

d6a604fdfce3df218cd90c517be7a4b2.png

我们重新set k1 k4试试。

d2b64dd2a9a1bd9657a8c866442ae355.png

 

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

4:查看集群信息

命令公式:

redis-cli --cluster check ip:断开

828cdec4676fa66e045277841ab73776.png

 

容错切换迁移

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

架构图:

37e64c8fd6fcfe7482c1c339d8eab38d.png

步骤:

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

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

501a69d77909b8b350219ff0de7d0fc1.png

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

2:再次查看集群信息

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

f92b982ff5f8f2e87660a0c5badeaade.png

 

查看进群情况;

cluster nodes

5e4b45845159fc3cc6975af8502cf9cb.png

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

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

get下k1 k2 k3 k4看看情况:

3d1361db90dc1727df25deae88b8b3f2.png

 

可以正常获取

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

2cbdd8cea28ae04a67d39ed9e7c5ae48.png

4:查看集群状态

51fa0c17d8ed7d98ec8a45d5780cbb7f.png

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

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

 

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

结束语

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

 

本系列教程直通车

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

【图文教程】Windows11下安装Docker Desktop

【填坑】在windows系统下安装Docker Desktop后迁移镜像位置

【Docker学习系列】Docker学习1-docker安装

【Docker学习系列】Docker学习2-docker设置镜像加速器

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

【Docker学习系列】Docker学习2-常用命令之启动命令和镜像命令

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

【Docker学习系列】Docker学习4-常用命令之重要的容器命令

【Docker教程系列】Docker学习5-Docker镜像理解

【Docker教程系列】Docker学习6-Docker镜像commit操作案例

【Docker学习教程系列】7-如何将本地的Docker镜像发布到阿里云

【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?

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

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

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

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

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

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

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

 

 

【Docker学习教程系列汇总】笔记及遇到问题解决文章

 

标签:学习,系列,容错,案例,6381,集群,docker,Docker
From: https://www.cnblogs.com/kaigejava/p/16993725.html

相关文章

  • 如何在一个Docker中同时运行多个程序进程?
    我们都知道Docker容器的哲学是一个Docker容器只运行一个进程,但是有时候我们就是需要在一个Docker容器中运行多个进程那么基本思路是在Dockerfile的CMD或者ENTRYPOINT运......
  • Hadoop生态圈-Knox网关的应用案例
    一.Knox网关简介据Knox官网所述(http://knox.apache.org/):ApacheKnoxGateway是用于与ApacheHadoop部署的RESTAPI和UI交互的应用程序网关。KnoxGateway为与ApacheHado......
  • k8s创建容器的几个案例
    案例一、apiVersion:v1kind:Namespacemetadata: name:test-tomcat---apiVersion:apps/v1kind:Deployment               #绑定的是Deployment模板......
  • SQL Server ODBC 数据源测试(32位) 测试失败案例
    SQLServerODBC数据源测试(32位)测试失败案例一、案例介绍在ODBC数据源管理程序(32位)创建DSN,进行数据源测试的时候,出现测试失败。(前面多次都是测试成功,而是成功很......
  • docker介绍及基本操作命令
    docker1.介绍#虚拟化虚拟化是一种资源管理技术,打破实体结构间的不可切割的障碍。虚拟化技术:VMware,VirtualBox,阿里云服务器,docker虚拟化技术#虚拟化相关名词 -......
  • docker镜像操作、容器操作
    dockerdocker入门#虚拟化在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打......
  • docker-部署tomcat
    dockerpulltomcat:8#拉取镜像dockerrun-d-p8080:8080tomcat:8#创建容器dockerps-a#可以查看容器iddockerexec-ittomcat的容器id/bin/bash#进入容器do......
  • CentOS6.5下docker的安装及遇到的问题和简单使用
    ​​Docker​​是一个开源的应用容器引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。利用Linux的LXC、AUFS、Go语言、cgroup实现了资源的独立,可以很......
  • docker-01
    一、docker入门什么是虚拟化?   在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存条及存储(硬盘)等,予以抽象、转......
  • docker详解
    今日内容概要docker入门docker组件介绍docker安装启动docker镜像操作docker容器操作今日内容详细docker入门#什么是虚拟化在计算机中,虚拟化(英语:Virtualiza......