rediscluster 配置的过量,浪费了资源。不够时又加加资源
查看当前 rediscluster 的主从关系,并记下来 hash 值。
redis-cli -c cluster nodes
现在先进行扩容,192.168.11.3:6379 是当前 cluster 的一个 master 节点。
添加 192.168.22.3:6379,从节点 192.168.22.4:6379
查看 cluster 状态
redis-trib.rb info 192.168.11.3:6379
添加,默认为 master
redis-trib.rb add-node 192.168.22.3:6379 192.168.11.3:6379
添加 –slave, 主动找没有 slave 的 master 节点
redis-trib.rb add-node --slave 192.168.22.4:6379 192.168.11.3:6379
查看 cluster nodes
redis-cli -c cluster nodes
接下来确定哪些 master 的 slots 迁到新加的实例,找到新加的 master hash 值为 e0d88661607192a4ffac1b74412c6cd6d0932067
从已有 slot 里分配 100 个 slots 到 e0d88661607192a4ffac1b74412c6cd6d0932067
redis-trib.rb reshard --from 32f38c9e5e42f6a66e67abdd540cce72e4bf399c --to e0d88661607192a4ffac1b74412c6cd6d0932067 --slots 100 --yes 192.168.11.3:6379
如果遇到失败,进行 fix
redis-trib.rb fix 192.168.11.3:6379
反复几次,并查看可以达到迁移目的。
总是 fix 特别烦,写个有限循环搞定。
for i in $(seq 20); do redis-trib.rb reshard --from 32f38c9e5e42f6a66e67abdd540cce72e4bf399c --to e0d88661607192a4ffac1b74412c6cd6d0932067 --slots 100 --yes 192.168.11.3:6379 || redis-trib.rb fix 192.168.11.3:6379; done
缩容即是把里面的 slots 移到其他实例里,然后删除 node 对应的 hash
redis-trib.rb del-node 192.168.11.3:6379 e0d88661607192a4ffac1b74412c6cd6d0932067
查看当前实例是否还在提供服务
redis-cli monitor
当缩容或扩容完之后,如果 slots 的数量差的多的话, 可以对整个集群 rebalance
redis-trib.rb rebalance 192.168.11.3:6379
同样的如果中间中断,就 fix
redis-trib.rb fix 192.168.11.3:6379
到最后会提示
*** No rebalancing needed! All nodes are within the 2.0% threshold.
查看整个集群的情况
#redis-cli -c cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:12 cluster_size:6 cluster_current_epoch:46 cluster_my_epoch:40 cluster_stats_messages_sent:912305 cluster_stats_messages_received:912227
ok,到这里结束。
Leave a Reply