在不同的计算机上使用Redis Replication(多主机)

时间:2014-12-01 16:13:52

标签: redis multi-master-replication

我想在我的应用程序中使用Redis作为分布式缓存。其中一个要求是具有Active Active可用性,这意味着我在一个地方有一个数据中心,在另一个地方有另一个数据中心。如果一个数据中心发生故障,我希望我的用户什么都感觉不到,并且能够从第二个站点的第一个数据中心获取所有数据并继续工作 - 在第二个站点上也有一个主站。 有可能吗?

1 个答案:

答案 0 :(得分:6)

您要求使用主动 - 活动,a.k.a.多主机解决方案,但您的问题表明您可能不需要它。

如果您只需要其中一个数据库可用于写入,即所有写入总是可以进行,则可以使用Redis的标准主从复制来实现。指示您的应用程序使用主服务器进行写入,并且(可能)让您的从服务器也提供一些读取服务。如果主服务器出现故障,请将第二个DC中的从服务器升级为新主服务器,并重定向您的应用程序/客户端以使用它。 Redis'Sentinel可以实现监控和推广。

在实施此类设置时,您需要考虑一些事项。首先请注意Redis的复制是异步的,因此根据主服务器的负载,写入量和复制的网络链接质量,如果发生故障转移,您可能会丢失一些最新的更新。其次,在同一主题上,DC间网络链路可能容易受到带宽限制和延迟增加的影响 - 您应该配置Redis来处理这个问题,并且可能对该流量使用压缩(例如通过SSH隧道)。最后,要准确检测故障,您需要在不同位置至少拥有3个Sentinels。但尽管面临这些挑战,这一切都是可行的。

也就是说,Redis目前支持多种主设置,其中可以对任何数据库任意执行写入。不支持。如果这实际上是您所需要的,请考虑使用其他解决方案。

注意:根据您的具体要求,如果您可以保证对不同DC的写入是互斥的(即每个DC仅写入另一个DC未共享的不同密钥子集),则可以使用两个数据库每个DC都有一个主设备,另一个设备有一个从设备。