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
查看集群相关信息
cluster nodes
cluster info
查看集群操作redis-trib.rb的帮助信息
./redis-trib.rb help
动态添加主节点、从节点
添加新的redis节点192.168.0.209:6379
./redis-trib.rb add-node 192.168.0.209:6379 192.168.0.203:6379
执行./redis-cli -c -h 192.168.0.203 -p 6379
执行cluster nodes
新添加进来的redis节点192.168.0.209作为Master,但是与其它Master节点不同的是,还没有给它分配槽,即还不能用来存放数据。
下面,需要重新分配槽,指令中指定一个已存在的Master节点
./redis-trib.rb reshard 192.168.0.203:6379
重新查看集群信息
然后,在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
查看集群节点信息
192.168.0.210上的从redis服务节点作为主redis服务节点192.168.0.209的Slave。
动态删除从节点
./redis-trib.rb del-node 192.168.0.210:6379 384bc1b9df3992e9be3af785b016d5f67879df25
动态删除主节点
因为主节点192.168.0.209中redis含有槽,槽中存放着数据。在删除主节点之前应先将槽slot移动到其它的主节点中,否则就会出现数据丢失。
./redis-trib.rb reshard 192.168.0.209:6379
此时,209Master主节点redis中不再包含槽slot
删除redis主节点209
此时,向集群中添加数据
在集群中的其它节点位置尝试获取数据。发现如下图问题:
出现这个问题的原因是没有以集群的模式使用redis-cli登录到redis,命令中应该添加-c 。