hello云胜

技术与生活

0%

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
2
cluster-node-timeout 5000
cluster-replica-validity-factor 0