乐趣区

关于后端:Redis-Cluster-原理说的头头是道这些配置不懂就是纸上谈兵

Redis Cluster 原理说的有条有理,这些配置不懂就是夸夸其谈

Redis Cluster 集群相干配置,应用集群形式的你必须器重和通晓。别嘴上原理说的有条有理,而集群有哪些配置?如何配置让集群快到飞起,实现真正的高可用却一头雾水,通过上面这些配置详解也让你对集群原理更加粗浅。

cluster-enabled

一般的 Redis 实例是不能成为集群的一员,想要将该节点退出 Redis Cluster,须要设置 cluster-enabled yes

cluster-config-file

cluster-config-file nodes-6379.conf 指定集群中的每个节点文件。

集群中的每个节点都有一个配置文件,这个文件并不是让程序员编辑的,是我本人创立和更新的,每个节点都要应用不同的配置文件,肯定要确保同一个集群中的不同节点应用的是不同的文件。

cluster-node-timeout

设置集群节点不可用的最大超时工夫,节点生效检测。集群中当一个节点向另一个节点发送 PING 命令,然而指标节点未在给定的时限内返回 PING 命令的回复时,那么发送命令的节点会将指标节点标记为 PFAIL(possible failuer,可能已生效);

如果 master 节点超过这个工夫还是无响应,则用它的从节点将启动故障迁徙,升级成主节点。

留神,任何一个节点在这个工夫之内如果还是没有连上大部分的主节点,则此节点将进行接管任何申请。

默认配置是 cluster-node-timeout 15000,单位是毫秒数。

cluster-port

该端口是集群总线监听 TCP 连贯的端口,默认配置为 cluster-port 0,我就会把端口绑定为客户端命令端口 + 10000(客户端端口默认 6379,所以绑定为 16379 作为集群总线端口)。每个 Redis Cluster 节点都须要凋谢两个端口:

  • 一个用于服务于客户端的 TCP 端口,比方 6379.
  • 另一个称为集群总线端口,节点应用集群总线进行故障监测、配置更新、故障转移等。客户端不要与集群总线端口通信,另外请确保在防火墙关上这两个端口,否则 Redis 集群接地那将无奈通信。

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=10repl-ping-slave-period=10 秒,示意 slave 节点与 master 节点上次交互工夫曾经过来了 310 秒,那么 slave 节点就不会做 failover。

调大 cluster-replica-validity-factor 则容许存储过旧数据的 slave 节点晋升为 master,调小的话可能会导致没有 slave 节点能够升为 master 节点。

思考高可用,倡议大家设置为 cluster-replica-validity-factor 0

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,示意容许主动迁徙。

cluster-require-full-coverage

默认配置是 yes,示意为当 redis cluster 发现至多还有一个 哈希槽没有被调配时禁止查问操作。

这就会导致集群局部宕机,整个集群就不可用了,当所有哈希槽都有调配,集群会主动变为可用状态。

如果你心愿 cluster 的子集仍然可用,配置成 cluster-require-full-coverage yes

cluster-replica-no-failover

默认配置为 no,当配置成 yes,在 master 宕机时,slave 不会做故障转移升为 master。

这个配置在多数据中心的状况下会很有用,你可能心愿某个数据中心永远不要降级为 master 节点,否则 master 节点就漂移到其余数据中心了。

cluster-allow-reads-when-down

默认是 no,示意当集群因主节点数量达不到最小值或者哈希槽没有齐全调配而被标记为生效时,节点将进行所有客户端申请。

设置成 yes,则容许集群生效的状况下仍然可从节点中读取数据,保障了高可用。

cluster-allow-pubsubshard-when-down

配置成 yes,示意当集群因主节点数量达不到最小值或者哈希槽没有齐全调配而被标记为生效时,pub/sub 仍然能够失常运行。

cluster-link-sendbuf-limit

设置每个集群总线连贯的发送字节缓冲区的内存应用限度,超过限度缓冲区将被清空(次要为了避免发送缓冲区发送给慢速连贯时有限延长时间的问题)。

默认禁用,倡议最小设置 1gb,这样默认状况下集群连贯缓冲区能够包容至多一 pubsub 音讯(client-query-buffer-limit 默认是 1gb);

退出移动版