Redis6 集群新增节点

2024-03-13 17:50
文章标签 集群 新增 节点 redis6

本文主要是介绍Redis6 集群新增节点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先确保新增的节点中没有数据,否则会报错;

当前的节点信息

127.0.0.1:8000> cluster slots
1) 1) (integer) 02) (integer) 54613) 1) "127.0.0.1"2) (integer) 80003) "25d25af226ac55e9c03723288c20f53520420767"4) 1) "127.0.0.1"2) (integer) 81003) "e4ec27a4f61c66131faebab76d0c33c38fb5695c"
2) 1) (integer) 54622) (integer) 109223) 1) "127.0.0.1"2) (integer) 80013) "68507c82e45915e6a257afbfc2626c2424684879"4) 1) "127.0.0.1"2) (integer) 81013) "30bb3d720a0c7dad6aed79f17ab33313246a0629"
3) 1) (integer) 109232) (integer) 163833) 1) "127.0.0.1"2) (integer) 80023) "3db06c21c6dea8701fadbebfebf1aa92e5b13037"4) 1) "127.0.0.1"2) (integer) 81023) "e4df1b413eb5731f4de442e3e38a14612dc65700"

现在需要新增节点 127.0.0.1:8003,127.0.0.1:8103

5.0之后版本新增节点命令:  

redis-cli  --cluster add-node {新节点IP:PORT} {集群中任一节点IP:PORT}

[root@XXX ~]# redis-cli  --cluster add-node 127.0.0.1:8003 127.0.0.1:8002
>>> Adding node 127.0.0.1:8003 to cluster 127.0.0.1:8002
>>> Performing Cluster Check (using node 127.0.0.1:8002)
M: 3db06c21c6dea8701fadbebfebf1aa92e5b13037 127.0.0.1:8002slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 30bb3d720a0c7dad6aed79f17ab33313246a0629 127.0.0.1:8101slots: (0 slots) slavereplicates 68507c82e45915e6a257afbfc2626c2424684879
M: 68507c82e45915e6a257afbfc2626c2424684879 127.0.0.1:8001slots:[5462-10922] (5461 slots) master1 additional replica(s)
S: e4df1b413eb5731f4de442e3e38a14612dc65700 127.0.0.1:8102slots: (0 slots) slavereplicates 3db06c21c6dea8701fadbebfebf1aa92e5b13037
S: e4ec27a4f61c66131faebab76d0c33c38fb5695c 127.0.0.1:8100slots: (0 slots) slavereplicates 25d25af226ac55e9c03723288c20f53520420767
M: 25d25af226ac55e9c03723288c20f53520420767 127.0.0.1:8000slots:[0-5461] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 127.0.0.1:8003 to make it join the cluster.
[OK] New node added correctly.
[root@XXX ~]# redis-cli  --cluster add-node 127.0.0.1:8103 127.0.0.1:8002 
>>> Adding node 127.0.0.1:8103 to cluster 127.0.0.1:8002
>>> Performing Cluster Check (using node 127.0.0.1:8002)
M: 3db06c21c6dea8701fadbebfebf1aa92e5b13037 127.0.0.1:8002slots:[10923-16383] (5461 slots) master1 additional replica(s)
S: 30bb3d720a0c7dad6aed79f17ab33313246a0629 127.0.0.1:8101slots: (0 slots) slavereplicates 68507c82e45915e6a257afbfc2626c2424684879
M: 68507c82e45915e6a257afbfc2626c2424684879 127.0.0.1:8001slots:[5462-10922] (5461 slots) master1 additional replica(s)
M: e9aac3ea026f8b5b14267861021a282103671a9c 127.0.0.1:8003slots: (0 slots) master
S: e4df1b413eb5731f4de442e3e38a14612dc65700 127.0.0.1:8102slots: (0 slots) slavereplicates 3db06c21c6dea8701fadbebfebf1aa92e5b13037
S: e4ec27a4f61c66131faebab76d0c33c38fb5695c 127.0.0.1:8100slots: (0 slots) slavereplicates 25d25af226ac55e9c03723288c20f53520420767
M: 25d25af226ac55e9c03723288c20f53520420767 127.0.0.1:8000slots:[0-5461] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 127.0.0.1:8103 to make it join the cluster.
[OK] New node added correctly.

