如何连接到需要 ServiceStack.Redis 的 Redis Sentinel?

How Do I Connect to a Redis Sentinel that requirespass with ServiceStack.Redis?

我的本地机器上有一个简单的 redis 集群,包括:

我正在使用 ServiceStack.Redis 连接,目前没有任何问题。今天,我使用 requirepass 42 设置为每个人添加了密码。我可以使用 Redis 桌面管理器正常连接到所有这些设备,并且一切正常。

使用以下代码,尝试连接时出现错误。删除密码按预期工作。

var config = RedisConfiguration.Instance;

Func<string, string> hostFilter = host => string.IsNullOrEmpty(config.SecurityKey)
                                    ? $"{host}?db={config.Database}"
                                    : $"{config.SecurityKey}@{host}?db={config.Database}";


var sentinelHosts = config.SentinelHosts.Select(hostFilter);
var sentinel = new RedisSentinel(sentinelHosts, config.ServiceName)
{
    HostFilter = hostFilter,
    RedisManagerFactory = (master, slaves) => new RedisManagerPool(master)
};

sentinel.OnFailover += manager => Logger?.Warn($"Redis fail over to {sentinel.GetMaster()}");

sentinel.Start()

此代码抛出 RedisException "No Redis Sentinels were available",内部异常为 "unknown command 'AUTH'".

不清楚是我ServiceStack.Redis库使用不当还是Redis集群配置不正确

有人能给我指出正确的方向吗?

您可以使用HostFilter指定密码:

sentinel.HostFilter = host => $"{config.SecurityKey}@{host}?db={config.Database}";

但是使用密码时,需要在任何地方配置,即在两个Master and Slave configurations中使用:

requirepass password
masterauth password

Redis Sentinels 也需要配置为使用相同的密码,以便它可以控制它正在监控的 Redis 实例,这可以在您的 sentinel.conf 中配置:

sentinel auth-pass mymaster pasword

windows-password folder in the redis-config 项目显示了 password-protected Redis Sentinel 配置的示例。