如何连接到需要 ServiceStack.Redis 的 Redis Sentinel?
How Do I Connect to a Redis Sentinel that requirespass with 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 "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 配置的示例。
我的本地机器上有一个简单的 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 "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 配置的示例。