Il cluster Redis ha bisogno di Sentinel?
Il cluster Redis ha bisogno di Sentinel?
Con Gitlab Enterprise Edition, è possibile utilizzare il pacchetto Omnibus per impostare più macchine con il demone Sentinel.
Redis Sentinel e Fix-Slave-Config Problema: il nodo Redis viene impostato come schiavo di due maestri quando non dovrebbe essere.
Ho usato Redis Sentinel per il failover in una grande flotta Redis composta da 12 sentinelle e oltre 500 frammenti, ciascuno con un maestro e uno schiavo. Tuttavia, ho riscontrato uno strano problema in cui alcuni nodi Redis vengono ripetutamente rilasciati il comando +fissa-slave-config dai sentinella. Ciò ha portato ad alcuni schiavi il passaggio tra il maestro corretto e un altro maestro sbagliato. Non ho notato questo problema su scala ridotta. Sto cercando consigli su come risolvere o eseguire ulteriormente il debug di questo problema.
Ho osservato due problemi specifici:
A) I messaggi +Fix-Slave-Config che ho menzionato in precedenza.
B) la sentinella.Il file conf mostra che alcuni schiavi hanno due maestri, anche se dovrebbero averne solo uno.
Inizialmente, la flotta ha un certo nodo slave xxx.Xxx.Xxx.177 con il maestro xxx.Xxx.Xxx.244 (formando Shard 188). Tuttavia, senza alcuna interruzione del nodo, il maestro di questo schiavo viene commutato a XXX.Xxx.Xxx.96 (che è il maestro per Shard 188) e poi di nuovo al maestro corretto, e questo ciclo si ripete. L’ho verificato accedendo ai nodi slave e master e usando il comando di informazioni Redis-Cli. Tutti i nodi Redis vengono avviati con la configurazione corretta e tutti i nodi Sentinel hanno la configurazione corretta nella loro sentinella.FILE Conf. Quando interrogio ogni sentinella, hanno tutti esattamente lo stesso elenco di maestri dopo ogni cambio di schiavo a master.
Dopo aver verificato i file di registro delle mie 12 sentinelle, vedo che ogni minuto c’è un messaggio di Fix-Slave-Config. Ecco alcuni esempi:
Sentinel #8: 20096: x 22 ott 01:41:49.793 * +Fix-Slave-Config Slave XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #1: 9832: x 22 ott 01:42:50.795 * +Fix-Slave-Config Slave XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379
Sentinel #6: 20528: x 22 ott 01:43:52.458 * +Fix-Slave-Config Slave XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #10: 20650: x 22 ott 01:43:52.464 * +Fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #2: 20838: x 22 ott 01:44:53.489 * +Fix-Slave-Config Slave XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379
Quando eseguo il comando Sentinel Masters, ho notato qualcosa di strano. Nel caso 1, Shard-188 ha due schiavi anziché uno. Lo stesso modello si osserva quando xxx.Xxx.Xxx.177 cade sotto Shard-172 o Shard-182:
Caso 1) Master è xxx.Xxx.Xxx.244 e xxx.Xxx.Xxx.177 è uno dei suoi schiavi:
183) 1) “nome”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 “
5) “Porta”
6) “6379”
7) “Runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “bandiere”
10) “Master”
11) “Pending-comands”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-ok-ping-reply”
16) “14”
17) “Last-Ping-Reply”
18) “14”
19) “Down-dopo-millisecondi”
20) “30000”
21) “Info-refresh”
22) “5636”
23) “riferito di ruolo”
24) “Master”
25) “tempo riferito di ruolo”
26) “17154406”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “1”
31) “Num-Other-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Faithover-timeout”
36) “60000”
37) “Syncs parallele”
38) “1”
72) 1) “nome”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 “
5) “Porta”
6) “6379”
7) “Runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “bandiere”
10) “Master”
11) “Pending-comands”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-ok-ping-reply”
16) “927”
17) “Last-Ping-Reply”
18) “927”
19) “Down-dopo-millisecondi”
20) “30000”
21) “Info-refresh”
22) “5333”
23) “riferito di ruolo”
24) “Master”
25) “tempo riferito di ruolo”
26) “17154312”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “2”
31) “Num-Other-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Faithover-timeout”
36) “60000”
37) “Syncs parallele”
38) “1”
Caso 2) Il master è xxx.Xxx.Xxx.96 e xxx.Xxx.Xxx.177 è uno dei suoi schiavi:
79) 1) “nome”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 “
5) “Porta”
6) “6379”
7) “Runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “bandiere”
10) “Master”
11) “Pending-comands”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-ok-ping-reply”
16) “1012”
17) “Last-Ping-Reply”
18) “1012”
19) “Down-dopo-millisecondi”
20) “30000”
21) “Info-refresh”
22) “1261”
23) “riferito di ruolo”
24) “Master”
25) “tempo riferito di ruolo”
26) “17059720”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “1”
31) “Num-Other-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Faithover-timeout”
36) “60000”
37) “Syncs parallele”
38) “1”
273) 1) “nome”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 “
5) “Porta”
6) “6379”
7) “Runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “bandiere”
10) “Master”
11) “Pending-comands”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-ok-ping-reply”
16) “886”
17) “Last-Ping-Reply”
18) “886”
19) “Down-dopo-millisecondi”
20) “30000”
21) “Info-refresh”
22) “5333”
23) “riferito di ruolo”
24) “Master”
25) “tempo riferito di ruolo”
26) “17154312”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “2”
31) “Num-Other-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Faithover-timeout”
36) “60000”
37) “Syncs parallele”
38) “1”
Questi sono i dettagli del mio problema con Redis Sentinel e il problema Fix-Slave-Config. Sembra che alcuni schiavi vengano impostati come schiavi di due maestri, il che sta causando un comportamento inaspettato nel mio cluster Redis. Sto cercando una soluzione a questo problema e apprezzerei qualsiasi consiglio o suggerimento.
Il cluster Redis ha bisogno di Sentinel
Con Gitlab Enterprise Edition, è possibile utilizzare il pacchetto Omnibus per impostare più macchine con il demone Sentinel.
Redis Sentinel e Fix-Slave-Config Problema: il nodo Redis viene impostato come schiavo di due maestri quando non dovrebbe essere.
O ектрон scart.
Sto cercando di usare Sentinel per il failover nella grande flotta Redis (12 Sentinelle, 500+ frammenti di un maestro e uno schiavo ciascuno). Sto riscontrando un problema molto strano in cui i miei sentinelle emettono ripetutamente il comando +fissa-slave-config su alcuni nodi Redis, e il risultato sono alcuni schiavi che passano tra il maestro corretto e un altro maestro sbagliato. Non ho notato che ciò accadeva su scala ridotta, per quello che vale. Qualsiasi consiglio su cosa correggere o ulteriormente il debug?
Ho notato due problemi specifici:
A) +messaggi fissati-slave-config, come indicato sopra.
B) la sentinella.Conf mostra alcuni schiavi che hanno due maestri (dovrebbero averne solo uno)
La flotta nello stato di partenza ha un certo nodo slave xxx.Xxx.Xxx.177 con un maestro xxx.Xxx.Xxx.244 (insieme, comprendono Shard 188 nella flotta). Senza alcuna interruzione del nodo, il maestro dello slave è passato a XXX.Xxx.Xxx.96 (maestro per shard 188) e poi di nuovo, e poi. Questo è verificato da sshing negli slave e padroni e controllando le informazioni Redis-Cli. Tutti i nodi Redis sono iniziati nella configurazione corretta. Tutti i nodi Sentinel avevano la configurazione corretta nella loro sentinella.conf. Ogni sentinella ha esattamente lo stesso elenco di maestri quando li interrogio dopo ciascuno di questi slave-> Master Modifiche.
Attraverso le mie 12 sentinelle, il seguente è registrato. Ogni minuto, c’è un messaggio +Fix-Slave-Config inviato:
Sentinel #8: 20096: x 22 ott 01:41:49.793 * +Fix-Slave-Config Slave XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #1: 9832: x 22 ott 01:42:50.795 * +Fix-Slave-Config Slave XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379
Sentinel #6: 20528: x 22 ott 01:43:52.458 * +Fix-Slave-Config Slave XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #10: 20650: x 22 ott 01:43:52.464 * +Fix-slave-config slave xxx.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-188 xxx.Xxx.Xxx.96 6379
Sentinel #2: 20838: x 22 ott 01:44:53.489 * +Fix-Slave-Config Slave XXX.Xxx.Xxx.177: 6379 xxx.Xxx.Xxx.177 6379 @ shard-172 xxx.Xxx.Xxx.244 6379
Ecco l’output del comando Sentinel Masters. La cosa strana è che Shard-188 ha due schiavi, quando in realtà dovrebbe avere solo 1. L’output sembra uguale per quando xxx.Xxx.Xxx.177 è sotto Shard-172 e Shard-182.
Caso 1) xxx.Xxx.Xxx.244 è maestro di xxx.Xxx.Xxx.177
183) 1) “nome”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 ”
5) “Porta”
6) “6379”
7) “Runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “bandiere”
10) “Master”
11) “Pending-comands”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-ok-ping-reply”
16) “14”
17) “Last-Ping-Reply”
18) “14”
19) “Down-dopo-millisecondi”
20) “30000”
21) “Info-refresh”
22) “5636”
23) “riferito di ruolo”
24) “Master”
25) “tempo riferito di ruolo”
26) “17154406”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “1”
31) “Num-Other-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Faithover-timeout”
36) “60000”
37) “Syncs parallele”
38) “1”
72) 1) “nome”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 ”
5) “Porta”
6) “6379”
7) “Runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “bandiere”
10) “Master”
11) “Pending-comands”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-ok-ping-reply”
16) “927”
17) “Last-Ping-Reply”
18) “927”
19) “Down-dopo-millisecondi”
20) “30000”
21) “Info-refresh”
22) “5333”
23) “riferito di ruolo”
24) “Master”
25) “tempo riferito di ruolo”
26) “17154312”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “2”
31) “Num-Other-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Faithover-timeout”
36) “60000”
37) “Syncs parallele”
38) “1”
Caso 2) xxx.Xxx.Xxx.96 è maestro di xxx.Xxx.Xxx.177
79) 1) “nome”
2) “Shard-172”
3) “IP”
4) “xxx.Xxx.Xxx.244 ”
5) “Porta”
6) “6379”
7) “Runid”
8) “CA02DA1F0002A25A880E6765AED306B1857AE2F7”
9) “bandiere”
10) “Master”
11) “Pending-comands”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-ok-ping-reply”
16) “1012”
17) “Last-Ping-Reply”
18) “1012”
19) “Down-dopo-millisecondi”
20) “30000”
21) “Info-refresh”
22) “1261”
23) “riferito di ruolo”
24) “Master”
25) “tempo riferito di ruolo”
26) “17059720”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “1”
31) “Num-Other-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Faithover-timeout”
36) “60000”
37) “Syncs parallele”
38) “1”
273) 1) “nome”
2) “Shard-188”
3) “IP”
4) “xxx.Xxx.Xxx.96 ”
5) “Porta”
6) “6379”
7) “Runid”
8) “95CD3A457EF71FC91FF1A1C5A6D5D4496B266167”
9) “bandiere”
10) “Master”
11) “Pending-comands”
12) “0”
13) “Last-Ping-Sent”
14) “0”
15) “Last-ok-ping-reply”
16) “886”
17) “Last-Ping-Reply”
18) “886”
19) “Down-dopo-millisecondi”
20) “30000”
21) “Info-refresh”
22) “5762”
23) “riferito di ruolo”
24) “Master”
25) “tempo riferito di ruolo”
26) “17059758”
27) “config-epoch”
28) “0”
29) “Num-Slaves”
30) “2”
31) “Num-Other-Sentinels”
32) “12”
33) “Quorum”
34) “7”
35) “Faithover-timeout”
36) “60000”
37) “Syncs parallele”
38) “1”
La mia sentinella iniziale.conf per ogni sentinella è
MaxClient 20000
Avviso di loglevel
Logfile “/Home/Redis/Logs/Sentinel.tronco d’albero”
Sentinel Monitor Shard-172 Redis-B-172 7
Sentinel Down-dopo-millisecondi Shard-172 30000
Sentinel Failover-timeout Shard-172 60000
Sentinel Syncs parallele Shard-172 1
.
Sentinel Monitor Shard-188 Redis-B-188 7
Sentinel Down-dopo-millisecondi Shard-188 30000
Sentinel Failover-timeout Shard-188 60000
Sentinel Syncs parallele Shard-188 1
Ecco la sentinella risultante.conf (per tutte le sentinelle) dopo qualche minuto: nota i due schiavi:
Sentinel Monitor Shard-172 XXX.Xxx.Xxx.244 6379 7
Sentinel Failover-timeout Shard-172 60000
Sentinel config-epoch shard-172 0
Sentinel Leader-Epoch Shard-172 0
Sentinel noto slave shard-172 xxx.Xxx.Xxx.177 6379 Sentinel noto-sentinel shard-172 .
.
Sentinel Monitor Shard-188 XXX.Xxx.Xxx.96 6379 7
Sentinel Failover-timeout Shard-188 60000
Sentinel Config-Epoch Shard-188 0
Sentinel Leader-Epoch Shard-188 0
Sentinel noto slave shard-188 xxx.Xxx.Xxx.194 6379 Sentinel noto slave shard-188 xxx.Xxx.Xxx.177 6379
Sentinel noto-sentinel shard-188 .
Replica e failover Redis con omnibus gitlab (Premium Self)
Nota: questa è la documentazione per i pacchetti Omnibus Gitlab. Per utilizzare il tuo Redis non bundle, segui la documentazione pertinente.
NOTA: in Redis Lingo, Primary è chiamato Master. In questo documento, viene utilizzato il primario anziché il master, tranne le impostazioni in cui è richiesto il master.
L’uso di Redis in ambiente scalabile è possibile utilizzando un Primario X Replica Topologia con un servizio Redis Sentinel per guardare e avviare automaticamente la procedura di failover.
Redis richiede l’autenticazione se utilizzata con Sentinel. Vedi la documentazione di Redis Security per ulteriori informazioni. Si consiglia di utilizzare una combinazione di una password Redis e regole di firewall strette per proteggere il servizio Redis. Sei fortemente incoraggiato a leggere la documentazione di Redis Sentinel prima di configurare Redis con Gitlab per comprendere appieno la topologia e l’architettura.
Prima di immergersi nei dettagli della creazione di Redis e Redis Sentinel per una topologia replicata, assicurati di leggere questo documento una volta nel suo insieme per capire meglio come i componenti sono legati insieme.
Sono necessarie almeno 3 macchine indipendenti: VM fisiche o VM che corrono in macchine fisiche distinte. È essenziale che tutte le istanze di Redis Primary e Replica siano eseguite in diverse macchine. Se non si esegue la fornitura delle macchine in quel modo specifico, qualsiasi problema con l’ambiente condiviso può ridurre l’intero configurazione.
Va bene eseguire una sentinella insieme a un’istanza primaria o replica. Tuttavia, non dovrebbe esserci più di una sentinella sulla stessa macchina.
È inoltre necessario prendere in considerazione la topologia di rete sottostante, assicurandosi di avere una connettività ridondante tra Redis / Sentinel e Istanze Gitlab, altrimenti le reti diventano un singolo punto di fallimento.
L’esecuzione di Redis in un ambiente in scala richiede alcune cose:
- Più istanze di Redis
- Esegui Redis in a Primario X Replica Topologia
- Multiple istanze di sentinella
- Supporto e visibilità delle applicazioni a tutte le istanze di Sentinel e Redis
Redis Sentinel può gestire i compiti più importanti in un ambiente HA e questo è per aiutare a mantenere i server online senza tempi di inattività minimi o nessun. Redis Sentinel:
- Monitor Primario E Repliche istanze per vedere se sono disponibili
- Promuove a Replica A Primario quando il Primario non riesce
- Degrade a Primario A Replica quando il fallimento Primario ritorna online (per prevenire il parto dati)
- Può essere interrogato dall’applicazione per connettersi sempre alla corrente Primario server
Quando un Primario Non risponde, è responsabilità dell’applicazione (nel nostro caso Gitlab) gestire il timeout e riconnettersi (interrogazione a Sentinella per un nuovo Primario).
Per ottenere una migliore comprensione su come impostare correttamente Sentinel, si prega di leggere prima la documentazione di Redis Sentinel, poiché la mancata configurazione correttamente può portare alla perdita di dati o far cadere l’intero cluster, invalidando lo sforzo di failover.
Setup consigliato
Per una configurazione minima, è necessario installare il pacchetto Omnibus Gitlab in 3 indipendente macchine, entrambe con Redis E Sentinella:
- Redis Primary + Sentinel
- Redis Replica + Sentinel
- Redis Replica + Sentinel
Se non sei sicuro o non capisci perché e da dove provengono la quantità di nodi, leggi la panoramica di configurazione di Redis e la panoramica di configurazione di Sentinel.
Per una configurazione consigliata che può resistere a più guasti, è necessario installare il pacchetto Omnibus Gitlab in 5 indipendente macchine, entrambe con Redis E Sentinella:
- Redis Primary + Sentinel
- Redis Replica + Sentinel
- Redis Replica + Sentinel
- Redis Replica + Sentinel
- Redis Replica + Sentinel
Panoramica di configurazione di Redis
Devi avere almeno 3 server Redis: 1 primario, 2 repliche, e devono essere ciascuno su macchine indipendenti (vedi spiegazione sopra).
Puoi avere ulteriori nodi Redis, che aiuta a sopravvivere a una situazione in cui più nodi scendono. Ogni volta che ci sono solo 2 nodi online, non viene avviato un failover.
Ad esempio, se hai 6 nodi Redis, un massimo di 3 può essere contemporaneamente.
Esistono diversi requisiti per i nodi sentinella. Se li ospiti nelle stesse macchine Redis, potrebbe essere necessario prendere in considerazione tali restrizioni quando si calcola la quantità di nodi da approvvigionamento. Vedere la documentazione di panoramica di configurazione di Sentinel per ulteriori informazioni.
Tutti i nodi Redis devono essere configurati allo stesso modo e con specifiche del server simili, come in una situazione di failover, qualsiasi Replica può essere promosso come il nuovo Primario dai server Sentinel.
La replica richiede l’autenticazione, quindi è necessario definire una password per proteggere tutti i nodi Redis e i Sentinel. Tutti condividono la stessa password e tutte le istanze devono essere in grado di parlare tra loro sulla rete.
Panoramica di configurazione di Sentinel
Sentinel Guarda sia gli altri sentinelle che i nodi Redis. Ogni volta che una sentinella rileva che un nodo Redis non risponde, annuncia lo stato del nodo agli altri sentinelle. Le sentinelle devono raggiungere un quorum (L’importo minimo di sentinelle che accettano un nodo è in calo) per essere in grado di iniziare un failover.
Ogni volta che il quorum è incontrato, il maggioranza Di tutti i nodi di Sentinel noti devono essere disponibili e raggiungibili, in modo che possano eleggere la sentinella capo Chi prende tutte le decisioni per ripristinare la disponibilità del servizio da:
- Promuovendo un nuovo Primario
- Riconfigurare l’altro Repliche e farli indicare il nuovo Primario
- Annunciare il nuovo Primario a ogni altro peer Sentinel
- Riconfigurare il vecchio Primario e degradare a Replica Quando torna online
Devi avere almeno 3 server Redis Sentinel e devono essere ciascuno in una macchina indipendente (che si ritiene falliscano in modo indipendente), idealmente in diverse aree geografiche.
Puoi configurarli nelle stesse macchine in cui hai configurato gli altri server Redis, ma capire che se un intero nodo scende, perdi sia una sentinella che un’istanza Redis.
Il numero di sentinelle dovrebbe essere idealmente sempre un strano numero, affinché l’algoritmo di consenso sia efficace nel caso di un fallimento.
In una topologia di 3 nodi, puoi permetterti solo 1 nodo Sentinel che scende. Ogni volta che il maggioranza Delle sentinelle scende, la protezione della partizione di rete impedisce azioni distruttive e un failover non è iniziato.
Ecco alcuni esempi:
- Con 5 o 6 sentinelle, un massimo di 2 può andare giù per un failover.
- Con 7 sentinelle, un massimo di 3 nodi può scendere.
IL Capo Le elezioni a volte possono fallire il voto quando consenso non si ottiene (vedi il numero dispari di requisiti di nodi sopra). In tal caso, viene fatto un nuovo tentativo dopo la quantità di tempo definita in Sentinel [“Faithover_timeout”] (in millisecondi).
Nota: possiamo vedere dove Sentinel [‘Faithover_timeout’] è definito in seguito.
La variabile FaithOver_Timeout ha molti casi d’uso diversi. Secondo la documentazione ufficiale:
- Il tempo necessario per ricominciare un failover dopo che un precedente failover era già stato processato contro la stessa primaria da un determinato sentinella, è due volte il timeout di failover.
- Il tempo necessario per una replica che replica a una primaria errata in base a una configurazione di corrente di Sentinel, per essere costretta a replicare con il primario giusto, è esattamente il timeout di failover (contando dal momento in cui una sentinella ha rilevato l’errore di configurazione).
- Il tempo necessario per annullare un failover che è già in corso ma non ha prodotto alcuna modifica della configurazione (replica di nessuno ancora non riconosciuto dalla replica promossa).
- Il tempo massimo Un failover in corso attende che tutte le repliche vengano riconfigurate come repliche della nuova primaria. Tuttavia, anche dopo questo periodo le repliche vengono comunque riconfigurate dai sentinelle, ma non con l’esatta progressione di sincronizzazione parallela come specificato.
Configurazione di Redis
Questa è la sezione in cui installiamo e impostiamo le nuove istanze Redis.
Si presume che tu abbia installato Gitlab e tutti i suoi componenti da zero. Se hai già installato e funzionante Redis, leggi come passare da un’installazione a macchina singola.
Nota: i nodi Redis (sia primari che replica) necessitano della stessa password definita in Redis [‘Password’] . In qualsiasi momento durante un failover i sentinelle possono riconfigurare un nodo e modificare il suo stato da primario a replica e viceversa.
Requisiti
I requisiti per una configurazione Redis sono i seguenti:
- Disposizione Il numero minimo richiesto di istanze come specificato nella sezione di configurazione raccomandata.
- Noi Non Consiglia l’installazione di Redis o Redis Sentinel nelle stesse macchine che l’applicazione Gitlab è in esecuzione poiché questo indebolisce la configurazione HA. Puoi comunque optare per installare Redis e Sentinel nella stessa macchina.
- Tutti i nodi Redis devono essere in grado di parlare tra loro e accettare le connessioni in arrivo su porte Redis (6379) e Sentinel (26379) (a meno che non si modifichi quelle predefinite).
- Il server che ospita l’applicazione GitLab deve essere in grado di accedere ai nodi Redis.
- Proteggi i nodi dall’accesso dalle reti esterne (Internet), utilizzando il firewall.
Passa da un’installazione a macchina singola esistente
Se hai già una singola machine gitlab installa in esecuzione, devi prima replicare da questa macchina, prima di de-attivare l’istanza Redis al suo interno.
La tua installazione a macchina singola è la iniziale Primario, e gli altri 3 dovrebbero essere configurati come Replica indicando questa macchina.
Dopo aver raggiunto la replica, è necessario interrompere i servizi nell’installazione a macchina singola, per ruotare il Primario a uno dei nuovi nodi.
Apportare le modifiche richieste nella configurazione e riavvia nuovamente i nuovi nodi.
Per disabilitare Redis nella singola installazione, modifica/etc/gitlab/gitlab.RB:
Redis['abilitare'" = falso
Se non riesci a replicare prima, è possibile perdere dati (lavori in background non trasformati).
Passo 1. Configurazione dell’istanza Redis primaria
- Ssh nel Primario Redis Server.
- Scarica/installa il pacchetto Omnibus Gitlab che desideri utilizzare Passi 1 e 2 Dalla pagina Download Gitlab.
- Assicurati di selezionare il pacchetto Omnibus corretto, con la stessa versione e tipo (community, Enterprise Editions) della tua attuale installazione.
- Non completare altri passaggi nella pagina di download.
- Modifica/etc/gitlab/gitlab.RB e aggiungi il contenuto:
# Specifica il ruolo del server come 'Redis_Master_Role' ruoli ['Redis_Master_Role'" # Indirizzo IP che punta a un IP locale a cui le altre macchine possono raggiungere. # Puoi anche impostare Bind su '0.0.0.0 'che ascolta in tutte le interfacce. # Se hai davvero bisogno di legarsi a un IP accessibile esterno, fai # Sicuro di aggiungere ulteriori regole del firewall per impedire l'accesso non autorizzato. Redis['legamento'" = '10.0.0.1 ' # Definire una porta in modo che Redis possa ascoltare le richieste TCP che consentono altri # macchine per connettersi ad esso. Redis['porta'" = 6379 # Imposta autenticazione della password per Redis (usa la stessa password in tutti i nodi). Redis['parola d'ordine'" = 'Redis-Password-Goes-here'
gitlab_rails['Auto_migrate'" = falso
Nota: è possibile specificare più ruoli come Sentinel e Redis come: ruoli [‘Redis_Sentinel_Role’, ‘Redis_Master_Role’] . Leggi di più sui ruoli.
Passo 2. Configurazione delle istanze Replica Redis
- Ssh nel replica Redis Server.
- Scarica/installa il pacchetto Omnibus Gitlab che desideri utilizzare Passi 1 e 2 Dalla pagina Download Gitlab.
- Assicurati di selezionare il pacchetto Omnibus corretto, con la stessa versione e tipo (community, Enterprise Editions) della tua attuale installazione.
- Non completare altri passaggi nella pagina di download.
- Modifica/etc/gitlab/gitlab.RB e aggiungi il contenuto:
# Specifica il ruolo del server come 'Redis_replica_role' ruoli ['Redis_replica_role'" # Indirizzo IP che punta a un IP locale a cui le altre macchine possono raggiungere. # Puoi anche impostare Bind su '0.0.0.0 'che ascolta in tutte le interfacce. # Se hai davvero bisogno di legarsi a un IP accessibile esterno, fai # Sicuro di aggiungere ulteriori regole del firewall per impedire l'accesso non autorizzato. Redis['legamento'" = '10.0.0.2 ' # Definire una porta in modo che Redis possa ascoltare le richieste TCP che consentono altri # macchine per connettersi ad esso. Redis['porta'" = 6379 # La stessa password per l'autenticazione Redis impostata per il nodo primario. Redis['parola d'ordine'" = 'Redis-Password-Goes-here' # L'IP del nodo Redis primario. Redis['master_ip'" = '10.0.0.1 ' # Porta del server Redis primario, Regisment per passare a non impostazione predefinita. Predefiniti # a `6379`. #redis ['Master_port'] = 6379
SUDO TOUCT /etc/gitlab/skip-auto-reconfigure
Nota: è possibile specificare più ruoli come Sentinel e Redis come: ruoli [‘Redis_Sentinel_Role’, ‘Redis_Master_Role’] . Leggi di più sui ruoli.
Questi valori non devono essere nuovamente modificati in/etc/gitlab/gitlab.RB Dopo un failover, poiché i nodi sono gestiti dai sentinelle e anche dopo una riconfigurazione di Gitlab-CTL, ottengono la loro configurazione ripristinata dalle stesse sentinelle.
Passaggio 3. Configurazione delle istanze Redis Sentinel
Nota: se si utilizza un’istanza esterna Redis Sentinel, assicurarsi di escludere il parametro RecoverPass dalla configurazione Sentinel. Questo parametro fa riferire ai clienti l’autenticazione Noauth richiesta. . Redis Sentinel 3.2.X non supporta l’autenticazione della password.
Ora che i server Redis sono tutti configurati, configuriamo i server Sentinel.
Se non sei sicuro che i server Redis funzionino e replicano correttamente, leggi la replica di risoluzione dei problemi e risolverla prima di procedere con Sentinel Configurazione.
Devi avere almeno 3 server Redis Sentinel e devono essere ciascuno in una macchina indipendente. Puoi configurarli nelle stesse macchine in cui hai configurato gli altri server Redis.
Con Gitlab Enterprise Edition, è possibile utilizzare il pacchetto Omnibus per impostare più macchine con il demone Sentinel.
- SSH nel server che ospita Redis Sentinel.
- È possibile omettere questo passaggio se le sentinelle sono ospitate nello stesso nodo delle altre istanze di Redis.Scarica/installa il pacchetto Omnibus Gitlab Enterprise Edition utilizzando Passi 1 e 2 Dalla pagina Download Gitlab.
- Assicurati di selezionare il pacchetto Omnibus corretto, con la stessa versione che è in esecuzione l’applicazione GitLab.
- Non completare altri passaggi nella pagina di download.
- Modifica/etc/gitlab/gitlab.RB e aggiungi il contenuto (se si sta installando i sentinelle nello stesso nodo delle altre istanze di Redis, alcuni valori potrebbero essere duplicati di seguito):
ruoli ['Redis_Sentinel_Role'" # Deve essere lo stesso in ogni nodo Sentinel Redis['master_name'" = 'gitlab-redis' # La stessa password per l'autenticazione Redis impostata per il nodo primario. Redis['password principale'" = 'Redis-Password-Goes-here' # L'IP del nodo Redis primario. Redis['master_ip'" = '10.0.0.1 ' # Definire una porta in modo che Redis possa ascoltare le richieste TCP che consentono altri # macchine per connettersi ad esso. Redis['porta'" = 6379 # Porta del server Redis primario, Regisment per passare a non impostazione predefinita. Predefiniti # a `6379`. #redis ['Master_port'] = 6379 ## Configura Sentinel sentinella['legamento'" = '10.0.0.1 ' # Port su cui Sentinel ascolta, rimborso per passare a non inadempiente. Predefiniti # a `26379`. # sentinel ['port'] = 26379 ## Quorum deve riflettere l'importo delle sentinelle di voto che ci vogliono per iniziare un failover. Il valore ## non deve essere maggiore dell'importo di sentinelle. ## ## Il quorum può essere usato per sintonizzare Sentinel in due modi: ## 1. Se un quorum è impostato su un valore inferiore alla maggior parte dei sentinelle ## Distribuiamo, stiamo fondamentalmente rendendo la sentinella più sensata ai guasti primari, ## innescare un failover non appena solo una minoranza di sentinelle non è più ## in grado di parlare con la primaria. ## 1. Se un quorum è impostato su un valore maggiore della maggior parte delle sentinelle, lo siamo ## rendendo Sentinel in grado di failover solo quando c'è un numero molto grande (più grande ## della maggioranza) di sentinelle ben collegate che concordano sull'essere primario verso il basso.S sentinella['quorum'" = 2 ## considera il server non rispondente dopo x quantità di ms. # sentinel ['down_after_milliseconds'] = 10000 ## Specifica il timeout di failover in millisecondi. È usato in molti modi: ## ## - Il tempo necessario per ricominciare un failover dopo un precedente failover lo era ## già provato contro la stessa primaria da una determinata sentinella, sono due ## volte il timeout di failover. ## ## - Il tempo necessario per una replica che replica a una primaria sbagliata secondo ## a una configurazione di corrente sentinella, per essere costretta a replicare ## con il primario giusto, è esattamente il timeout di failover (contando da allora ## Il momento in cui una sentinella ha rilevato la configurazione errata). ## ## - Il tempo necessario per annullare un failover già in corso ma ## non ha prodotto alcun cambiamento di configurazione (replicaf nessuno ancora no ## riconosciuto dalla replica promossa). ## ## - Il tempo massimo un failover in corso attende che tutta la replica sia ## riconfigurato come repliche della nuova primaria. Tuttavia anche dopo questo periodo ## le repliche sono comunque riconfigurate dai sentinelle, ma non con ## la progressione esatta con sincronizzazione parallela come specificato. # Sentinel ['FaithOver_Timeout'] = 60000
SUDO TOUCT /etc/gitlab/skip-auto-reconfigure
Passaggio 4. Configurazione dell’applicazione Gitlab
La parte finale è informare il principale server delle applicazioni Gitlab dei server Redis Sentinels e le credenziali di autenticazione.
È possibile abilitare o disabilitare il supporto Sentinel in qualsiasi momento in installazioni nuove o esistenti. Dal punto di vista dell’applicazione Gitlab, tutto ciò che richiede sono le credenziali corrette per i nodi Sentinel.
Sebbene non richieda un elenco di tutti i nodi Sentinel, in caso di guasto, deve accedere ad almeno uno degli elencati.
Nota: i seguenti passaggi devono essere eseguiti nel server delle applicazioni Gitlab che idealmente non dovrebbe avere Redis o Sentinels per una configurazione HA.
- SSH nel server in cui è installata l’applicazione Gitlab.
- Modifica/etc/gitlab/gitlab.RB e aggiungi/modifica le seguenti righe:
## deve essere lo stesso in ogni nodo Sentinel Redis['master_name'" = 'gitlab-redis' ## La stessa password per l'autenticazione Redis impostata per il nodo primario. Redis['password principale'" = 'Redis-Password-Goes-here' ## un elenco di sentinelle con `host` e` port` gitlab_rails['Redis_Sentinels'" = [ 'ospite' => '10.0.0.1 ', 'porta' => 26379>, 'ospite' => '10.0.0.2 ', 'porta' => 26379>, 'ospite' => '10.0.0.3 ', 'porta' => 26379> "
Passaggio 5. Abilitare il monitoraggio
Se si abilita il monitoraggio, deve essere abilitato Tutto Server Redis.
- Assicurati di raccogliere Consol_Server_nodes, che sono gli indirizzi IP o i record DNS dei nodi del server console, per il passaggio successivo. Nota che sono presentati come y.Y.Y.Y console1.gitlab.esempio.com z.Z.Z.Z
- Crea/Edit/etc/gitlab/gitlab.RB e aggiungi la seguente configurazione:
# Abilita la scoperta del servizio per Prometeo console['abilitare'" = VERO console['Monitoring_Service_Discovery'" = VERO # Sostituisci i segnaposto # Y.Y.Y.Y console1.gitlab.esempio.com z.Z.Z.Z # con gli indirizzi dei nodi del server console console['configurazione'" = Retry_Join: %W (y.Y.Y.Y console1.gitlab.esempio.com z.Z.Z.Z), > # Imposta gli indirizzi di rete su cui gli esportatori ascoltano node_exporter['ascolta_address'" = '0.0.0.0: 9100 ' Redis_Exporter['ascolta_address'" = '0.0.0.0: 9121 '
Esempio di una configurazione minima con 1 primaria, 2 repliche e 3 sentinelle
In questo esempio consideriamo che tutti i server hanno un’interfaccia di rete interna con IPS nel 10.0.0.range x e che possono connettersi tra loro usando questi IP.
In un utilizzo del mondo reale, imposteresti anche le regole del firewall per impedire l’accesso non autorizzato da altre macchine e bloccare il traffico dall’esterno (Internet).
Usiamo gli stessi 3 nodi con Redis + Sentinella Topologia discussa nella panoramica della configurazione di Redis e nella documentazione di installazione di Sentinel.
Ecco un elenco e una descrizione di ciascuno macchina e il assegnato IP:
- 10.0.0.1: Redis Primary + Sentinel 1
- 10.0.0.2: Redis Replica 1 + Sentinel 2
- 10.0.0.3: Redis Replica 2 + Sentinel 3
- 10.0.0.4: Applicazione Gitlab
Dopo la configurazione iniziale, se un failover viene avviato dai nodi Sentinel, i nodi Redis vengono riconfigurati e il Primario cambia permanentemente (incluso in Redis.conf) da un nodo all’altro, fino a quando non viene nuovamente ricominciato un nuovo failover.
La stessa cosa accade con Sentinel.conf che viene sovrascritto dopo l’esecuzione iniziale, dopo che ogni nuovo nodo Sentinel inizia a guardare il Primario, o un failover promuove un diverso Primario nodo.
Configurazione di esempio per Redis Primary e Sentinel 1
ruoli ['Redis_Sentinel_Role', 'Redis_Master_Role'" Redis['legamento'" = '10.0.0.1 ' Redis['porta'" = 6379 Redis['parola d'ordine'" = 'Redis-Password-Goes-here' Redis['master_name'" = 'gitlab-redis' # deve essere lo stesso in ogni nodo Sentinel Redis['password principale'" = 'Redis-Password-Goes-here' # lo stesso valore definito in Redis ['Password'] nell'istanza primaria Redis['master_ip'" = '10.0.0.1 ' # ip dell'istanza iniziale di Redis primaria #Redis ['Master_port'] = 6379 # Porta dell'istanza iniziale di Redis primaria, Riscalia sentinella['legamento'" = '10.0.0.1 ' # Sentinel ['port'] = 26379 # Riscaldatore per modificare la porta predefinita sentinella['quorum'" = 2 # sentinel ['down_after_milliseconds'] = 10000 # Sentinel ['FaithOver_Timeout'] = 60000
Riconfigurare Omnibus gitlab per le modifiche ad avere effetto.
Configurazione di esempio per Redis Replica 1 e Sentinel 2
ruoli ['Redis_Sentinel_Role', 'Redis_replica_role'" Redis['legamento'" = '10.0.0.2 ' Redis['porta'" = 6379 Redis['parola d'ordine'" = 'Redis-Password-Goes-here' Redis['password principale'" = 'Redis-Password-Goes-here' Redis['master_ip'" = '10.0.0.1 ' # Ip del server Redis primario #redis ['Master_port'] = 6379 # Porta del server Redis primario, Regsment per passare a non impostazione predefinita Redis['master_name'" = 'gitlab-redis' # deve essere lo stesso in ogni nodo Sentinel sentinella['legamento'" = '10.0.0.2 ' # Sentinel ['port'] = 26379 # Riscaldatore per modificare la porta predefinita sentinella['quorum'" = 2 # sentinel ['down_after_milliseconds'] = 10000 # Sentinel ['FaithOver_Timeout'] = 60000
Riconfigurare Omnibus gitlab per le modifiche ad avere effetto.
Configurazione di esempio per Redis Replica 2 e Sentinel 3
ruoli ['Redis_Sentinel_Role', 'Redis_replica_role'" Redis['legamento'" = '10.0.0.3 ' Redis['porta'" = 6379 Redis['parola d'ordine'" = 'Redis-Password-Goes-here' Redis['password principale'" = 'Redis-Password-Goes-here' Redis['master_ip'" = '10.0.0.1 ' # Ip del server Redis primario #redis ['Master_port'] = 6379 # Porta del server Redis primario, Regsment per passare a non impostazione predefinita Redis['master_name'" = 'gitlab-redis' # deve essere lo stesso in ogni nodo Sentinel sentinella['legamento'" = '10.0.0.3 ' # Sentinel ['port'] = 26379 # Riscaldatore per modificare la porta predefinita sentinella['quorum'" = 2 # sentinel ['down_after_milliseconds'] = 10000 # Sentinel ['FaithOver_Timeout'] = 60000
Riconfigurare Omnibus gitlab per le modifiche ad avere effetto.
Configurazione di esempio per l’applicazione GitLab
Redis['master_name'" = 'gitlab-redis' Redis['password principale'" = 'Redis-Password-Goes-here' gitlab_rails['Redis_Sentinels'" = [ 'ospite' => '10.0.0.1 ', 'porta' => 26379>, 'ospite' => '10.0.0.2 ', 'porta' => 26379>, 'ospite' => '10.0.0.3 ', 'porta' => 26379> "
Riconfigurare Omnibus gitlab per le modifiche ad avere effetto.
Configurazione avanzata
Omnibus Gitlab configura alcune cose dietro le tende per semplificare la vita dei Sysadmins. Se vuoi sapere cosa succede sotto, continua a leggere.
Esecuzione di più cluster Redis
Omnibus Gitlab supporta l’esecuzione di istanze separate di Redis e Sentinel per diverse classi di persistenza.
Classe | Scopo |
---|---|
cache | Memorizza i dati memorizzati nella cache. |
code | Store lavori di background sidekiq. |
condiviso_state | Memorizzare dati relativi alla sessione e altri dati persistenti. |
actioncable | Back -end pub/sotto coda per ActionCable. |
Trace_chunks | Memorizzare i dati dei blocchi di tracce di CI. |
Per far funzionare questo con Sentinel:
- Configura le diverse istanze Redis/Sentinels in base alle tue esigenze.
- Per ogni istanza dell’applicazione Rails, modifica il suo/etc/gitlab/gitlab.File RB:
gitlab_rails['Redis_Cache_Instance'" = Redis_cache_url gitlab_rails['Redis_queues_instance'" = Redis_Queues_url gitlab_rails['Redis_Shared_State_Instance'" = Redis_Shared_state_url gitlab_rails['Redis_ActionCable_Instance'" = Redis_ActionCable_url gitlab_rails['Redis_trace_chunks_instance'" = Redis_trace_chunks_url # Configurare i sentinelle gitlab_rails['Redis_Cache_Sentinels'" = [ ospite: Redis_Cache_Sentinel_host, porta: 26379 >, ospite: Redis_Cache_Sentinel_Host2, porta: 26379 > " gitlab_rails['Redis_Queues_Sentinels'" = [ ospite: Redis_Queues_sentinel_host, porta: 26379 >, ospite: Redis_Queues_Sentinel_host2, porta: 26379 > " gitlab_rails['Redis_Shared_State_Sentinels'" = [ ospite: Condiviso_state_sentinel_host, porta: 26379 >, ospite: Condiviso_state_sentinel_host2, porta: 26379 > " gitlab_rails['Redis_ActionCable_Sentinels'" = [ ospite: Actioncable_sentinel_host, porta: 26379 >, ospite: Actioncable_sentinel_host2, porta: 26379 > " gitlab_rails['Redis_Trace_chunks_sentinels'" = [ ospite: Trace_chunks_sentinel_host, porta: 26379 >, ospite: Trace_chunks_sentinel_host2, porta: 26379 > "
- Redis URLS dovrebbe essere nel formato: Redis: //: password@sentinel_primary_name, dove:
- La password è la password in chiaro per l’istanza Redis.
- Sentinel_primary_name è il nome principale Sentinel set con Redis [‘Master_Name’], ad esempio Gitlab-Redis-Cache .
sudo riconfigurazione Gitlab-CTL
NOTA: per ciascuna classe di persistenza, il default di Gitlab è l’utilizzo della configurazione specificata in gitlab_rails [‘Redis_sentinels’] a meno che non sia stato annullato dalle impostazioni precedentemente descritte.
Controllare i servizi di gestione
Nell’esempio precedente, abbiamo usato Redis_Sentinel_Role e Redis_Master_Role che semplifica la quantità di modifiche alla configurazione.
Se si desidera un maggiore controllo, ecco cosa stabilisce automaticamente ciascuno quando è abilitato:
## Redis Sentinel Ruolo Redis_Sentinel_Role['abilitare'" = VERO # Quando il ruolo di Sentinel è abilitato, i seguenti servizi sono anche abilitati sentinella['abilitare'" = VERO # I seguenti servizi sono disabilitati Redis['abilitare'" = falso bootstrap['abilitare'" = falso nginx['abilitare'" = falso Postgresql['abilitare'" = falso gitlab_rails['abilitare'" = falso mailroom['abilitare'" = falso ------- ## Redis Primary/Replica Ruolo Redis_Master_Role['abilitare'" = VERO # Abilita solo uno di loro Redis_replica_role['abilitare'" = VERO # Abilita solo uno di loro # Quando il ruolo primario o replica Redis è abilitato, i seguenti servizi sono # abilitato disabilitato. Se i ruoli Redis e Sentinel sono combinati, entrambi # i servizi sono abilitati. # I seguenti servizi sono disabilitati sentinella['abilitare'" = falso bootstrap['abilitare'" = falso nginx['abilitare'" = falso Postgresql['abilitare'" = falso gitlab_rails['abilitare'" = falso mailroom['abilitare'" = falso # Per il ruolo di replica di Redis, cambia anche questa impostazione da "vero" a "false" predefinito: Redis['maestro'" = falso
È possibile trovare gli attributi pertinenti definiti in Gitlab_rails.Rb .
Risoluzione dei problemi
Ulteriori letture
- Architetture di riferimento
- Configurare il database
- Configurare NFS
- Configurare i bilanciatori del carico
Redis Sentinel
Attenzione. Il meccanismo deprecato Redis Sentinel sarà ritirato nella versione 7 di Creatio.18.3. Si consiglia di passare al cluster Redis dopo aver aggiornato Creatio alla versione 7.18.0.
Il meccanismo di Redis Sentinel viene utilizzato per fornire tolleranza ai guasti per i repository di Redis utilizzati da Creatio. Fornisce le seguenti funzionalità:
- Monitoraggio. Sentinel si assicura che le istanze master/slave funzionino correttamente in Redis.
- Notifiche. Avvisi Sentinel Gli amministratori di sistema se si verificano errori relativi all’istanza in Redis.
- Failover automatico. Se l’istanza di Redis Master non funziona correttamente, Sentinel promuove una delle istanze di schiavi di un maestro e riconfigura il resto per lavorare con la nuova istanza principale. Creatio è anche avvisato sul nuovo indirizzo di connessione Redis.
Attenzione. Creatio non supporta i cluster Redis nella versione 7.17.4 e prima.
Redis Sentinel è un sistema distribuito progettato per eseguire più istanze che collaborano insieme. Questo approccio presenta i seguenti vantaggi:
- L’errore è registrato solo se più istanze sentinella (che formano un quorum) concordano sul fatto che l’istanza principale non è disponibile in Redis. Questo viene fatto per ridurre il numero di falsi avvisi.
- Il meccanismo Sentinel sarà ancora disponibile anche se più istanze di sentinella non rispondono o non funzionano del tutto. Questo viene fatto per aumentare la tolleranza agli errori.
Notevoli dettagli Sentinel
- Almeno tre istanze di Sentinel sono richieste per una distribuzione solida. Queste istanze dovrebbero essere inserite in computer o macchine virtuali che si ritiene falliscano in modo indipendente, io. e., I guasti registrati da queste istanze sentinella dovrebbero essere causati da diverse fonti. Ad esempio, i computer si trovano in diverse zone di rete.
- A causa della replica asincrona, il sistema distribuito (Sentinel + Redis) non garantisce che tutti i dati verranno salvati se si verifica un errore.
- La tolleranza agli errori della configurazione deve essere regolarmente monitorata e ulteriormente confermata attraverso test che simulano guasti.
- La rimapping di Docker Port crea alcuni problemi con i processi Sentinel (vedere il blocco Sentinel, Docker, NAT e possibili problemi della documentazione Sentinel).
Requisiti minimi di tolleranza ai guasti per Redis Sentinel
- M1, M2 sono istanze di Redis Master.
- R1, R2, R3 sono istanze di slave Redis.
- S1, S2, S3 sono istanze Sentinel.
- C1 è l’applicazione Creatio.
- [M2] è promossa istanza (E. G., Dallo schiavo al padrone).
Si consiglia di utilizzare una configurazione con almeno tre istanze Redis e Sentinel (vedere l’esempio 2: configurazione di base con tre caselle blocco della documentazione Sentinel). Questa configurazione si basa su tre nodi (computer o macchine virtuali), ciascuno contenente istanze in esecuzione di Redis e Sentinel (Fig. 1). Due istanze Sentinel (S2 e S3) formano un quorum (il numero di istanze richieste per garantire la tolleranza agli errori dell’istanza principale di Master).
Fico. 1 La configurazione di tre nodi: quorum = 2
Durante il funzionamento regolare, l’applicazione client Creatio scrive i suoi dati in un’istanza principale (M1). Questi dati vengono quindi replicati in modo asincrono alle istanze di slave (R2 e R3).
Se l’istanza di Redis Master (M1) diventa non disponibile, le istanze Sentinel (S1 e S2) considerano un fallimento e avvia il processo di failover. Una delle istanze di slave Redis (R2 o R3) è promossa al master, consentendo all’applicazione di usarlo anziché dell’istanza principale precedente.
Attenzione. Esiste il rischio di perdere record in qualsiasi configurazione Sentinel, che utilizza la replica dei dati asincrona. Ciò si verifica se i dati non sono stati scritti sull’istanza di slave, promossi a un maestro.
Nota. Altre possibili configurazioni tolleranti ai guasti sono descritte nella documentazione Sentinel .
Problemi di separazione della rete
Se la connessione di rete è persa, esiste il rischio che Creatio continui a funzionare con la vecchia istanza di Redis Master (M1), mentre è già stata assegnata la nuova istanza Master ([M2]) (Fig. 2).
Fico. 2 separazione di rete
Ciò è facilmente evitato consentendo l’opzione di interrompere la scrittura di dati nel caso in cui l’istanza principale rilevi che il numero di istanze di slave è diminuito. Per fare ciò, imposta i seguenti valori in Redis.File di configurazione di configurazione dell’istanza di Redis Master:
Min-slave-to-write 1 min-slaves-max-lag 10
Di conseguenza, se l’istanza di Redis Master (M1) non sarà in grado di trasferire i dati ad almeno un’istanza di slave, smetterà di ricevere dati in 10 secondi dopo il primo tentativo. Una volta che il sistema viene recuperato da istanze Sentinel che formano un quorum (S2 e S3), l’applicazione Creatio (C1) verrà riconfigurata per lavorare con il nuovo Master -Instance (M2).
Attenzione. Se la rete viene ripristinata, l’istanza principale non sarà in grado di continuare automaticamente l’operazione dopo l’interruzione. Se anche la restante istanza di slave Redis (R3) diventa non disponibile, il sistema smetterà di funzionare del tutto.
Requisiti di sistema
Redis è un database in memoria, pertanto la capacità della RAM e il tasso di prestazioni sono i requisiti principali per il suo funzionamento corretto. Poiché Redis è un’applicazione singola che utilizza un singolo core del processore, è necessario un singolo nodo (computer o macchina virtuale) con un processore a doppio core. Le istanze Sentinel richiedono relativamente poche risorse e possono essere eseguite sullo stesso nodo di Redis.
Si consiglia di distribuire Redis e Sentinel sul sistema operativo Linux.
La tabella seguente mostra i requisiti di sistema consigliati per un singolo nodo (computer o macchina virtuale), a seconda del numero di utenti Creatio.
Il cluster Redis ha bisogno di Sentinel?
Об этой сттце
Ыы зарегистрировали подозритеstituire. С помощю ээй ст р ы ыы сможем о imperceде quello. Почему ээо мо л поззти?
Эта страница отображается в тех с лччч, когда автоматическиtal систе quisi которые наршают условия иполззования. Страница перестан scegliere. До этого момента для иполззования сжж google необходимо пхоходить поверку по по по по по.
” ылку запросов. Если ы и ипоеете общий доступ в интернет, проmma. Обратитесь к с ое системому администратору. Подробнеi.
Проверка по слову может также появляться, если вы вводите сложные запросы, обычно распространяемые автоматизированными системами, или же вводите запросы очень часто.