StackExchange.Redis 哨兵操作

问题描述

我正在构建工具来帮助管理/测试我们的 redis 配置。我有 5 个 redis 实例(1 个主/4 个副本)。其中 3 个有哨兵在他们身上运行。我的 redis 选项仅定义了 3 个哨兵主机/端口。当请求连接时,它会建立 ConnectionMultiplexer。在这一点上,哨兵似乎协商了实际的 redis 服务器主机/端口是什么,并将它们应用到配置字符串中。如果我在 connectionMultiplexer 上运行 GetEndpoints 方法,我会得到 5 个 redis 主机/端口,而不是任何哨兵主机/端口。

我确定这是设计使然,因为哨兵告诉 connectionMultiplexer 哪些实际实例可用于连接。我可能只是不明白 IServer.SentinelFailoverAsync 是如何工作的。 IServer 的实例应该是哨兵服务器还是普通的 redis 服务器?该方法也采用的唯一参数是 serviceName。我是应该告诉它我希望它故障转移到哪个服务器,还是 Sentinel 只是在协商它认为下一个最好的主服务器。我只是没有找到很多关于它如何工作的文档。

回到代码。如果我将端点对象指定为哨兵服务器主机/端口并执行:

var server = connection.GetServer(endpoint);

它抛出异常,因为正如我之前所说的,哨兵重新协商了 connectionMultiplexer 以将我的 redis 服务器实例作为端点并丢弃哨兵主机。我试图:

await server.SentinelFailoverAsync(sentinelServiceName);

任何指针将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)