CacheManager.NET 的 Redis 集群配置

Redis Cluster configuration for CacheManager.NET

从CacheManager.NET 的角度,我有一个关于Redis 连接参数的基本问题。如果我们的 Redis 集群有一个主服务器和两个从服务器,并且有哨兵进程的法定人数,我们是否应该提供指向哨兵进程或实际 Redis 服务器进程的 IP:PORT 组合。

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

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

CacheManager relies on StackExchange.Redis 用于 Redis 实现。因此,无论此客户端库支持什么,CacheManager 也支持。

很遗憾,哨兵支持没有实现,还有issues on github for years regarding that

也就是说,我用 Multi Master/Slave + Sentinel 设置做了一些测试。将所有非哨兵节点作为端点添加到多路复用器配置中,它可以正常工作,因为 Redis 客户端知道如何处理多个 master/slave 个实例。

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

但这不是 100% 稳定的,我不会将其投入生产,因为 "official" 支持仍然缺失...

替代 运行 哨兵,你可以 运行 集群模式下的 Redis 应该可以正常工作,或者在处理所有 master/slave 东西的代理后面。

Twemproxy 是一种选择。

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

中出现

希望对您有所帮助。