【问题标题】:Redis Cluster configuration for CacheManager.NETCacheManager.NET 的 Redis 集群配置
【发布时间】:2017-04-27 18:11:27
【问题描述】:

从 CacheManager.NET 的角度来看,我有一个关于 Redis 连接参数的基本问题。如果我们的 Redis 集群有一个 master 和 2 个 slave,并且有 quorum 的哨兵进程,我们应该提供指向哨兵进程的 IP:PORT 组合还是实际的 Redis 服务器进程。

正如https://seanmcgary.com/posts/how-to-build-a-fault-tolerant-redis-cluster-with-sentinel 所建议的,建议在建立连接之前向哨兵进程询问实际的主进程。这可能与 Jedis 一致,Jedis 提供 JedisSentinelPool 来进行初始查找。

基本上我们想要的是读取(通过 CacheManager.NET)和写入的负载平衡应该转到集群的当前主节点。

【问题讨论】:

    标签: redis cachemanager


    【解决方案1】:

    CacheManager 依赖于 StackExchange.Redis 来实现 Redis。因此,无论这个客户端库支持什么,CacheManager 都支持。

    可惜没有实现sentinel支持,有issues on github for years regarding that

    话虽如此,我使用多主/从 + Sentinel 设置进行了一些测试。将所有非哨兵节点作为端点添加到多路复用器配置中,它有点工作,因为 Redis 客户端知道如何处理多个主/从实例。

    在切换到另一个master的过程中,客户端可能会抛出无法写入只读slave等的异常。 CacheManager 可能会重试这些调用,并且在很短的时间后,当领导者选举完成时,调用应该会通过。

    但这不是 100% 稳定的,我不会将其投入生产,因为仍然缺少“官方”支持......

    作为使用哨兵运行的替代方案,您可以在集群模式下运行 Redis,这应该可以正常工作,或者在处理所有主/从内容的代理后面运行。

    Twemproxy 是一种选择。

    我仍然需要add support for Twemproxy to CacheManager,因为许多功能根本不可用,例如 Lua 脚本或获取服务器列表或刷新命令... 这将在 1.0.2 中出现

    希望对您有所帮助。

    【讨论】:

    • 谢谢@MichaC。我将试验并在论坛上发布更新
    猜你喜欢
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2017-03-24
    • 2020-12-21
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多