5

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

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

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

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

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

我已经在 SO 上阅读了 thisthisthis,说明此功能以前不可用,但是,似乎此功能在 Redis Entireprise 中可用,我找不到任何关于 Redis 开源版本的主题的内容。

4

1 回答 1

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。

虽然这种方法似乎需要很多陷阱。

于 2018-04-18T02:48:08.263 回答