" />
文章

Redis Cluster 部分 master 下线仍可用

在 Redis Cluster 模式下,默认情况下参数 cluster-require-full-coverage 设置为 yes。这意味着 Redis 集群要求所有的哈希槽(16384 个 slot)都有主节点进行映射,如果有任何 slot 未被分配到可用的主节点,整个集群将被标记为不可用(unavailable),从而拒绝外部的读写请求。

解释:

  1. 默认行为:
    - 如果某个主节点挂掉,而没有对应的从节点来接管,那么部分哈希槽将无法被映射。
    - 集群出于数据一致性考虑,会将集群标记为不可用。
  2. 修改参数:cluster-require-full-coverage:
    - 设置 cluster-require-full-coverage 为 no,表示即使部分 slot 没有被覆盖,Redis 集群仍然可以对外提供服务。
    - 这种情况下,集群会继续处理请求,但对未被覆盖的 slot 的请求会返回错误。

适用场景:

  • 保持一致性(默认配置): 如果数据完整性和一致性至关重要,建议保持默认配置,即 cluster-require-full-coverage 为 yes。
  • 保持高可用性: 在一些场景下,允许部分数据暂时不可用而不是让整个集群停止服务(如缓存场景),可以将 cluster-require-full-coverage 设置为 no。

修改配置的方法:

在 Redis 配置文件(redis.conf)中:

cluster-require-full-coverage no

或者动态修改:

redis-cli -c cluster-require-full-coverage no

注意:动态修改的配置重启后会失效,建议在配置文件中持久化。


总结:

  • 如果你的需求是高可用性,可以将 cluster-require-full-coverage 设置为 no。
  • 如果需要保证所有数据的完整性,建议保持默认值 yes。
License:  CC BY 4.0