redis集群读写,容错切换,从属调整,扩容,缩容

news/2024/10/23 7:20:46/

rediscluster 读写一定要注意redis实例的区间实例范围。需要路由到位。
在这里插入图片描述
比如
在这里插入图片描述
hashsolt=hash(k1) mod 16384=12706,而12706槽位不在6391上,在6393上。

如何让rediscluster 路由到槽呢?
redis-cli命令尾部加上 -c即可。防止路由失效。如果k1不在6391上,则自动路由到6393上。

查看某个key 属于对应的槽位值
cluster keysolt key

主从容错切换

1.rediscluster 某个主机宕机,其从机会立即上位。
2.当之前的宕机主机正常启动后,其会变为新主机的从机
3.再说一遍,集群不能保证数据的一致性(100%),一定有数据丢失的情况

手动节点从属调整

常用命令
cluster failover
redis-cli 的从机将 与其主机调换角色。
该命令只能在群集slave节点执行,让slave节点进行一次人工故障切换。

人工故障切换是预期的操作,而非发生了真正的故障,目的是以一种安全的方式(数据无丢失)将当前master节点和其中一个slave节点(执行cluster-failover的节点)交换角色。 流程如下:

  1. 当前slave节点告知其master节点停止处理来自客户端的请求

  2. master 节点将当前replication offset 回复给该slave节点

  3. 该slave节点在未同步至replication offset之前不做任何操作,以保证master传来的数据均被处理。

  4. 该slave 节点进行故障转移,从群集中大多数的master节点获取epoch,然后广播自己的最新配置

  5. 原master节点收到配置更新:解除客户端的访问阻塞,回复重定向信息,以便客户端可以和新master通信。

rediscluster 扩容

1.从新启动两个实例端分别为:6397,6398,此时他们都master
2.将新增的6397节点(空槽位)加入原集群

//命令
redis-cli -a 111111 --cluster add-node 
127.0.0.1:6397 127.0.0.1:6391
// 127.0.0.1:6397就是将要作为master的主节点
// 6391相当于原来集群中的领路人。实际就是6387通过6381找到集群
//记住,这里6397虽然加入集群,但是这个集群中没有任何槽位

3.重新分派槽号

//命令
redis-cli -a 111111 --cluster reshard 127.0.0.1:6381

在这里插入图片描述
执行命令后会询问你要移到多少个槽位 16384/4 =4096

在这里插入图片描述
然后还需要我们确认将这4086个槽位分配到那个master,但是是我们刚加入的master6397,查询下6397的ID 复制过来,接续按下面提示操作就好。

在这里插入图片描述
由上图可以看到,新节点的槽位是由 其他3个master中分别均出1364个槽位得来的。这样原来的3个master剩下的槽位没有改变,所以最大减少了扩容时槽位移动问题。

4.为主节点6378分配从节点6379

redis-cli -cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点id

rediscluster 缩容

  1. 先清除从节点6398
    redis-cli -a 111111 --cluster check 127.0.0.1:6398,记录从节点 ID
    从集群中将6398从节点删除
    redis-cli -a 111111 --cluster del-node 127.0.0.1:6398 6398从节点ID

  2. 清出来的槽号从新分配给6381(也可以重新分配到6392,6393等多个节点,就是要分配多次)
    redis-cli -a 111111 --cluster reshared 127.0.0.1:6391
    按提示输入分配的源头(6397的nodeId),分配的槽位数

  3. 再删除主节点 6397
    redis-cli -a 111111 --cluster del-node 127.0.0.1:6397 ,6397主节点ID

  4. 恢复成3主3从

rediscluster 其他补充

  1. 不同redis实例下槽位多键操作支持不好,这个时候占位符登场。
    不在同一个reids实例的槽位,无法通过mget,mset等批处理命令。可以通过{}来定义同一组的概念。使key中{}相同内容的键值放到同一个实例的槽位中去。
    比如 mset k1{x} v1 k2{x} v2 k3{x} v3,mget k1{x} v1 k2{x} v2 k3{x} v3

  2. cluster-require-full-converage
    有个问题,redis-cluster集群有3主3从结构,如果一台down机,数据还可不可以写入?
    答案:如果一台主机切从机down机后,集群显示不可用状态。
    如果cluster-require-full-converage配置成no的时候,表示一个主机及从机下线,集群仍然可用。

  3. cluster countkeysinslot 槽位号 : 查看这个槽位是否被占用

  4. cluster keyslot 键名称(k1):该键落在那个槽位


http://www.ppmy.cn/news/90897.html

相关文章

苹果营收及增速分析,2022年营收达2055亿美元,增速为7%

众所周知,2007年1月,被乔布斯称为“苹果将彻底改变手机”的第一代iPhone正式发布,并于当年6月底上市销售。上市后,其受欢迎程度令人咋舌,销量一骑绝尘。短短5年内,其市场份额也由最初的3%升至18%&#xff0…

淘宝商品历史价格API接口 调用说明及功能介绍

淘宝商品历史价格API是一款可以帮助用户获取淘宝商品历史价格数据的接口。通过该接口,用户可以轻松地获取某个商品在过去一段时间中的价格趋势和波动情况,以便更好地了解该商品的市场走势和价值变化情况。 该API具备以下功能: 1. 支持多种查…

C++模版和泛型编程

C模版和泛型编程 C中模板(templates) 在C中模板是泛型编程的基础。模板使得我们可以编写一个通用的程序或算法,而不需要知道具体使用的数据类型。您可以认为模板是C泛型编程的核心机制。 使用模板,可以在编译时生成特定类型的代…

WPF入门实例 WPF完整例子 WPF DEMO WPF学习完整例子 WPF实战例子 WPF sql实例应用

WPF 和 WinForms 都是用于创建 Windows 桌面应用程序的开发框架,它们有一些相似之处,但也有很多不同之处。 在开发速度方面,这取决于具体情况。如果您熟悉 WinForms 开发并且正在开发简单的界面应用程序,则可能会比使用 WPF 更快…

《Spring Guides系列学习》guide41 - guide45

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…

NodeJS Crypto加密⑤

文章目录 ✨文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持😘前言NODE内置模块Zlib模块 createGzip(CreateGzip方法 异步)Crypto加密模块 getHashes 方法 createHash 方法 createHmac 方法…

六级备考23天|CET-6|写作技巧1|开头段模版

目录 1 考前注意事项 2 真题参考 3 六级作文三段式 第一段 第二段 第三段 4 名言解释型作文 5 开头段的模版 why 型 6 选择型开头模版 7 国内学校/出国读书 8 团队精神和交流 9 作业 10 抽象意志品质类开头 ​ 11 信任的重要性​ 1 考前注意事项 定位错误 常识干扰 拼凑…

【C++】初入C++

认识C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object orient…