Redis Cluster 部分 master 下线仍可用
在 Redis Cluster 模式下,默认情况下参数 cluster-require-full-coverage 设置为 yes。这意味着 Redis 集群要求所有的哈希槽(16384 个 slot)都有主节点进行映射,如果有任何 slot 未被分配到可用的主节点,整个集群将被标记为不可用(unavailable),从而拒绝外部的读写请求。
解释:
- 默认行为:
- 如果某个主节点挂掉,而没有对应的从节点来接管,那么部分哈希槽将无法被映射。
- 集群出于数据一致性考虑,会将集群标记为不可用。 - 修改参数:
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