我正在评估 Redis 3 的集群功能(我目前使用的是独立的 Redis 2),所以我正在阅读http://redis.io/topics/cluster-tutorial上的信息。
在本文档中,我阅读了一个非常重要的信息:
请注意,按预期工作的最小集群需要包含至少三个主节点。对于您的第一次测试,强烈建议您启动一个包含三个主节点和三个从节点的六节点集群。
这是真的吗?在我看来,如果我使用分片功能(数据在节点之间共享),这是正确的,但如果我不需要它并且我很乐意只在一个节点上拥有数据怎么办?
我基本上需要一个master和两个slave(所以如果一个节点出现故障,集群将是活动的),我可以在生产环境中进行此配置吗?如果是,有哪些禁忌症?
非常感谢您的帮助!
不,这不是真的。这是一个强烈的建议(正如您可以从“按预期工作”的语言中看出的那样;如果您不希望您的数据是持久的,并且您希望它会消失等等 - 您可以设置一个单节点集群。为什么你会而不是仅仅关闭集群模式......这取决于你。)
所以,是的,您可以设置一个单节点集群,即使不建议这样做(由于其他答案和文档中提到的所有原因。)redis 集群代码中没有什么可以阻止您,除了检查 redis-trib.rb 帮助程序,以劝阻天真的用户。
要绕过该检查并设置一个单节点集群(如果您确定这是您想要的 - 请记住,它几乎肯定不是),您可以手动将分片分配给您的节点
CLUSTER ADDSLOTS 1 2 3 ...
(等,例如所有 16384 个分片)。或者使用没有 3 节点安全检查 (redis-trib.py create 127.0.0.1:6379
) 的 Python 版本的 redis-trib。是的,这就是它在文档中的原因:)
在集群模式下使用 Redis 意味着分片。如果您对单个实例感到满意,请不要使用集群。否则,请参阅集群规范本身以了解有关基本假设的更多信息。具体来说,在最小集群配置的情况下,您需要 3 个 master 来确保集群在分区情况下的可用性,否则您将无法就多数达成一致。
我知道这个问题很老,但如果有人需要类似的设置,可以使用主从配置而不是集群。你需要:
如果你可以让它足够聪明,你可以只写到主节点并从所有节点读取。我在一些 Wordpress 网站上使用此设置,但插件不是用来检测谁是主节点,所以我只是使用 HAProxy 来检测主节点并将所有流量发送到该节点。如果主节点死亡,则从节点担任主节点(redis-sentinel 管理该角色)。HAProxy 检测到 master 已更改,然后更改接收所有流量的节点。
抱歉不要发布代码和示例,但现在我不能这样做。
问候!!
如果您依赖 Redis 进行故障转移,则至少需要三个主节点和三个从节点(最少 3 台服务器,每个服务器运行一个主节点和一个从节点)。
如果使用外部集群软件,比如heartbeat,可以在集群模式下设置2个节点,1个master,1个slave,将16384个slot全部分配给master,在master为“CLUSTER FAILOVER TAKEOVER”时使用failover脚本进行“CLUSTER FAILOVER TAKEOVER”下。当然你也可以和redis一起设置一个服务IP来进行故障转移。这种额外的安排也允许您使用非集群 redis 客户端。
生产运行了一年,故障转移了几次(机器重启以更新内核),到目前为止,运营团队没有报告任何问题。