增删节点是指节点加入或退出redis cluster。
redis cluster 提供了运维工具redis-trib.rb,使得增删节点变得简单和容易。
一、增节点
1、加入 步骤:
(1)以cluster模式启动新节点(127.0.0.1:7000);
(2)用以下命令将新节点(空主节点)加入集群:
./redis-trib.rb add-node 127.0.0.1:7000 27.0.0.1:7006
其中第一个参数是新节点地址,第二参数可以是集群中任意一个节点地址。
就这样,把新节点(127.0.0.1:7000)加入了集群,但新节点没有负责任何哈希槽,可通过reshard给它分配哈希槽,本节不讨论如何reshard。
(3)如果要将新节点(空主节点)设为某主节点的从节点,可通过redis-cli连上新节点,然后用以下命令:
redis 127.0.0.1:7006> cluster replicate 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
其中3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e是新节点的主节点id。
2、实现原理
redis-trib.rb add-node命令实际发送了cluster meet命令给集群里某一个节点,该节点会将新节点加入它的集群配置,并与新节点进行握手,以确保可以连上新节点,最后通过定时发ping包给集群其他节点以告之有新节点的存在,其他节点也因此将新节点加入它的集群配置,并与新节点进行握手,以确保可以连上新节点。
设置新节点A为某主节点B的从节点是通过cluster replicate命令实现,分析该命令源码,可知其原理是首先将自已设为该主节点的从节点,建立主从同步关系,然后通过ping包告诉集群其他节点,我是主节点B的从节点。
以上变动,EpochConfig不会发生变化。
二、删除节点
1、从节点或空主节点删除步骤:
(1)简单通过以下命令:
./redis-trib del-node 127.0.0.1:7000 `<node-id>`
其中第一参数可以是集群中任意一个节点地址,第二参数是要删除节点id。
2、非空主节点删除步骤:
(1)首先通过man failover使该节点变为从节点;
(2)然后按删除从节点步骤删除该节点。
3、实现原理
通过分析redis-trib del-node命令可知:(1)首先发送cluster forget命令给除了删除节点外其他集群节点,它会使收到该命令的节点将待删除节点从集群节点配置中删除;
(2)如果待删除节点是空的主节点,会通过cluster replicate命令将它的从节点设为目前从节点数最少的主节点的从节点;(3)最后发送shutdown命令给待删除节点,使其自动关闭进程。
以上变动,EpochConfig同样不会发生变化。