执行后,集群中每个节点都会将新节点添加到自己的"通讯录"中;

添加后默认情况下,新节点角色是master,且没有任何hash slot;

127.0.0.1:8000> cluster nodes
e9aac3ea026f8b5b14267861021a282103671a9c 127.0.0.1:8003@18003 master - 0 1626230308792 0 connected
e4ec27a4f61c66131faebab76d0c33c38fb5695c 127.0.0.1:8100@18100 slave 25d25af226ac55e9c03723288c20f53520420767 0 1626230307788 16 connected
68507c82e45915e6a257afbfc2626c2424684879 127.0.0.1:8001@18001 master - 0 1626230306000 14 connected 5462-10922
89609f9d318bbca243c622195dcffb0c4c739c21 127.0.0.1:8103@18103 master - 0 1626230309795 17 connected
25d25af226ac55e9c03723288c20f53520420767 127.0.0.1:8000@18000 myself,master - 0 1626230306000 16 connected 0-5461
e4df1b413eb5731f4de442e3e38a14612dc65700 127.0.0.1:8102@18102 slave 3db06c21c6dea8701fadbebfebf1aa92e5b13037 0 1626230306785 12 connected
30bb3d720a0c7dad6aed79f17ab33313246a0629 127.0.0.1:8101@18101 slave 68507c82e45915e6a257afbfc2626c2424684879 0 1626230307000 14 connected
3db06c21c6dea8701fadbebfebf1aa92e5b13037 127.0.0.1:8002@18002 master - 0 1626230307000 12 connected 10923-16383

现在来分配slot,

命令: 

redis-cli  --cluster reshard 127.0.0.1:8000  

127.0.0.1:8000  为集群中的任意一个节点

[root@xxx ~]# redis-cli  --cluster reshard 127.0.0.1:8000                
>>> Performing Cluster Check (using node 127.0.0.1:8000)
M: 25d25af226ac55e9c03723288c20f53520420767 127.0.0.1:8000slots:[0-5461] (5462 slots) master      # 0-54611 additional replica(s)
M: e9aac3ea026f8b5b14267861021a282103671a9c 127.0.0.1:8003slots: (0 slots) master                #新节点没有slots
S: e4ec27a4f61c66131faebab76d0c33c38fb5695c 127.0.0.1:8100slots: (0 slots) slavereplicates 25d25af226ac55e9c03723288c20f53520420767
M: 68507c82e45915e6a257afbfc2626c2424684879 127.0.0.1:8001slots:[5462-10922] (5461 slots) master #5462-109221 additional replica(s)
M: 89609f9d318bbca243c622195dcffb0c4c739c21 127.0.0.1:8103slots: (0 slots) master                #新节点没有slots
S: e4df1b413eb5731f4de442e3e38a14612dc65700 127.0.0.1:8102slots: (0 slots) slave                replicates 3db06c21c6dea8701fadbebfebf1aa92e5b13037
S: 30bb3d720a0c7dad6aed79f17ab33313246a0629 127.0.0.1:8101slots: (0 slots) slavereplicates 68507c82e45915e6a257afbfc2626c2424684879
M: 3db06c21c6dea8701fadbebfebf1aa92e5b13037 127.0.0.1:8002slots:[10923-16383] (5461 slots) master #10923-163831 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 

How many slots do you want to move (from 1 to 16384)?

Redis一共16384个slots,之前是3个Master,现在变成4个Master,需要移动16384/4 = 4096个槽位

How many slots do you want to move (from 1 to 16384)? 4096
What is the receiving node ID? e9aac3ea026f8b5b14267861021a282103671a9c
Please enter all the source node IDs.Type 'all' to use all the nodes as source nodes for the hash slots.Type 'done' once you entered all the source nodes IDs.
Source node #1: allReady to move 4096 slots.

What is the receiving node ID?  输入要接收槽位的节点node-id,填入127.0.0.1:8003的node-id

Source node #1:  从哪个Master移动4096个slots过来? 填all; 从另外3个Master平均移动4096个slots过来,每个Master移动1365个slots;

