我的本地机器上有一个简单的 redis 集群,包括:
- 掌握在端口 3679
- 端口 6380 上的从站
- 26379 端口哨兵
到目前为止,我正在使用 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 “没有可用的 Redis Sentinels”,内部异常为“未知命令‘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 redis-config 中的文件夹项目显示了受密码保护的 Redis Sentinel 配置示例。
关于redis - 如何连接到需要通过 ServiceStack.Redis 传递的 Redis Sentinel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42255954/