Code前端首页关于Code前端联系我们

Redis Cluster的原理清晰、逻辑清晰,如果看不懂这些配置,只能纸上谈兵

terry 2年前 (2023-09-28) 阅读数 68 #未命名

Redis Cluster集群相关配置,需要注意并了解如何使用集群方法。不是说原理清楚、逻辑清晰,而是集群的配置是怎样的?如何配置集群使其快速飞翔并实现真正的高可用性目前还不清楚。下面的配置细节也能让您更深入地了解集群原理。

已启用集群

常规 Redis 实例无法加入集群。要将节点添加到Redis Cluster,需要设置cluster-enabled yes

cluster-config-file

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

集群中的每个节点都有一个配置文件。该文件不由程序员编辑。它是我自己创建和更新的。每个节点必须使用不同的配置文件。确保它位于同一个集群中。不同的节点使用不同的文件。

cluster-node-timeout

设置集群节点不可用和节点故障检测的最大超时时间。在集群中,当一个节点向另一个节点发送PING命令,但目标节点在给定的时限内没有返回对PING命令的响应时,发送命令的节点会将目标节点标记为PFAIL(possible failure, (可能已经过期);

如果过了这个时间主节点仍然没有响应,从节点将开始故障迁移并升级到主节点。

请注意,如果有节点仍然没有响应在此时间内连接到大多数主节点,该节点将不再接收请求。

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

cluster-port

这个端口是集群总线监听TCP连接的端口,默认配置是集群端口0,我将该端口绑定为客户端命令端口+10000(客户端端口默认为6379,因此它绑定到16379作为集群总线端口)。每个Redis Cluster节点必须开放两个端口:

  • 一个用于服务客户端的TCP端口,例如6379。
  • 另一个称为集群总线端口。节点使用集群总线进行故障监控、配置更新、故障转移等。客户端一定不能与集群总线端口通信,并且一定要在防火墙中打开这两个端口,否则Redis集群会接地,无法通信。

cluster-replica-validity-factor

该配置用于确定当Redis Cluster集群中的master出现故障时,如何选择从节点来完成自动故障转移恢复(failover)。如果设置为 0,则从站认为自己有资格成为主站,无论与主站的连接丢失多长时间。

下面提供了两种评估从站数据是否太旧的方法。

  • 如果有多个可以故障转移的从节点,它们通过交换信息来选择复制偏移量最大的从节点。
  • 每个从节点计算最后一次与主节点交互的时间。本次交互包括最后一次ping操作、主节点发送的写命令、最后一次主节点断开连接等。如果距离上次交互已经过去很长时间,则该节点启动失败故障转移。

对于第二点,交互时间可以通过配置来定义。如果 Slave 和 Master 之间的最后一次交互时间大于 (node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period,则 Slave 将不会进行故障转移。

例如`节点超时 = 30 秒,cluster-replica-validity-factor=10repl-ping-slave-period=10 秒,表示从节点与主节点的最后一次交互时间已经过去了310秒,之后从节点将不会进行故障转移。

通过提高集群副本有效性因子集群副本有效性因子,可以将已存储旧数据的从节点提升为主节点。如果该值减小,则可能没有从节点可以晋升为主节点。

考虑到其高可用性,建议设置为cluster-replica-validity-factor 0

cluster-migration-barrier

没有从节点的主节点称为孤儿主节点。此配置用于防止主机裸奔。

当一个Master的Slave节点出现故障时,集群会从其他Master中选择一个备用的Slave节点并进行迁移,以保证每个Master节点至少有一个Slave节点,防止孤立的Master节点降级时出现故障。没有从节点可以提升为主节点,导致集群不可用。

默认配置为cluster-migration-barrier 1,这是迁移阈值。

的含义是:迁移后,主节点必须至少有一个从节点才能执行迁移操作。例如,Master A节点有2个以上的Slave节点。当集群中出现孤儿主B节点时,可以将节点A的备用从节点迁移到主节点B上。

在生产环境中,建议保持默认值,以保证高可用。如果可能,请将其设置为很大的值或配置 cluster-allow-replica-migration no 以禁用自动迁移功能。

cluster-allow-replica-migration 默认配置是yes,即允许自动迁移。

cluster-require-full-coverage

默认配置为yes,即当redis cluster检测到至少有1个hash slot未分配时,禁止查询操作。

这会导致部分集群宕机,整个集群不可用。当所有哈希槽都被分配后,集群将自动变得可用。

如果您希望集群的子集仍然可用,请配置 cluster-require-full-coverage yes

集群副本无故障转移

默认配置为no。如果配置为yes,当master出现故障时,slave不会故障转移或升级到master。 。

此配置在多数据中心情况下非常有用。您可能希望某个特定的数据中心永远不要升级到主节点,否则主节点将漂移到其他数据中心。

cluster-allow-reads-when-down

默认值为no,表示集群因masternode数量未达到最小值或hash槽达到最小值而被标记为无效未完全到达分配,节点停止所有客户端请求。

设置为yes,这样即使集群宕机也可以从节点读取数据,保证高可用性。

cluster-allow-pubsubshard-when-down

配置为yes,表示当集群因为master节点数未达到最小值或者hash槽数未达到最小值时被标记为无效没有完全分配,pub/sub 仍然可以正常运行。

cluster-link-sendbuf-limit

设置每个集群总线连接的发送字节缓冲区的内存使用限制。超过限制时清除缓冲区(主要是防止发送缓冲区发送到慢速连接)。无限期延长时间的问题)。

默认禁用。建议最小设置为 1 GB,以便集群连接缓冲区默认可以容纳至少一条 pubsub 消息(client-query-buffer-limit 默认设置为 1 GB);

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门