带有主/从服务器的 StackExchange.Redis 客户端 - 如何处理失败的主服务器

use*_*058 6 redis

我正在使用 StackExchange.Redis 使用主/从和哨兵设置在 Redis 上进行概念验证设置以实现高可用性,并且在使用 StackExchange.Redis 时遇到了一些问题。

我已经使用最新的 Redis 服务器成功设置了 3 台 Ubuntu VM,一台服务器是带有 Sentinel 的主服务器,一台是带有 Sentinel 的从属服务器,另一台是纯粹的 Sentinel。通过使用 CLI,我可以看到从主服务器到从服务器的复制工作正常,当我停止主服务器(sudo services redis_6379 stop)时,从服务器被提升为主服务器。

但是,当尝试使用 StackExchange.Redis

ConnectionMultiplexer redis;
ConfigurationOptions options = ConfigurationOptions.Parse("172.20.74.40:6379,172.20.74.41:6379");
options.AbortOnConnectFail = false;
redis = ConnectionMultiplexer.Connect(options);
Run Code Online (Sandbox Code Playgroud)

我发现这在两台服务器都启动时完美运行,但是当主服务器被关闭时,Sentinel 正确响应,从服务器被提升为主服务器,但是从应用程序到集群的连接需要 12 到 40 秒来连接每次尝试(即它永远不会变得更快)。

我在这里错过了什么吗?我正在尝试实现高可用性,但这种滞后显然是不可接受的。

Bru*_*cia 4

StackExchange.Redis 不支持 Sentinel。在这个 Github 问题上有一个很大的讨论。

简而言之:StackExchange不使用 Sentinel。他们没有为其建立支持的用例。

在这里您可以看到 Marc Gravell 描述它如何与多个端点一起工作。