1

我想在我的应用程序中使用 Redis 作为分布式缓存。要求之一是具有 Active Active 可用性,这意味着我在一个地方拥有一个数据中心,在其他地方拥有另一个数据中心。如果一个数据中心出现故障,我希望我的用户没有任何感觉,并且能够从第二个站点的第一个数据中心获取所有数据并继续工作——在第二个站点也有一个主控。可能吗?

4

1 回答 1

6

您要求的是 Active-Active(又称多主)解决方案,但您的问题表明您可能不需要它。

如果您只需要其中一个数据库可用于写入,即所有写入始终进行,您可以使用 Redis 的标准主从复制来实现。指示您的应用程序使用主设备进行写入,并且(可能)让您的从设备也提供一些读取服务。如果 master 失败,将 2ndary DC 中的 slave 提升为新的 master 并重定向您的应用程序/客户端以使用它。使用 Redis 的 Sentinel 可以实现监控和提升。

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

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

注意:根据您的确切要求,如果您可以保证对不同 DC 的写入是互斥的(即,每个 DC 仅对不被另一个 DC 共享的不同键子集进行写入),您可以使用两个数据库和一个主数据库在每个 DC 和另一个中的奴隶。

于 2014-12-02T12:03:21.050 回答