在上一篇,学会了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:断开

容错切换迁移

假设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学习系列】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学习教程系列汇总】笔记及遇到问题解决文章

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

  1. javascript高级程序设计第二章知识点提炼

    这是我整理的javascript高级程序设计第二章的脑图,内容也是非常浅显与简单.希望您看了我的博客能够给我一些意见或者建议.

  2. Java语言程序设计(基础篇)第二章

    第二章 基本程序设计 2.2 编写简单的程序 1.变量名尽量选择描述性的名字(descriptive name). 2.实数(即带小数点的数字)在计算机中使用一种浮点的方法来表示.因此,实数也称为浮点 ...

  3. 从零开始的程序逆向之路基础篇 第二章——用OllyDbg(OD)分析一个简单的软件

    作者:Crazyman_Army 原文来自:https://bbs.ichunqiu.com/thread-43469-1-1.html 0x00知识回顾 (由于笔者省事,没开XP虚拟机,而且没关闭A ...

  4. 2-Spark高级数据分析-第二章 用Scala和Spark进行数据分析

    数据清洗时数据科学项目的第一步,往往也是最重要的一步. 本章主要做数据统计(总数.最大值.最小值.平均值.标准偏差)和判断记录匹配程度. Spark编程模型 编写Spark程序通常包括一系列相关步骤: ...

  5. 第二章· Redis管理实战

    数据类型 管理实战 数据类型 String: 字符串类型 Hash: 哈希类型 List: 列表类型 Set: 集合类型 Sorted set: 顺序集合类型 管理实战 通用操作

  6. Java编程基础篇第二章

    关键字 概述:被Java语言赋予特定含义的单词. 特点:组成关键字的字母全部为小写字母. 标识符 概述:给类,接口,包,方法,常量起名字时的字符序列 组成规则:英文大小写字母,数字,$和— 命名规则. ...

  7. 02: docker高级篇

    1.1 Docker Compose 1.Docker Compose 介绍 1. Compose是一个定义和管理多容器的工具,使用Python语言编写. 2. 使用Compose配置文件描述多个容器 ...

  8. 嵌入式学习笔记(综合提高篇 第二章) -- FreeRTOS的移植和应用

    1.1    资料准备和分析 上章节通过实现双机通讯,了解如何设计和实现自定义协议,不过对于嵌入式系统来说,当然不仅仅包含协议,还有其它很多需要深入学习了解的知识,下面将列出我在工作和学习上遇到的嵌入 ...

  9. 【读书笔记】C#高级编程 第二章 核心C#

    (一)第一个C#程序 创建一个控制台应用程序,然后输入代码,输入完毕后点击F5 Console.WriteLine();这条语句的意思:把括号内的内容输出到界面上: Console.ReadKey() ...

  10. javascript高级程序设计第二章

    看后总结: 1.js代码用得最多的两种加载方式: a)外部文件形式:<script type="text/javascript" src="jquery.min.j ...

随机推荐

  1. Java-用户登录验证案例

    用户登录验证 1.案例需求: 1.访问带有验证码的登录页面login.jsp 2.用户输入用户名,密码以及验证码 * 如果用户名和密码输入有误,跳转登录页面,提示:用户名或密码错误 * 如果验证码输入 ...

  2. PowerBuilder编程新思维6.5:外传1(PowerPlume的设计与规划)

    <第五部分 Otherside 意外的宝藏> 每一颗种子都有发芽的梦想.PowerPlume(孔雀翎)开发交流群:286502392    PowerBuilder编程新思维6.5:外传1 ...

  3. B+树要点梳理

    B+树重要操作 中间节点 中间节点的key,与其对应的指针的原则是,小于key的元素在其指针指向的节点中 中间节点的key可以看成是右斜着排放的,即小于等于key的节点由key对应的指针指定,最有一个 ...

  4. python的基本认识

    python的基本认识 初识python: python是一种跨平台的.开源的.免费的.解释型的高级编程语言: python的应用领域十分广泛.如web编程.图像处理.黑客编程.网络爬虫和科学计算等: ...

  5. Umov移动方块-scratch编程作品

    程序说明: <Umov移动方块>是一款基于Scratch平台制作的小游戏.在这个游戏中,玩家将面对一个3×3的圆圈棋盘,并通过鼠标控制蓝色方块在这些圆圈中灵活移动.游戏的挑战在于,舞台的四 ...

  6. mysql DCL常用命令

    登录数据库: mysql -u root -p 查看本机MySQL中所有的用户 select user ,host from mysql.user; 查看所有数据库: show databases; ...

  7. 测试环境配置https+端口访问留存

    步骤1:阿里云DNS配置本地公网IP解析 步骤2:本地局域网192.168.1.10服务器配置nginx server { listen 8090 ssl; server_name localhost ...

  8. 【Java】删除项目中多余的SVG图片资源

    在DB库的菜单表,每个菜单会存放对应的svg图片名称,用于菜单渲染 在页面中的渲染: 在项目的目录的存放位置: 需求是这个目录还存放了很多不需要的svg图片,需要把他们删除掉 数量有七八十张,人肉手删 ...

  9. ComfyUI插件:ComfyUI layer style 节点(三)

    前言: 学习ComfyUI是一场持久战,而ComfyUI layer style 是一组专为图片设计制作且集成了Photoshop功能的强大节点.该节点几乎将PhotoShop的全部功能迁移到Comf ...

  10. Ubuntu/Linux系统中的multi-user.target

    相关: https://www.cnblogs.com/devilmaycry812839668/p/17999041 multi-user.target 是 Linux 系统中 systemd 的一 ...