Du bør kun levere værten for Redis Sentinel Server til RedisSentinel
da den får den aktive liste over andre master/slave redis-servere fra Sentinel-værten.
Nogle ændringer til RedisSentinel
blev for nylig tilføjet i den seneste v4.0.37 som nu er tilgængelig på MyGet, som inkluderer ekstra logning og tilbagekald af Redis Sentinel-begivenheder. Den nye v4.0.37 API ser sådan ud:
var sentinel = new RedisSentinel(sentinelHost, masterName);
Start af RedisSentinel vil oprette forbindelse til Sentinel Host og returnere en forudkonfigureret RedisClientManager (dvs. redis forbindelsespulje) med den aktive
var redisManager = sentinel.Start();
Som du så kan registrere i IOC med:
container.Register<IRedisClientsManager>(redisManager);
RedisSentinel
skal så lytte til master/slave-ændringer fra Sentinel-værterne og failover redisManager derfor. De eksisterende forbindelser i poolen bortskaffes derefter og erstattes med en ny pool til de nykonfigurerede værter. Alle aktive forbindelser uden for puljen vil kaste forbindelsesundtagelser, hvis de bruges igen, næste gang RedisClienten hentes fra puljen vil den blive konfigureret med de nye værter.
Tilbagekald og logning
Her er et eksempel på, hvordan du kan bruge de nye tilbagekald til at introspektere RedisServer-begivenhederne:
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);
},
};
Logning af disse hændelser kan også aktiveres ved at konfigurere Log på ServiceStack:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);
Der er også en ekstra eksplicit FailoverToSentinelHosts()
der kan bruges til at tvinge RedisSentinel
for at genopsøge og failover til de seneste master/slave-værter, f.eks.:
var sentinelInfo = sentinel.FailoverToSentinelHosts();
De nye værter er tilgængelige i den returnerede sentinelInfo:
"Failed over to read/write: {0}, read-only: {1}".Print(
sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);