我正在使用redis version 2.8.3
。我想构建一个redis
集群。但是在这个群集中应该有multiple master
。这意味着我需要具有写访问权限的多个节点以及对所有其他节点的应用能力。
我可以构建一个包含主服务器和多个服务器的集群。我刚配置了奴隶redis.conf
个文件并添加了;
slaveof myMasterIp myMasterPort
多数民众赞成。比我尝试通过master写一些东西到db。它被复制到所有奴隶身上,我非常喜欢它。
但是当我尝试通过奴隶写作时,它告诉我奴隶无权写作。之后,我只将redis.conf
文件中的slave的只读状态设置为false。因此,我可以在db中写一些东西。
但我意识到,它并没有被复制到我的主复制中,所以它不会被复制到所有其他的奴隶neigther。
这意味着我无法构建主动 - 主动群集。
我试图找到redis是否具有主动 - 主动群集功能的东西。但我无法找到关于它的确切答案。
是否可以使用redis构建主动 - 主动群集? 如果是,我该怎么办?
谢谢!
答案 0 :(得分:2)
Redis v2.8.3不支持多主设置。然而,真正的问题是你为什么要设置一个?换句话说,你想要解决什么挑战/问题?
您尝试解决的挑战似乎是如何通过消除网络读取来减少网络负载(更多内容如下)。由于Redis不是多主机(尚未实现),唯一的方法是将每个应用服务器设置为主和一个从属设备(与另一个主设备) - 即总计4 Redis实例(以及RAM的两倍)。
简单方案是每个应用程序仅更新数据库密钥的互斥子集。在那种情况下,这种设置实际上可能是有益的(至少在短期内)。但是,如果两个应用程序都可以触摸所有键,或者即使只有一个键被“共享”用于应用程序之间的写入,那么您需要将锁定/冲突解决/等...逻辑加入到您的应用程序中以整合本地主和奴隶的差异(这可能有点矫枉过正)。然而,在任何一种情况下,你最终都会有太多(即超过1)Redise,这意味着至少需要更多的管理工作。
另请注意,通过在同一服务器上并置应用程序和数据库,您可以自行设置近乎可靠的可伸缩性故障。当您需要为应用程序或Redis提供更多计算资源时会发生什么?你将如何添加另一个应用程序服务器?
这让我回到你想要解决的实际问题 - 网络负载。为什么这是一个问题?您的应用程序是如此吞吐量大还是网络太薄以至于您愿意达到这样的长度?或者延迟是您要解决的问题?尽管如此,我建议你考虑一个经过时间考验的设计,即将Redis与应用程序分开并将其放在自己的资源上。没错,网络会打击你,你将不得不与它一起工作(这是其他人所做的)。另一方面,您可以更灵活地控制更简单的设置,在我的书中,这是一个巨大的收获。
答案 1 :(得分:1)
Redis Enterprise拥有此功能已有相当长的一段时间,但是如果您正在寻找开源解决方案,则KeyDB是具有Active Active支持(称为Active Replica)的分支。
设置它只比标准复制多做一些工作:
https://github.com/JohnSully/KeyDB/wiki/KeyDB-(Redis-Fork):-Active-Replica-Support