如何制作Geo-distributed Active-Active Redis集群架构

Anu*_*kuL 5 redis redislabs

问题陈述:我的应用程序将部署在 3 个不同的区域,即:北美、欧洲和亚洲。我想构建一个具有以下约束的 redis 架构:

  1. 每个区域都应该有自己的Redis集群,可以有多个master和slave。
  2. 每个区域的集群应该能够在本地处理写入和读取。

让我详细说明第二点:我希望所有区域都应该有自己的数据副本。因此,欧洲的应用程序写入的任何新数据都应该转到欧洲地区的 redis 集群,而不是任何其他地区。然后这些数据可以(异步)复制到亚洲和北美地区。

到目前为止,我发现我不能使用 redis 哨兵,因为我想要多个主人。我不能使用(我认为)redis 集群在不同的区域上有主节点,因为这会在所有区域中分片数据,因此欧洲的应用程序可以尝试写入在亚洲的 redis 主节点上分片的密钥。

所以我的问题是:Redis OS 现在()还是在不久的将来可以使用这种架构?

我读过这个这个这个在作这样的声明此功能以前无法但是,看来这功能可在Redis的Entireprise这里虽然,我无法找到关于这一主题的Redis的开源版本的任何东西。

Anu*_*kuL 1

一种可能的解决方案是使用redis 键哈希标签,每个区域中都有一个 redis 主服务器,如 redis_master_US、redis_master_europe 等,以及多个区域中的从服务器(以提高读取性能和可用性),其中键可以是这样的 {US}_California、{US }_Texas、{EU}_Germany、{ASIA}_Japan 等。但这里的问题是,所有带有 US 前缀的键都将转到同一个 redis master,但不一定是 redis_master_US,这取决于 redis master 之间的哈希槽分布。现在有一种方法可以解决这个问题,如果我们使用预谋的 Redis 键哈希标签,可以在此处找到。

现在我们可以使用像 {fyimk7v1CgnBo}_California、{fyimk7v1CgnBo}_Texas、{91Lnyl}_Germany、{6MQu4Y}_Japan 这样的键,我们知道它们将分别指向槽 0、16382、8325,并且在创建集群时确保这些槽分别分配给redis_master_US、redis_master_Germany、redis_master_asia。

尽管这种方法似乎存在很多问题。