前言:以前咱们尝试搭建了cluster集群,而且经过redis-cli客户端查看了集群状态,下面咱们将会继续介绍如何动态添加节点与删除节点。node
预先准备内容:新增两个节点,并启动(步骤与前一文6个节点服务相似)redis
计划添加 7007与7008两个节点服务,而且分别对应master与slave。微信
./src/redis-server cluster-config/7007/redis.conf ./src/redis-server cluster-config/7008/redis.conf
利用 redis-trib.rb 的命令 add-node newIP:port oldIP:port数据结构
# 第一个IP为新添加的节点IP地址,第二个IP为当前集群中已经存在的任意一个节点,主要是为了创建关系 ./src/redis-trib.rb add-node 127.0.0.1:7007 127.0.0.1:7001
输出.net
>>> Adding node 127.0.0.1:7007 to cluster 127.0.0.1:7001 >>> Performing Cluster Check (using node 127.0.0.1:7001) M: 44c678a77a5181b99f6fe0a5e24a98462d687288 127.0.0.1:7001 slots:0-5460 (5461 slots) master 1 additional replica(s) M: 0d68dfae22060574a19712f2b6ee2608dbf1b471 127.0.0.1:7003 slots:10923-16383 (5461 slots) master 1 additional replica(s) S: ca9146ea9ce9ef7aa60ac2511f90bd91677285ff 127.0.0.1:7004 slots: (0 slots) slave replicates 0d68dfae22060574a19712f2b6ee2608dbf1b471 S: bb5f01c7e82348e6c90ce7da209696d02e06546b 127.0.0.1:7005 slots: (0 slots) slave replicates 44c678a77a5181b99f6fe0a5e24a98462d687288 S: 88a52d61d4c5f5ee00551a546460697bf9f1c475 127.0.0.1:7006 slots: (0 slots) slave replicates 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 M: 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 127.0.0.1:7002 slots:5461-10922 (5462 slots) master 1 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:7007 to make it join the cluster. [OK] New node added correctly. // 提示新的节点成功加入
客户端链接查看nodes节点3d
./src/redis-cli -c -h 127.0.0.1 -p 7001 127.0.0.1:7001> cluster nodes 0d68dfae22060574a19712f2b6ee2608dbf1b471 127.0.0.1:7003@17003 master - 0 1537151595086 3 connected 10923-16383 ca9146ea9ce9ef7aa60ac2511f90bd91677285ff 127.0.0.1:7004@17004 slave 0d68dfae22060574a19712f2b6ee2608dbf1b471 0 1537151596091 4 connected bb5f01c7e82348e6c90ce7da209696d02e06546b 127.0.0.1:7005@17005 slave 44c678a77a5181b99f6fe0a5e24a98462d687288 0 1537151595086 5 connected 88a52d61d4c5f5ee00551a546460697bf9f1c475 127.0.0.1:7006@17006 slave 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 0 1537151595588 6 connected // 新节点,master,没有槽点 b062c61070542120c4cc6d6bb1e9c800a28f1be7 127.0.0.1:7007@17007 master - 0 1537151594000 0 connected 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 127.0.0.1:7002@17002 master - 0 1537151594077 2 connected 5461-10922 44c678a77a5181b99f6fe0a5e24a98462d687288 127.0.0.1:7001@17001 myself,master - 0 1537151594000 1 connected 0-5460
会发现新添加的节点为master,可是并无分配槽点code
// 与其余master相比,没有槽点信息 b062c61070542120c4cc6d6bb1e9c800a28f1be7 127.0.0.1:7007@17007 master - 0 1537151594000 0 connected
从新分片 reshardorm
./src/redis-trib.rb reshard 127.0.0.1:7007
提示server
// 打算分配多少槽点给当前节点 How many slots do you want to move (from 1 to 16384)?
输入 200 (意思是给当前节点分配200个槽点)blog
// 接收节点的ID是多少,也就是当前节点的ID What is the receiving node ID?
输入 b062c61070542120c4cc6d6bb1e9c800a28f1be7
// 这里支持从全部节点平均分配槽点,以及从指定节点分配槽点两种方式 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: // 这里输入槽点来源节点的ID,已done结束,或all(若是是all,则表示从全部节点获取)
这里提示 Source node #1:
咱们输入 7001 对应的ID,回车后,输入 done 执行提交
Source node #2: done
回车后会展现分配计划,并提问是否确认分片计划
Do you want to proceed with the proposed reshard plan (yes/no)? yes
输入 yes
便可。
此时新节点添加完成,下面咱们验证一下
进入客户端,并输入 cluster nodes 得出以下内容
0d68dfae22060574a19712f2b6ee2608dbf1b471 127.0.0.1:7003@17003 master - 0 1537152323501 3 connected 10923-16383 ca9146ea9ce9ef7aa60ac2511f90bd91677285ff 127.0.0.1:7004@17004 slave 0d68dfae22060574a19712f2b6ee2608dbf1b471 0 1537152323198 4 connected bb5f01c7e82348e6c90ce7da209696d02e06546b 127.0.0.1:7005@17005 slave 44c678a77a5181b99f6fe0a5e24a98462d687288 0 1537152322000 5 connected 88a52d61d4c5f5ee00551a546460697bf9f1c475 127.0.0.1:7006@17006 slave 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 0 1537152322190 6 connected // 7007 多出 0-199 b062c61070542120c4cc6d6bb1e9c800a28f1be7 127.0.0.1:7007@17007 master - 0 1537152322000 7 connected 0-199 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 127.0.0.1:7002@17002 master - 0 1537152323098 2 connected 5461-10922 // 7001 少了0-199,变为200-5460 44c678a77a5181b99f6fe0a5e24a98462d687288 127.0.0.1:7001@17001 myself,master - 0 1537152323000 1 connected 200-5460
0-199
的内容,标识分配0~199共200个槽点。200~5460
)利用 redis-trib.rb 的命令 add-node 添加节点
./src/redis-trib.rb add-node 127.0.0.1:7008 127.0.0.1:7001
经过上面咱们已经知道,新添加的节点是master,这里咱们须要将7008节点变为7007节点的slave节点
客户端链接进入7008
./src/redis-cli -c -h 127.0.0.1 -p 7008
将7008节点变为7007节点的slave节点
# 最后输入的是 目标Master对应的IP 127.0.0.1:7008> cluster replicate b062c61070542120c4cc6d6bb1e9c800a28f1be7
至此,slave节点已经添加完成了
进入客户端,并输入 cluster nodes 得出以下内容
b062c61070542120c4cc6d6bb1e9c800a28f1be7 127.0.0.1:7007@17007 master - 0 1537153050731 7 connected 0-199 bb5f01c7e82348e6c90ce7da209696d02e06546b 127.0.0.1:7005@17005 slave 44c678a77a5181b99f6fe0a5e24a98462d687288 0 1537153049000 1 connected 88a52d61d4c5f5ee00551a546460697bf9f1c475 127.0.0.1:7006@17006 slave 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 0 1537153049522 2 connected ca9146ea9ce9ef7aa60ac2511f90bd91677285ff 127.0.0.1:7004@17004 slave 0d68dfae22060574a19712f2b6ee2608dbf1b471 0 1537153050227 3 connected 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 127.0.0.1:7002@17002 master - 0 1537153049000 2 connected 5461-10922 44c678a77a5181b99f6fe0a5e24a98462d687288 127.0.0.1:7001@17001 master - 0 1537153050000 1 connected 200-5460 0d68dfae22060574a19712f2b6ee2608dbf1b471 127.0.0.1:7003@17003 master - 0 1537153049522 3 connected 10923-16383 // 变为Slave 99496d346dd4ab3b1b40ec1b802245a80ab9b1cd 127.0.0.1:7008@17008 myself,slave b062c61070542120c4cc6d6bb1e9c800a28f1be7 0 1537153049000 0 connected
可见当前节点(7008)已成为Slave
步骤与分配槽点同样
输入从新分片命令
./src/redis-trib.rb reshard 127.0.0.1:7007
提示
// 移出200 How many slots do you want to move (from 1 to 16384)? 200 // 输入接收槽点的节点的ID,这里输入的是7001的ID What is the receiving node ID? 44c678a77a5181b99f6fe0a5e24a98462d687288 // 输入移出槽点的节点的ID,这里先输入7007的ID 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. // 输入7007的ID Source node #1:b062c61070542120c4cc6d6bb1e9c800a28f1be7 // 输入done执行指定节点的模式提交,all表示从全部节点上面平均分配 Source node #2:done // 是否执行从新分片计划,输入yes Do you want to proceed with the proposed reshard plan (yes/no)? yes
此时经过客户端查看 cluster nodes
// 7007 这里没有了以前的槽点 b062c61070542120c4cc6d6bb1e9c800a28f1be7 127.0.0.1:7007@17007 master - 0 1537153624000 7 connected bb5f01c7e82348e6c90ce7da209696d02e06546b 127.0.0.1:7005@17005 slave 44c678a77a5181b99f6fe0a5e24a98462d687288 0 1537153624350 8 connected 88a52d61d4c5f5ee00551a546460697bf9f1c475 127.0.0.1:7006@17006 slave 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 0 1537153625000 2 connected ca9146ea9ce9ef7aa60ac2511f90bd91677285ff 127.0.0.1:7004@17004 slave 0d68dfae22060574a19712f2b6ee2608dbf1b471 0 1537153625565 3 connected 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 127.0.0.1:7002@17002 master - 0 1537153625565 2 connected 5461-10922 // 7001 恢复如初 44c678a77a5181b99f6fe0a5e24a98462d687288 127.0.0.1:7001@17001 master - 0 1537153623846 8 connected 0-5460 0d68dfae22060574a19712f2b6ee2608dbf1b471 127.0.0.1:7003@17003 master - 0 1537153625000 3 connected 10923-16383 99496d346dd4ab3b1b40ec1b802245a80ab9b1cd 127.0.0.1:7008@17008 myself,slave 44c678a77a5181b99f6fe0a5e24a98462d687288 0 1537153625000 0 connected
可见
直接使用命令 del-node ip:port id
./src/redis-trib.rb del-node 127.0.0.1:7007 b062c61070542120c4cc6d6bb1e9c800a28f1be7
提示以下,说明删除成功
>>> Removing node b062c61070542120c4cc6d6bb1e9c800a28f1be7 from cluster 127.0.0.1:7007 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node.
进入客户端输入命令 cluster nodes
0d68dfae22060574a19712f2b6ee2608dbf1b471 127.0.0.1:7003@17003 master - 0 1537154183000 3 connected 10923-16383 ca9146ea9ce9ef7aa60ac2511f90bd91677285ff 127.0.0.1:7004@17004 slave 0d68dfae22060574a19712f2b6ee2608dbf1b471 0 1537154183391 4 connected bb5f01c7e82348e6c90ce7da209696d02e06546b 127.0.0.1:7005@17005 slave 44c678a77a5181b99f6fe0a5e24a98462d687288 0 1537154183592 8 connected 88a52d61d4c5f5ee00551a546460697bf9f1c475 127.0.0.1:7006@17006 slave 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 0 1537154183000 6 connected 83e9712ba4520f949119b21a4ebb3de2d66ed2a0 127.0.0.1:7002@17002 master - 0 1537154183895 2 connected 5461-10922 99496d346dd4ab3b1b40ec1b802245a80ab9b1cd 127.0.0.1:7008@17008 slave 44c678a77a5181b99f6fe0a5e24a98462d687288 0 1537154182080 8 connected 44c678a77a5181b99f6fe0a5e24a98462d687288 127.0.0.1:7001@17001 myself,master - 0 1537154182000 8 connected 0-5460
发现7007成功移除了
slave节点,直接移除便可
./src/redis-trib.rb del-node 127.0.0.1:7008 99496d346dd4ab3b1b40ec1b802245a80ab9b1cd
至此,实现动态添加、删除节点的功能。
咱们总结一下添加和删除的步骤
添加节点
删除节点
https://my.oschina.net/gmarshal
欢迎关注个人我的微信订阅号:(听说这个头像程序猿专用)