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

该脚本往{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_第1张图片

slave节点aof文件

Redis Cluster集群failover_第2张图片

 

 

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

 

你可能感兴趣的:(数据库,通用)