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

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

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

在这篇文档中我读到了一个非常重要的信息:

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

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

我基本上需要一个主服务器和两个从服务器(这样即使一个节点发生故障,集群仍可正常运行),我可以在生产环境中使用此配置吗?如果可以,有什么禁忌症?

非常感谢您的帮助!

答案1

这是真的吗?

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

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

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

答案2

这是真的吗?

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

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

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

答案3

我知道这个问题已经过时了,但是如果有人需要类似的设置,可以使用 Master-Slaves 配置而不是 Cluster。你需要:

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

如果您可以使其足够智能,那么您只需写入主节点并从所有节点读取即可。我在一些 Wordpress 网站上使用此设置,但插件无法检测谁是主节点,因此我仅使用 HAProxy 检测主节点并将所有流量发送到该节点。如果主节点死亡,则从属节点将担任主节点角色(redis-sentinel 管理该节点)。HAProxy 检测到主节点已更改,然后更改接收所有流量的节点。

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

问候!!

答案4

如果依靠 Redis 进行故障转移,则至少需要三个主节点和三个从属节点(至少 3 台服务器,每台运行一个主服务器和一个从属服务器)。

如果您使用外部集群软件,例如 heartbeat,您可以设置两个节点,一个为主节点,一个为从节点,采用集群模式,将所有 16384 个插槽分配给主节点,并在主节点关闭时使用故障转移脚本进行“集群故障转移接管”。当然,您也可以设置服务 IP 与 redis 一起进行故障转移。这种额外的安排还允许您使用非集群 redis 客户端。

生产运行了一年,发生过几次故障(机器重启以进行内核更新),到目前为止运营团队没有报告任何问题。

相关内容