1

正如你所料,我有一个 6 节点的 Redis 集群启动并运行,3 个从站和 3 个主站。
从 Redis 服务器的角度来看,一切似乎都很笨拙,我可以调用cluster failoverdebug 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。如果我导致集群中的主服务器发生更改,这些似乎都不会触发。ConfigurationChangedBroadcastConnectionFailed

所以我想知道在这方面我是否缺少一些东西?

干杯,
克雷格。

4

1 回答 1

1

在玩了一些之后,我注意到多路复用器最终确实重新配置了自己。最初,当我在调试模式下停止检查某些内容时,我注意到了这一点,当我继续进行时,它意外地又开始工作了。

如果我configCheckSeconds=1在连接字符串中设置,而不是默认值 60,重新配置会更快地发生,所以我假设这是罪魁祸首。

我不确定如此大幅度地更改此设置会产生多少开销。我猜在一般情况下,集群节点失败的可能性很小,因此没有必要经常重新配置。我刚刚通过测试创建了一个极端场景。

于 2017-10-25T10:06:19.557 回答