2014-01-12 39 views
2

我正在使用redis version 2.8.3。我想构建一个redis集群。但在这个集群中应该有multiple master。这意味着我需要具有写入权限并将能力应用到所有其他节点的多个节点。Redis主动 - 主动复制

我可以建立一个主站和多个从站的集群。我刚刚配置了奴隶redis.conf文件并补充说:

slaveof myMasterIp myMasterPort 

就是这样。比我尝试通过主写入到db的东西。它被复制给所有奴隶,我非常喜欢它。

但是当我尝试通过奴隶写信时,它告诉我奴隶无权写信。之后,我将redis.conf文件中slave的只读状态设置为false。因此,我可以写入db的东西。 但我意识到,它不会复制到我的主复制,因此它不会复制到所有其他从属neigther。

这意味着我无法构建主动 - 主动群集。

我试图找到一些redis是否具有主动 - 主动群集功能。但是我找不到确切的答案。

是否可以使用redis构建主动 - 主动群集? 如果是这样,我该怎么办?

谢谢!

+0

如果我的回答有帮助,请对其进行表决:) –

回答

1

Redis v2.8.3不支持多主设置。然而,真正的问题是你为什么要设置一个?换句话说,你试图解决什么挑战/问题?

看起来你试图解决的挑战是如何通过消除网上读取来减少网络负载(更多关于下面的内容)。由于Redis并不是多主设备,所以唯一的办法就是设置每个应用服务器,其中一个主设备一个从设备(对另一个主设备) - 即总计4个Redis实例(以及两次RAM)。

简单的情况是,每个应用程序只更新数据库密钥的互斥子集。在这种情况下,这种设置可能实际上是有益的(至少在短期内)。但是,如果两个应用程序都可以触摸所有按键,或者即使只有一个按键在应用程序之间进行“共享”,那么您也需要在应用程序中烘焙锁定/冲突解决方案/等等逻辑以合并本地主控和奴隶的差异(这可能有点矫枉过正)。但是,无论哪种情况,您最终都会得到太多(即超过1个)Redises,这意味着至少会有更多的管理工作。

另请注意,通过在同一台服务器上同步应用程序和数据库,您可以为自己设置可接近的可伸缩性故障。当您需要更多计算资源用于应用程序或Redis时,会发生什么?你将如何添加另一个应用程序服务器?

这将我带回您正试图解决的实际问题 - 网络负载。为什么这是一个问题?您的应用程序是否如此吞吐量太大或者网络太薄,以至于您愿意这么做?或者,也许延迟是你想解决的问题?尽管如此,但我建议您考虑一个经过时间验证的设计,即将Redis从应用程序中分离出来,并将其放在自己的资源上。诚然,网络会打击你,你必须要解决它(这是其他人所做的)。另一方面,对于更简单的设置,您将拥有更多灵活性和控制权,并且在我的书中,这是一个巨大的收益。

+0

在我的结构中,我有两个应用程序运行在不同的服务器上。他们会写入redis。 Redises将与应用程序在同一台服务器上。如果我有一个具有写权限的实例,网络将会加载得更多。我想让redis主动 - 主动不导致这个问题。但是我发现,它不适用于2.8.3版本 –

+0

让我确保我理解正确:您有两台物理/虚拟服务器,每台服务器运行不同的应用程序。每个应用都需要访问相同的Redis数据库,因为它们共享数据。您不希望只有一台服务器上安装Redis,因为您担心网络负载,所以您希望每台应用服务器上都有一个本地Redis。然后,您的应用程序将从它们各自的本地实例进行读写操作,并且这些本地实例应以某种方式以多主机方式同步数据。正确? –

+0

是的。这正是我刚才谈到的 –