正如你所料,我有一个 6 节点的 Redis 集群启动并运行,3 个从站和 3 个主站。
从 Redis 服务器的角度来看,一切似乎都很笨拙,我可以调用cluster failover
或debug segfault
在服务器上,适当的从服务器成为主服务器。
从 .net 方面来看,我一直在关注StackExchange Redis文档,所以我有一个 static IConnectionMultiplexer
,从中我得到一个IDatabase
,然后我可以从那里存储和检索值。
我正在使用如下连接字符串:srv1:7001,srv2:7001,srv3:7001,srv1:7002,srv2:7002,srv3:7002
到目前为止,一切都很好。
但是,我试图弄清楚在使用连接多路复用器时如何处理集群中的主故障。目前,我能想到的最好的办法就是捕获一个异常,丢弃当前的连接多路复用器并创建一个全新的,感觉有点恶心。
鉴于我在连接时告诉多路复用器所有潜在的端点,我希望它能够密切关注这样的事情并开始自动与新的主节点对话。一些文档也提到了这一点:
同样,当配置更改时(尤其是主/从配置),连接的实例让自己了解新情况(通过 INFO、CONFIG 等 - 如果可用)非常重要。StackExchange.Redis 通过自动执行此操作...
如果我杀死srv1:7001
并且什么都不做,那么连接永远不会恢复,并且每次设置新值的调用都会抛出一个RedisConnectionException
.
我曾尝试附加到 events和订阅各种频道,希望在 master 宕机时看到广播ConfigurationChanged
。如果我导致集群中的主服务器发生更改,这些似乎都不会触发。ConfigurationChangedBroadcast
ConnectionFailed
所以我想知道在这方面我是否缺少一些东西?
干杯,
克雷格。