两万字 redis.conf 7.0 配置和原理全解,生产王者必备( 八 )

5、
cluster-replica-validity-factor
该配置用于决定当 Redis Cluster 集群中,一个 master 宕机后,如何选择一个 slave 节点完成故障转移自动恢复(failover) 。如果设置为 0 ,则不管 slave 与 master 之间断开多久,都有资格成为 master 。
下面提供了两种方式来评估 slave 的数据是否太旧 。

  • 如果有多个 slave 可以 failover,他们之间会通过交换信息选出拥有拥有最大复制 offset 的 slave 节点 。
  • 每个 slave 节点计算上次与 master 节点交互的时间,这个交互包含最后一次 ping 操作、master 节点传输过来的写指令、上次与 master 断开的时间等 。如果上次交互的时间过去很久,那么这个节点就不会发起 failover 。
针对第二点,交互时间可以通过配置定义,如果 slave 与 master 上次交互的时间大于 (node-timeout *
cluster-replica-validity-factor) + repl-ping-replica-period,该 slave 就不会发生 failover 。
例如,`node-timeout = 30秒,
cluster-replica-validity-factor=10,repl-ping-slave-period=10秒,表示 slave 节点与 master 节点上次交互时间已经过去了 310 秒,那么 slave 节点就不会做 failover 。
调大
cluster-replica-validity-factor 则允许存储过旧数据的 slave 节点提升为 master,调小的话可能会导致没有 slave 节点可以升为 master 节点 。
考虑高可用,建议大家设置为
cluster-replica-validity-factor 0 。
6、cluster-migration-barrier
没有 slave 节点的 master 节点称为孤儿 master 节点,这个配置就是用于防止出现孤儿 master 。
当某个 master 的 slave 节点宕机后,集群会从其他 master 中选出一个富余的 slave 节点迁移过来,确保每个 master 节点至少有一个 slave 节点,防止当孤立 master 节点宕机时,没有 slave 节点可以升为 master 导致集群不可用 。
默认配置为 cluster-migration-barrier 1,是一个迁移临界值 。
含义是:被迁移的 master 节点至少还有 1 个 slave 节点才能做迁移操作 。比如 master A 节点有 2 个以上 slave 节点 ,当集群出现孤儿 master B 节点时,A 节点富余的 slave 节点可以迁移到 master B 节点上 。
生产环境建议维持默认值,最大可能保证高可用,设置为非常大的值或者配置
cluster-allow-replica-migration no 禁用自动迁移功能 。

cluster-allow-replica-migration 默认配置为 yes,表示允许自动迁移 。
7、
cluster-require-full-coverage
默认配置是 yes,表示为当 redis cluster 发现还有哈希槽没有被分配时禁止查询操作 。
这就会导致集群部分宕机,整个集群就不可用了,当所有哈希槽都有分配,集群会自动变为可用状态 。
如果你希望 cluster 的子集依然可用,配置成
cluster-require-full-coverage no 。
8、
cluster-replica-no-failover
当配置成 yes,在 master 宕机时,slave 不会做故障转移升为 master 。
这个配置在多数据中心的情况下会很有用,你可能希望某个数据中心永远不要升级为 master 节点,否则 master 节点就漂移到其他数据中心了,正常情况设置成 no 。
9、
cluster-allow-reads-when-down
默认是 no,表示当集群因主节点数量达不到最小值或者哈希槽没有完全分配而被标记为失效时,节点将停止所有客户端请求 。
设置成 yes,则允许集群失效的情况下依然可从节点中读取数据,保证了高可用 。
10、
cluster-allow-pubsubshard-when-down
配置成 yes,表示当集群因主节点数量达不到最小值或者哈希槽没有完全分配而被标记为失效时,pub/sub 依然可以正常运行 。
11、
cluster-link-sendbuf-limit
设置每个集群总线连接的发送字节缓冲区的内存使用限制,超过限制缓冲区将被清空(主要为了防止发送缓冲区发送给慢速连接时无限延长时间的问题) 。
默认禁用,建议最小设置 1gb,这样默认情况下集群连接缓冲区可以容纳至少一条 pubsub 消息(client-query-buffer-limit 默认是 1gb);
九、性能监控1、慢查询日志
慢查询(Slow Log)日志是我用于记录慢查询执行时间的日志系统,只要查询超过配置的时间,都会记录 。slowlog 只保存在内存中,因此效率很高,大家不用担心会影响到 Redis 的性能 。
执行时间不包括 I/O 操作的时间,比如与客户端建立连接、发送回复等,只记录执行命令执行阶段所需要的时间 。
你可以使用两个参数配置慢查询日志系统 。