Redis
 sql >> Datenbank >  >> NoSQL >> Redis

ServiceStack.Redis.Sentinel-Nutzung

Sie sollten RedisSentinel nur den Host des Redis Sentinel-Servers bereitstellen da es die aktive Liste anderer Master/Slave-Redis-Server vom Sentinel-Host erhält.

Einige Änderungen an RedisSentinel wurden kürzlich in der neuesten v4.0.37 hinzugefügt Das ist jetzt auf MyGet verfügbar, das zusätzliche Protokollierung und Rückrufe von Redis Sentinel-Ereignissen enthält. Die neue v4.0.37 API sieht so aus:

var sentinel = new RedisSentinel(sentinelHost, masterName);

Beim Starten von RedisSentinel wird eine Verbindung zum Sentinel-Host hergestellt und ein vorkonfigurierter RedisClientManager (d. h. Redis-Verbindungspool) mit dem aktiven

zurückgegeben
var redisManager = sentinel.Start();

Welche Sie dann im IOC anmelden können mit:

container.Register<IRedisClientsManager>(redisManager);

Der RedisSentinel sollte dann auf Master/Slave-Änderungen von den Sentinel-Hosts lauschen und den redisManager umschalten entsprechend. Die vorhandenen Verbindungen im Pool werden dann verworfen und durch einen neuen Pool für die neu konfigurierten Hosts ersetzt. Alle aktiven Verbindungen außerhalb des Pools lösen Verbindungsausnahmen aus, wenn sie erneut verwendet werden. Wenn der RedisClient das nächste Mal aus dem Pool abgerufen wird, wird er mit den neuen Hosts konfiguriert.

Rückrufe und Protokollierung

Hier ist ein Beispiel dafür, wie Sie die neuen Rückrufe verwenden können, um die RedisServer-Ereignisse zu überprüfen:

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);
    },                
};

Die Protokollierung dieser Ereignisse kann auch aktiviert werden, indem die Protokollierung in ServiceStack konfiguriert wird:

LogManager.LogFactory = new ConsoleLogFactory(debugEnabled:false);

Es gibt auch ein zusätzliches explizites FailoverToSentinelHosts() das verwendet werden kann, um RedisSentinel zu erzwingen zum erneuten Suchen und Failover auf die neuesten Master/Slave-Hosts, z. B.:

var sentinelInfo = sentinel.FailoverToSentinelHosts();

Die neuen Hosts sind in der zurückgegebenen SentinelInfo:

verfügbar
"Failed over to read/write: {0}, read-only: {1}".Print(
    sentinelInfo.RedisMasters, sentinelInfo.RedisSlaves);