Ready to move 4096 slots.Source nodes:M: 25d25af226ac55e9c03723288c20f53520420767 127.0.0.1:8000slots:[0-5461] (5462 slots) master1 additional replica(s)M: 68507c82e45915e6a257afbfc2626c2424684879 127.0.0.1:8001slots:[5462-10922] (5461 slots) master1 additional replica(s)M: 89609f9d318bbca243c622195dcffb0c4c739c21 127.0.0.1:8103slots: (0 slots) masterM: 3db06c21c6dea8701fadbebfebf1aa92e5b13037 127.0.0.1:8002slots:[10923-16383] (5461 slots) master1 additional replica(s)Destination node:M: e9aac3ea026f8b5b14267861021a282103671a9c 127.0.0.1:8003slots: (0 slots) master

展示了Source nodes 机器当前所包含的slots

Destination node为 127.0.0.1:8003

  Resharding plan:Moving slot 0 from 25d25af226ac55e9c03723288c20f53520420767Moving slot 1 from 25d25af226ac55e9c03723288c20f53520420767Moving slot 2 from 25d25af226ac55e9c03723288c20f53520420767
......Moving slot 1363 from 25d25af226ac55e9c03723288c20f53520420767Moving slot 1364 from 25d25af226ac55e9c03723288c20f53520420767Moving slot 1365 from 25d25af226ac55e9c03723288c20f53520420767Moving slot 5462 from 68507c82e45915e6a257afbfc2626c2424684879Moving slot 5463 from 68507c82e45915e6a257afbfc2626c2424684879Moving slot 5464 from 68507c82e45915e6a257afbfc2626c2424684879
......Moving slot 6823 from 68507c82e45915e6a257afbfc2626c2424684879Moving slot 6824 from 68507c82e45915e6a257afbfc2626c2424684879Moving slot 6825 from 68507c82e45915e6a257afbfc2626c2424684879Moving slot 6826 from 68507c82e45915e6a257afbfc2626c2424684879Moving slot 10923 from 3db06c21c6dea8701fadbebfebf1aa92e5b13037Moving slot 10924 from 3db06c21c6dea8701fadbebfebf1aa92e5b13037Moving slot 10925 from 3db06c21c6dea8701fadbebfebf1aa92e5b13037
......Moving slot 12285 from 3db06c21c6dea8701fadbebfebf1aa92e5b13037Moving slot 12286 from 3db06c21c6dea8701fadbebfebf1aa92e5b13037Moving slot 12287 from 3db06c21c6dea8701fadbebfebf1aa92e5b13037
Do you want to proceed with the proposed reshard plan (yes/no)? yes
Moving slot 0 from 127.0.0.1:8000 to 127.0.0.1:8003: 
Moving slot 1 from 127.0.0.1:8000 to 127.0.0.1:8003: 
Moving slot 2 from 127.0.0.1:8000 to 127.0.0.1:8003: 
... ...
Moving slot 12285 from 127.0.0.1:8002 to 127.0.0.1:8003: 
Moving slot 12286 from 127.0.0.1:8002 to 127.0.0.1:8003: 
Moving slot 12287 from 127.0.0.1:8002 to 127.0.0.1:8003: 

上面执行结果可以看到,会从每个分片里面取1365个slot到新增的Master中;

查看node的slot分配情况可以看到当前是平均分配的,每个节点4096个slots

最后还将127.0.0.1:8103修改为127.0.0.1:8003的从库;

127.0.0.1:8103> cluster replicate e9aac3ea026f8b5b14267861021a282103671a9c
OK

 查看nodes状态,当前是4主4从

127.0.0.1:8103> cluster nodes
e9aac3ea026f8b5b14267861021a282103671a9c 127.0.0.1:8003@18003 master - 0 1626233452000 18 connected 0-1365 5462-6826 10923-12287
25d25af226ac55e9c03723288c20f53520420767 127.0.0.1:8000@18000 master - 0 1626233451000 16 connected 1366-5461
3db06c21c6dea8701fadbebfebf1aa92e5b13037 127.0.0.1:8002@18002 master - 0 1626233451999 12 connected 12288-16383
68507c82e45915e6a257afbfc2626c2424684879 127.0.0.1:8001@18001 master - 0 1626233453002 14 connected 6827-10922
e4df1b413eb5731f4de442e3e38a14612dc65700 127.0.0.1:8102@18102 slave 3db06c21c6dea8701fadbebfebf1aa92e5b13037 0 1626233452000 12 connected
e4ec27a4f61c66131faebab76d0c33c38fb5695c 127.0.0.1:8100@18100 slave 25d25af226ac55e9c03723288c20f53520420767 0 1626233450000 16 connected
30bb3d720a0c7dad6aed79f17ab33313246a0629 127.0.0.1:8101@18101 slave 68507c82e45915e6a257afbfc2626c2424684879 0 1626233451000 14 connected
89609f9d318bbca243c622195dcffb0c4c739c21 127.0.0.1:8103@18103 myself,slave e9aac3ea026f8b5b14267861021a282103671a9c 0 1626233451000 18 connected

