【问题标题】:Using Redis Replication on different machines (multi master)在不同机器上使用 Redis Replication(多主机)
【发布时间】:2015-01-29 16:51:10
【问题描述】:

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

【问题讨论】:

  • 两个数据中心是主动服务读写,还是第二个数据中心纯粹是为了故障转移?
  • 这两种情况的解决方案是什么?
  • 由于缺乏细节,没有“解决方案”,请先尝试回答我的问题,我会提供我的建议

标签: redis multi-master-replication


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多