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

时间:2017-02-15 17:12:25

标签: redis servicestack.redis

我的本​​地计算机上有一个简单的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 &#34;没有Redis Sentinels可用&#34; ,内部例外是&#34;未知命令&#39; AUTH&#39;& #34;

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

有人可以指出我正确的方向吗?

1 个答案:

答案 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配置示例。