查看slots分布

127.0.0.1:8103> cluster slots
1) 1) (integer) 02) (integer) 13653) 1) "127.0.0.1"2) (integer) 80033) "e9aac3ea026f8b5b14267861021a282103671a9c"4) 1) "127.0.0.1"2) (integer) 81033) "89609f9d318bbca243c622195dcffb0c4c739c21"
2) 1) (integer) 13662) (integer) 54613) 1) "127.0.0.1"2) (integer) 80003) "25d25af226ac55e9c03723288c20f53520420767"4) 1) "127.0.0.1"2) (integer) 81003) "e4ec27a4f61c66131faebab76d0c33c38fb5695c"
3) 1) (integer) 54622) (integer) 68263) 1) "127.0.0.1"2) (integer) 80033) "e9aac3ea026f8b5b14267861021a282103671a9c"4) 1) "127.0.0.1"2) (integer) 81033) "89609f9d318bbca243c622195dcffb0c4c739c21"
4) 1) (integer) 68272) (integer) 109223) 1) "127.0.0.1"2) (integer) 80013) "68507c82e45915e6a257afbfc2626c2424684879"4) 1) "127.0.0.1"2) (integer) 81013) "30bb3d720a0c7dad6aed79f17ab33313246a0629"
5) 1) (integer) 109232) (integer) 122873) 1) "127.0.0.1"2) (integer) 80033) "e9aac3ea026f8b5b14267861021a282103671a9c"4) 1) "127.0.0.1"2) (integer) 81033) "89609f9d318bbca243c622195dcffb0c4c739c21"
6) 1) (integer) 122882) (integer) 163833) 1) "127.0.0.1"2) (integer) 80023) "3db06c21c6dea8701fadbebfebf1aa92e5b13037"4) 1) "127.0.0.1"2) (integer) 81023) "e4df1b413eb5731f4de442e3e38a14612dc65700"

这篇关于Redis6 集群新增节点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/805690

相关文章

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

SpringBoot连接Redis集群教程

《SpringBoot连接Redis集群教程》:本文主要介绍SpringBoot连接Redis集群教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 依赖2. 修改配置文件3. 创建RedisClusterConfig4. 测试总结1. 依赖 <de

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Redis高可用-主从复制、哨兵模式与集群模式详解

《Redis高可用-主从复制、哨兵模式与集群模式详解》:本文主要介绍Redis高可用-主从复制、哨兵模式与集群模式的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Redis高可用-主从复制、哨兵模式与集群模式概要一、主从复制(Master-Slave Repli

Redis分片集群的实现

《Redis分片集群的实现》Redis分片集群是一种将Redis数据库分散到多个节点上的方式,以提供更高的性能和可伸缩性,本文主要介绍了Redis分片集群的实现,具有一定的参考价值,感兴趣的可以了解一... 目录1. Redis Cluster的核心概念哈希槽(Hash Slots)主从复制与故障转移2.

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

centos7基于keepalived+nginx部署k8s1.26.0高可用集群

《centos7基于keepalived+nginx部署k8s1.26.0高可用集群》Kubernetes是一个开源的容器编排平台,用于自动化地部署、扩展和管理容器化应用程序,在生产环境中,为了确保集... 目录一、初始化(所有节点都执行)二、安装containerd(所有节点都执行)三、安装docker-

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

Nacos集群数据同步方式

《Nacos集群数据同步方式》文章主要介绍了Nacos集群中服务注册信息的同步机制,涉及到负责节点和非负责节点之间的数据同步过程,以及DistroProtocol协议在同步中的应用... 目录引言负责节点(发起同步)DistroProtocolDistroSyncChangeTask获取同步数据getDis