Redis5集群配置参数问题
今天有人让我帮忙看,他的redis集群切换要15秒多。
之前我用的是redis4,切换基本是秒级的,业务都是无感的。这个15秒似乎有点慢。
看了下redis5的配置参数
Redis集群的参数配置
在redis.conf中的一些参数说明:
cluster-enabled <yes/no>:
如果配置”yes”则开启集群功能,此redis实例作为集群的一个节点,否则,它是一个普通的单一的redis实例。
cluster-config-file :
注意:虽然此配置的名字叫“集群配置文件”,但是此配置文件不能人工编辑,它是集群节点自动维护的文件,主要用于记录集群中有哪些节点、他们的状态以及一些持久化参数等,方便在重启时恢复这些状态。通常是在收到请求之后这个文件就会被更新。
cluster-node-timeout :
这是集群中的节点能够失联的最大时间,超过这个时间,该节点就会被认为故障。
如果主节点超过这个时间还是不可达,则用它的从节点将启动故障迁移,升级成主节点。
注意,任何一个节点在这个时间之内如果还是没有连上大部分的主节点,则此节点将停止接收任何请求。
默认时15秒
cluster-replica-validity-factor :
从节点数据有效因子。
这个参数是控制什么样的从节点可以进行faiover(故障转移),变成master节点。
假设有多个从节点,我们当然希望选一个数据最新的节点进行failover。如果某个从节点的数据太旧,那就不要让他failover了。
这个参数就是控制这个的,默认是10。
比如前面的cluster-node-timeout用默认值15秒,那么如果某个从节点的交互时间>15*10 + ping心跳时间(10秒)
那么这个从节点就不会被选为failover的节点。
所以可能出现由于某主节点失联却没有从节点能顶上的情况,从而导致集群不能正常工作,在这种情况下,只有等到原来的主节点重新回归到集群,集群才恢复运作。
如果设置成0,则无论从节点与主节点失联多久,从节点都会尝试升级成主节点。
默认是10
总之,这个从节点数据有效因子如果太大,可能导致比较旧的从节点failover成主节点。如果太小,又可能导致没有从节点能failover成主节点。
看redis.conf文件中说
For maximum availability, it is possible to set the replica-validity-factor
to a value of 0, which means, that replicas will always try to failover the
master regardless of the last time they interacted with the master.
(However they’ll always try to apply a delay proportional to their
offset rank).Zero is the only value able to guarantee that when all the partitions heal
the cluster will always be able to continue.
为了保持最高的高可用性,可以将replica-validity-factor设置为0.这样备节点总会尝试进行failover
所以,配置为
1 | cluster-node-timeout 5000 |