CacheManager.NET的Redis群集配置

时间:2017-04-26 18:08:56

标签: redis cachemanager

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

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

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

1 个答案:

答案 0 :(得分:1)

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

不幸的是,没有实施哨兵支持,有issues on github for years regarding that

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

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

但这不是100%稳定,我不会把它放在生产中,因为"官方"支持仍然缺失......

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

Twemproxy是另一种选择。

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

中出现

希望有所帮助。