您应该只提供 Redis Sentinel Server 的主机,RedisSentinel
因为它从 Sentinel 主机获取其他主/从 redis 服务器的活动列表。
最近在 MyGet上可用RedisSentinel
的最新v4.0.37中添加了一些更改,其中包括额外的日志记录和 Redis Sentinel 事件的回调。新的v4.0.37 API 如下所示:
var sentinel = new RedisSentinel(sentinelHost, masterName);
启动RedisSentinel会连接到Sentinel Host,并返回一个预先配置好的RedisClientManager(即redis连接池)
var redisManager = sentinel.Start();
然后您可以通过以下方式在 IOC 中注册:
container.Register<IRedisClientsManager>(redisManager);
然后RedisSentinel
应该监听来自 Sentinel 主机的主/从更改,并相应地对redisManager进行故障转移。然后,池中的现有连接将被处理并替换为新配置的主机的新池。如果再次使用池之外的任何活动连接,它们将引发连接异常,下次从池中检索 RedisClient 时,它将使用新主机进行配置。
回调和日志记录
这是一个如何使用新回调来内省 RedisServer 事件的示例:
var sentinel = new RedisSentinel(sentinelHost, masterName)
{
OnFailover = manager =>
{
"Redis Managers were Failed Over to new hosts".Print();
},
OnWorkerError = ex =>
{
"Worker error: {0}".Print(ex);
},
OnSentinelMessageReceived = (channel, msg) =>
{
"Received '{0}' on channel '{1}' from Sentinel".Print(channel, msg);
},
};
也可以通过在 ServiceStack 中配置 Logging来启用这些事件的日志记录:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);
还有一个额外的显式FailoverToSentinelHosts()
可用于强制RedisSentinel
重新查找和故障转移到最新的主/从主机,例如:
var sentinelInfo = sentinel.FailoverToSentinelHosts();
新主机在返回的 sentinelInfo 中可用:
"Failed over to read/write: {0}, read-only: {1}".Print(
sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);