Redis集群动态添加和删除节点

若是首次执行指令创建redis集群,在指令执行之前,需要在各个节点使用redis-cli进入当前节点redis服务并执行flushall,把各个节点中的数据清空。删除appendonly.aof、dump.rdb,同时删除每个节点中的集群配置文件nodes-6379.conf。

若是执行指令重新创建redis集群,则需要在集群中的各个节点redis服务上执行指令cluster reset。

启动redis集群

./redis-trib.rb create --replicas 1 192.168.0.203:6379 192.168.0.204:6379 192.168.0.205:6379 192.168.0.206:6379 192.168.0.207:6379 192.168.0.208:6379

Redis集群动态添加和删除节点

Redis集群动态添加和删除节点

查看集群相关信息

cluster nodes

cluster info

Redis集群动态添加和删除节点

查看集群操作redis-trib.rb的帮助信息

./redis-trib.rb help   

Redis集群动态添加和删除节点

动态添加主节点、从节点

添加新的redis节点192.168.0.209:6379

./redis-trib.rb add-node 192.168.0.209:6379 192.168.0.203:6379

Redis集群动态添加和删除节点

Redis集群动态添加和删除节点

执行./redis-cli -c -h 192.168.0.203 -p 6379

执行cluster nodes

Redis集群动态添加和删除节点

新添加进来的redis节点192.168.0.209作为Master,但是与其它Master节点不同的是,还没有给它分配槽,即还不能用来存放数据。

下面,需要重新分配槽,指令中指定一个已存在的Master节点

./redis-trib.rb reshard  192.168.0.203:6379

Redis集群动态添加和删除节点

Redis集群动态添加和删除节点

重新查看集群信息

Redis集群动态添加和删除节点

然后,在redis集群中添加一个redis从节点192.168.0.210:6379

添加节点

./redis-trib.rb add-node 192.168.0.210:6379 192.168.0.203:6379

登录到210上的redis服务,指定从节点210的主节点

cluster replicate 36541c9c13dc92441d578c40960d2bf22af301d3

Redis集群动态添加和删除节点

查看集群节点信息

Redis集群动态添加和删除节点

192.168.0.210上的从redis服务节点作为主redis服务节点192.168.0.209的Slave。


动态删除从节点

./redis-trib.rb del-node 192.168.0.210:6379 384bc1b9df3992e9be3af785b016d5f67879df25

Redis集群动态添加和删除节点


动态删除主节点

因为主节点192.168.0.209中redis含有槽,槽中存放着数据。在删除主节点之前应先将槽slot移动到其它的主节点中,否则就会出现数据丢失。

./redis-trib.rb reshard 192.168.0.209:6379

Redis集群动态添加和删除节点

Redis集群动态添加和删除节点

此时,209Master主节点redis中不再包含槽slot

Redis集群动态添加和删除节点

删除redis主节点209

Redis集群动态添加和删除节点


此时,向集群中添加数据

Redis集群动态添加和删除节点

在集群中的其它节点位置尝试获取数据。发现如下图问题:

Redis集群动态添加和删除节点

出现这个问题的原因是没有以集群的模式使用redis-cli登录到redis,命令中应该添加-c 。

Redis集群动态添加和删除节点