Redis Cluster集群failover

关于master/slave的failover,redis cluster通过cluster-node-timeout设置节点间状态检测超时。 如果在redis中执行命令比较耗时,比如超过cluster-node-timeout时长,集群master和slave很容易触发failover,频繁的failover容易导致集群状态的变化。

为了验证集群的变化,可以通过如下加负载lua脚本来模拟一些测试场景:

[root@zhannk create-cluster]# ../../src/redis-cli -h 192.168.100.70 -p 30003
192.168.100.70:30003> eval "local key=KEYS[1] ;local s=tonumber(ARGV[1]); local e=tonumber(ARGV[2]); while s<e do redis.call('zadd',key,tostring(s),tostring(s));s=s+1;end;return redis.call('zrangebyscore',key,'-inf','+inf','withscores','limit',ARGV[3],ARGV[4])" 1 {thekey}.50 10 10000000 0 100

该脚本往{thekey}.50的zset里写入10000000条数据,并返回前100条( 脚本源自对用户现场一个可疑zrangebyscore的操作验证)。在默认cluster-node-timeout为2s的情况下,可以明显观察到master/slave的不断failover;同时数据的操作也容易失败。

需要注意的是,类似上面的lua脚本会导致master和slave下的aof文件并不是完全一样。redis在做master/slave同步时,并不是把master的aof文件简单同步……特别是使用lua脚本的时候,在同步发生时,需关注slave节点aof文件大小问题。

master节点aof文件:

Redis Cluster集群failover

slave节点aof文件

Redis Cluster集群failover

redis cluster集群维护工具redis-trib.rb简单使用:

创建集群:

redis-trib.rb create 192.168.100.254:30001 192.168.100.254:30002 192.168.100.70:30001

添加slave,trib脚本会自动调整合适master:

redis-trib.rb add-node –slave 192.168.100.254:30003 192.168.100.70:30001

再平衡数据:

redis-trib.rb rebalance 192.168.100.254:30001

slot异常修复:

redis-trib.rb fix 192.168.100.254:30001

cluster状态检查:

redis-trib.rb check 192.168.100.254:30001

原文链接:https://blog.csdn.net/zhannk/article/details/93194394

原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/16729

(0)
上一篇 2022年11月16日 22:31
下一篇 2022年11月16日 22:31

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

优速盾注册领取大礼包www.cdnb.net
/sitemap.xml