Think before you speak, read before you think.

rediscluster缩容和扩容

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,到这里结束。


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *