Redis
 sql >> Database >  >> NoSQL >> Redis

Sentinella Redis

Redis Sentinel è la raccomandazione ufficiale per l'esecuzione di una configurazione Redis ad alta disponibilità eseguendo una serie di processi Redis sentinel aggiuntivi per monitorare attivamente le istanze master e slave redis esistenti assicurando che funzionino come previsto. Se per consenso viene stabilito che il master non è più disponibile, eseguirà automaticamente il failover e promuoverà uno degli slave replicati come nuovo master. Le sentinelle mantengono anche un elenco autorevole di istanze redis disponibili fornendo ai clienti un repository centrale per scoprire le istanze disponibili a cui possono connettersi.

Il supporto per Redis Sentinel è disponibile con RedisSentinel classe che ascolta le Sentinelle disponibili per ottenere il suo elenco di istanze redis master, slave e altre sentinelle disponibili che utilizza per configurare e gestire i gestori client Redis, avviando eventuali failover man mano che vengono segnalati.

Utilizzo #

Per utilizzare il nuovo supporto di Sentinel, invece di popolare i Redis Client Manager con la stringa di connessione delle istanze master e slave, devi creare un unico RedisSentinel istanza configurata con la stringa di connessione di Redis Sentinels in esecuzione:

var sentinelHosts = new[]{ "sentinel1", "sentinel2:6390", "sentinel3" };
var sentinel = new RedisSentinel(sentinelHosts, masterName: "mymaster");

Questo mostra un tipico esempio di configurazione di un RedisSentinel che fa riferimento a 3 host sentinella (ovvero il numero minimo per una configurazione ad alta disponibilità che può sopravvivere a qualsiasi guasto del nodo). È anche configurato per guardare il mymaster set di configurazione (il gruppo principale predefinito).

INFO

Redis Sentinels può monitorare più di 1 gruppo master/slave, ciascuno con un nome di gruppo master diverso.

La porta predefinita per le sentinelle è 26379 (quando non specificato) e poiché RedisSentinel può rilevare automaticamente altre sentinelle, la configurazione minima richiesta è solo:

var sentinel = new RedisSentinel("sentinel1");

INFO

La scansione e il rilevamento automatico di altre Sentinelle possono essere disabilitati con ScanForOtherSentinels=false

Inizia a monitorare le sentinelle #

Una volta configurato, puoi iniziare a monitorare i server Redis Sentinel e accedere al gestore client preconfigurato con:

IRedisClientsManager redisManager = sentinel.Start();

Che come prima, può essere registrato nel tuo CIO preferito come singleton esempio:

container.Register<IRedisClientsManager>(c => sentinel.Start());

Configurazione avanzata di Sentinel #

RedisSentinel per impostazione predefinita gestisce un PooledRedisClientManager configurato istanza che risolve entrambi i client Redis master per la lettura/scrittura di GetClient() e slave per GetReadOnlyClient() di sola lettura API.

Questo può essere modificato per utilizzare il nuovo RedisManagerPool con:

sentinel.RedisManagerFactory = (master,slaves) => new RedisManagerPool(master);

Stringa di connessione Redis personalizzata #

L'host con cui è configurato RedisSentinel si applica solo a quell'Host Sentinel, puoi comunque utilizzare la flessibilità delle stringhe di connessione Redis per configurare i singoli client Redis specificando un HostFilter personalizzato :

sentinel.HostFilter = host => "{0}?db=1&RetryTimeout=5000".Fmt(host);

Ciò restituirà i client configurati per utilizzare il database 1 e un timeout tentativi di 5 secondi (utilizzato nella nuova funzione di tentativi automatici).

Altra configurazione RedisSentinel #

Sebbene quanto sopra copra la popolare configurazione di Sentinel che verrebbe tipicamente utilizzata, quasi ogni aspetto di RedisSentinel il comportamento è personalizzabile con la configurazione seguente:

OnSentinelMessageReceived Avviato quando il lavoratore Sentinel riceve un messaggio dall'abbonamento Sentinel
OnFailover Avviato quando Sentinel esegue il failover di Redis Client Manager su un nuovo master
OnWorkerError Avviato quando la connessione Redis Sentinel Worker non riesce
MappaIndirizzi Ip Mappa gli IP interni dell'host redis restituiti da Sentinel al suo IP esterno
Scansiona per altre sentinelle Se cercare regolarmente altri host sentinella (default true)
RefreshSentinelHostsDopo Quale intervallo per cercare altri host sentinella (predefinito 10 minuti)
Aspetta tra host non riusciti Quanto tempo attendere dopo un errore prima di connettersi all'istanza redis successiva (250 ms predefinita)
MaxWaitBetweenFailedHosts Quanto tempo occorre per riprovare a connettersi agli host prima di lanciare (predefinito 60s)
Aspetta prima di forzare il MasterFailover Quanto tempo dopo tentativi consecutivi falliti di forzare il failover (impostazione predefinita 60s)
ResetWhenSubjectivelyDown Reimposta i client quando la redis dei rapporti di Sentinel è soggettivamente inattiva (impostazione predefinita true)
ResetWhenObjectivelyDown Reimposta i client quando la redis dei rapporti di Sentinel è oggettivamente inattiva (impostazione predefinita true)
SentinelWorkerConnectTimeoutMs Il tempo massimo di connessione per Sentinel Worker (predefinito 100 ms)
SentinelWorkerSendTimeoutMs Tempo massimo di invio socket TCP per Sentinel Worker (predefinito 100 ms)
SentinelWorkerReceiveTimeoutMs Tempo massimo di ricezione socket TCP per Sentinel Worker (predefinito 100 ms)

