Redis 集群:最少 3 个主节点?

Mat*_*Mat 13 cluster redis

我正在评估 Redis 3 的集群功能(我目前正在独立使用 Redis 2),所以我正在阅读http://redis.io/topics/cluster-tutorial 上的信息。

在这份文件中,我读到了一个非常重要的信息:

请注意,按预期工作的最小集群需要包含至少三个主节点。对于您的第一次测试,强烈建议启动一个具有三个主节点和三个从节点的六节点集群。

真的吗?在我看来,如果我使用分片功能(数据在节点之间共享),这是正确的,但是如果我不需要它并且我很高兴只在一个节点上拥有数据怎么办?

我基本上需要一个主站和两个从站(所以如果一个节点出现故障,集群将处于活动状态),我可以在生产环境中进行这种配置吗?如果是,禁忌症是什么?

非常感谢您的帮助!

小智 6

真的吗?

不,这不是真的。这是一个强烈建议(正如您可以从“按预期工作”语言中看出的那样;如果您不希望您的数据是持久的,并且您希望它消失,等等 - 您可以设置一个单节点集群。为什么你会而不是仅仅关闭集群模式......这取决于你。)

因此,是的,您可以设置单节点集群,即使不建议这样做(出于其他答案和文档中提到的所有原因。)redis 集群代码中没有任何内容可以阻止您,除了检查 redis-trib.rb 帮助程序,以劝阻天真的用户。

为了绕过该检查,并设置一个单节点集群(如果您确定这是您想要的 - 请记住,它几乎肯定不是),您可以手动将分片分配给您的节点CLUSTER ADDSLOTS 1 2 3 ...(等,对于所有 16384 个分片)。或者使用没有 3 节点安全检查 ( redis-trib.py create 127.0.0.1:6379)的 Python 版本的 redis-trib 。


小智 5

真的吗?

是的,这就是它在文档中的原因:)

在我看来,如果我使用分片功能(数据在节点之间共享),这是正确的,但是如果我不需要它并且我很高兴只在一个节点上拥有数据怎么办?

在集群模式下使用 Redis 意味着分片。如果您对单个实例感到满意,请不要使用集群。否则,请参阅集群规范本身以了解更多有关基本假设的信息。具体来说,在最小集群配置的情况下,您需要 3 个 master 来确保集群在分区的情况下的可用性,否则您将无法就多数达成一致。


小智 5

我知道这个问题很老,但如果有人需要类似的设置,可以使用主从配置代替集群。你需要:

  • 2 Redis 服务器至少
  • 3 Redis Sentinel 监控健康并避免脑裂
  • 一种检查谁是主人的方法(我在客户端服务器上使用 HAProxy 和一些检查命令)

如果你可以让它足够聪明,你可以只写入 master 并从所有节点读取。我在一些 Wordpress 站点上使用此设置,但该插件不是用来检测主节点的,所以我只使用 HAProxy 来检测主节点并将所有流量发送到该节点。如果主节点死亡,则从节点将承担主角色(由 redis-sentinel 管理)。HAProxy 检测到 master 已更改,然后更改接收所有流量的节点。

抱歉没有发布代码和示例,但现在我不能这样做。

你好!!