redis - 如何连接到需要通过 ServiceStack.Redis 传递的 Redis Sentinel?

标签 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 “没有可用的 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/

相关文章:

php - Symfony2 FOSUserBundle 不使用 UserManager 提供缓存的用户实体

caching - 可通过键值对访问的复杂集合的外部存储

redis - 如何使用 Redis 防止竞争条件?

.net - Net的Redis客户端缓存

c# - 如何使用 ServiceStack.Redis 库从 Redis 流读取值?

GetClient 调用上的 Redis 超时过期消息

asp.net-mvc - session 超时在 Azure Redis 缓存 session 状态提供程序中不会滑动

redis - 使用istio时Redis-cluster Helm图表无法完成工作

c# - VS 2008上的ServiceStack.redis配置

node.js - koa:mongodb/redis 事件连接计数不断增加