【问题标题】:ServiceStack.Redis - is sharding supported in sentinel mode?ServiceStack.Redis - 哨兵模式是否支持分片?
【发布时间】:2018-10-10 22:36:30
【问题描述】:

我想实现以下高可用性设置:

  • 2 个主节点(作为与客户端的一个逻辑数据集的分片) 键散列)
  • 2 个从属设备(每个主设备一个)
  • 6 个哨兵(每对主/从 3 个)

现在,我知道 ServiceStack.Redis 提供了通过 sentinels 连接到 redis 的 api:

new RedisSentinel(sentinelHosts, masterName: "mymaster").Start().

我也熟悉一个ShardedRedisClientManager,它计算哈希键并返回相应的连接池。

但是我怎样才能将它们组合在一起,以便我的输入将是一个哨兵列表(在初始化时)和一个用于请求实际数据的键?是否有内置的哨兵模式分片支持?

【问题讨论】:

    标签: c# redis servicestack.redis


    【解决方案1】:

    我将为未来的谷歌员工回答我自己的问题。 我们在 ServiceStack 中发现仅部分支持分片,最终得到以下代码:

    1. new ConsistentHash<RedisSentinelClientManagerWrapper>(clientManagers);

      • 其中 RedisSentinelClientManagerWrapper 是我们自己的类,它包含 哨兵客户端管理器的实例并实现 GetHashCode()
      • clientManagers 是所有这些的列表 哨兵管理器包装器(根据要求我们只有 2 个)。
    2. 当应用程序启动时,我们初始化所有客户端管理器并创建 ConsistentHash 的单个实例

    3. 当我们需要获取/设置一些 redis 中的数据,我们从这里的一致哈希中检索 redis 客户端 方式:

         var clientManager = consistentHash.GetTarget(key).ClientsManager;
         var client = clientManager.GetClient();
      

    【讨论】:

      猜你喜欢
      • 2014-10-11
      • 2017-03-24
      • 2019-11-10
      • 2019-08-07
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      相关资源
      最近更新 更多