Configura server Redis Sentinel #

Il progetto redis config semplifica la configurazione e l'esecuzione di una configurazione Redis Sentinel multi-nodo ad alta disponibilità, inclusi gli script di avvio/arresto per impostare istantaneamente la configurazione Redis Sentinel minima ad alta disponibilità su uno (o più) server Windows, OSX o Linux. Questa configurazione a server singolo/multiprocesso è ideale per configurare una configurazione sentinella funzionante su una singola workstation di sviluppo o su un server remoto.

Il repository redis-config include anche i binari redis di Windows MS OpenTech e non richiede alcuna installazione di software.

Utilizzo Windows #

Per eseguire la configurazione di Sentinel inclusa, clona il repository redis-config sul server su cui vuoi eseguirlo:

git clone https://github.com/ServiceStack/redis-config.git

Quindi avvia 1x server master, 2x slave e 3x server di ridistribuzione Sentinel con:

cd redis-config\sentinel3\windows
start-all.cmd

Spegnimento avviato istanze:

stop-all.cmd

Se stai eseguendo i processi redis localmente sulla tua workstation di sviluppo, la configurazione minima per la connessione alle istanze in esecuzione è solo:

var sentinel = new RedisSentinel("127.0.0.1:26380");
container.Register(c => sentinel.Start());

Localhost vs IP di rete #

La configurazione sentinella presuppone che tutte le istanze redis siano in esecuzione localmente su 127.0.0.1 . Se invece lo stai eseguendo su un server remoto a cui vuoi che tutti gli sviluppatori della tua rete possano accedere, dovrai cambiare l'indirizzo IP in *.conf file per utilizzare i server IP di rete. Altrimenti puoi lasciare le impostazioni predefinite e utilizzare il RedisSentinel Funzione di mappatura degli indirizzi IP per mappare in modo trasparente gli IP di localhost sull'IP di rete a cui ogni PC della rete può connettersi.

Per esempio. se è in esecuzione su un server remoto con 10.0.0.9 IP di rete, può essere configurato con:

var sentinel = new RedisSentinel("10.0.0.9:26380") {
    IpAddressMap = {
        {"127.0.0.1", "10.0.0.9"},
    }
};
container.Register(c => sentinel.Start());

Google Cloud - Fai clic per distribuire Redis #

Il servizio cloud più semplice che abbiamo trovato in grado di configurare istantaneamente una configurazione Redis Sentinel a più nodi è l'utilizzo della funzione di distribuzione Redis di Google Cloud disponibile da Google Cloud Console in Distribuisci e gestisci :

Facendo clic su Distribuisci il pulsante ti consentirà di configurare il tipo, le dimensioni e la posizione in cui desideri distribuire le VM Redis. Consulta la guida Redis completa di Click to Deploy per una procedura dettagliata sulla configurazione e l'ispezione di una configurazione Redis a disponibilità elevata su Google Cloud.

Modifica per utilizzare RedisManagerPool #

Per impostazione predefinita, RedisSentinel utilizza un PooledRedisClientManager , questo può essere modificato per utilizzare il nuovo RedisManagerPool con:

sentinel.RedisManagerFactory = (master,replicas) => new RedisManagerPool(master);

Inizia a monitorare le sentinelle #

Una volta configurato, puoi iniziare a monitorare i server Redis Sentinel e accedere al gestore client preconfigurato con:

IRedisClientsManager redisManager = sentinel.Start();

Che come prima, può essere registrato nel tuo CIO preferito come singleton esempio:

container.Register<IRedisClientsManager>(c => sentinel.Start());

Configura server Redis Sentinel #

Consulta il progetto di configurazione redis per un modo rapido per configurare la configurazione minima di Redis Sentinel ad alta disponibilità, inclusi gli script di avvio/arresto per l'esecuzione istantanea di più istanze redis su uno (o più) server Windows, OSX o Linux.

Statistiche Redis #

Puoi usare il RedisStats classe per visibilità e introspezione nelle istanze in esecuzione. La wiki di Redis Stats elenca le statistiche disponibili.

Numero di tentativi automatici

Per migliorare la resilienza delle connessioni client, RedisClient ritenterà in modo trasparente le operazioni Redis non riuscite a causa di eccezioni socket e I/O in un backoff esponenziale a partire da 10 ms fino al RetryTimeout di 10000 ms . Queste impostazioni predefinite possono essere modificate con:

RedisConfig.DefaultRetryTimeout = 10000;
RedisConfig.BackOffMultiplier = 10;