我的本地计算机上有一个简单的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 &#34;没有Redis Sentinels可用&#34; ,内部例外是&#34;未知命令&#39; AUTH&#39;& #34;
我不清楚我是不正确地使用ServiceStack.Redis库还是我的Redis群集配置不正确。
有人可以指出我正确的方向吗?
答案 0 :(得分:1)
您可以使用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配置示例。