U dient de host van de Redis Sentinel Server alleen te leveren aan RedisSentinel
omdat het de actieve lijst met andere master/slave redis-servers van de Sentinel-host ontvangt.
Enkele wijzigingen in RedisSentinel
zijn onlangs toegevoegd in de nieuwste v4.0.37 dat is nu beschikbaar op MyGet, inclusief extra logging en callbacks van Redis Sentinel-evenementen. De nieuwe v4.0.37 API ziet eruit als:
var sentinel = new RedisSentinel(sentinelHost, masterName);
Het starten van de RedisSentinel maakt verbinding met de Sentinel Host en retourneert een vooraf geconfigureerde RedisClientManager (d.w.z. redis-verbindingspool) met de actieve
var redisManager = sentinel.Start();
Waarmee je je vervolgens kunt registreren in het IOC met:
container.Register<IRedisClientsManager>(redisManager);
De RedisSentinel
moet dan luisteren naar master/slave-wijzigingen van de Sentinel-hosts en failover van de redisManager overeenkomstig. De bestaande verbindingen in de pool worden dan verwijderd en vervangen door een nieuwe pool voor de nieuw geconfigureerde hosts. Alle actieve verbindingen buiten de pool zullen verbindingsuitzonderingen genereren als ze opnieuw worden gebruikt. De volgende keer dat de RedisClient uit de pool wordt opgehaald, wordt deze geconfigureerd met de nieuwe hosts.
Terugbellen en loggen
Hier is een voorbeeld van hoe u de nieuwe callbacks kunt gebruiken om de RedisServer-gebeurtenissen te introspecteren:
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);
},
};
Het loggen van deze gebeurtenissen kan ook worden ingeschakeld door Logging in ServiceStack te configureren:
LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);
Er is ook een extra expliciete FailoverToSentinelHosts()
die kan worden gebruikt om RedisSentinel
. te forceren om opnieuw te zoeken en failover naar de nieuwste master/slave-hosts, bijvoorbeeld:
var sentinelInfo = sentinel.FailoverToSentinelHosts();
De nieuwe hosts zijn beschikbaar in de geretourneerde sentinelInfo:
"Failed over to read/write: {0}, read-only: {1}".Print(
sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);