一尘不染

在不同的机器上使用Redis复制(多主机)

redis

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


阅读 244

收藏
2020-06-20

共1个答案

一尘不染

您正在寻求一种主动-主动(又称为多主设备)解决方案,但您的问题表明您可能不需要它。

如果只要求其中一个数据库可用于写操作,即所有写操作都可以进行,则可以使用Redis的标准主从复制来实现。指导您的应用程序使用主服务器进行写入,并(有可能)让您的从服务器也进行某些读取。如果主服务器发生故障,则将第二个DC中的从服务器升级为新的主服务器,并重定向您的应用程序/客户端以使用它。使用Redis的Sentinel可以实现监视和提升。

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

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

注意:根据您的确切要求,如果可以保证对不同DC的写入是互斥的(即,每个DC仅可写入另一个DC不共享的键的不同子集),则可以将两个数据库与主数据库一起使用在每个DC中,在从属设备中。

2020-06-20