2016-12-22 76 views
7

我有两个节点,我希望在主动 - 主动模式下作为服务器运行,并且还具有高可用性功能,例如,如果其中一个出现故障,另一个应该开始接收所有请求,但两者都启动后,应该采取所有的要求。现在,由于Redis不允许主动 - 主动模式用于相同的散列集,并且我没有选择运行Sentinel,因为我无法拥有第三个节点,我的想法是在复制中运行这两个节点,并且我自己决定是否主节点关闭并将从设备升级为主设备。这有什么问题吗?当原来的主人回来时,是否有办法将其配置为奴隶?2节点Redis HA

这听起来像个好主意吗?除了Redis之外,我愿意接受其他建议。

+0

我对那个感兴趣。看起来好像没有办法配置两个节点即使在Redis 4上也能可靠地进行故障切换,但是在redis4上,这可以手动完成。 – kworr

回答

2

好的,与SLAVEOF部分解决方案:

可以手动推动从属通过运行掌握:

SLAVEOF NO ONE 

可以手动转换主通过运行至从属:

SLAVEOF <HOST> <port> 

聚类应该禁用。

1

一般情况下运行两个节点永远不是一个好主意,因为它必然会产生裂脑问题:当两个节点之间的网络关闭一两分钟时,两个节点将不可避免地认为彼此是脱机的,并且会促进/保持自己成为主人并开始接受来自其他服务的请求。然后发生裂脑。

如果您对这种可能的情况还可以,那么您可以借助脚本文件以及起搏器或保活的高可用性服务来帮助您设置主从。

通常情况下,您必须通过预定义的规则告诉集群管理器,当两台机器在裂脑情况下重新合并时,哪一个是您的首选主设备。

当一个主人当选时,执行脚本,基本上它自己执行slaveof no one,并在另一个节点上执行slaveof <new-master-ip> <port>

您可以在脚本文件中更进一步,尝试将两个数据集合并在一起,但是否可以实现完全取决于您如何在Redis中组织数据,以及您准备等待多久让所有数据同步。

我以前通过pacemaker + corosync自己做过这个。

0

我建议至少有3个节点使用Sentinel安装程序,以便在当前主节点发生故障时启用八卦/仲裁来将从站自动升级为主站。