2015-06-30 13 views
52

Capisco redis sentinel è un modo di configurare HA (alta disponibilità) tra più istanze redis. Come vedo, c'è un'istanza redis che serve attivamente le richieste client in un dato momento. Ci sono altri due server in attesa (in attesa che si verifichi un errore, quindi uno di essi può essere nuovamente in azione).Redis sentinel vs clustering

  • È uno spreco di risorse?
  • Esiste un modo migliore di utilizzare a pieno le risorse disponibili?
  • Redis è in cluster un'alternativa alla sentinella Redis?

ho già guardato fino Redis documentazione per sentinel e clustering, qualcuno può avere l'esperienza spiegare per favore.

Master slave configuration in Redis sentinel - before failure

Master fails and slave kicks in to action

UPDATE

OK. Nel mio reale scenario di implementazione ho due server dedicati per redis. Ho un altro server in cui è in esecuzione il mio server Jboss. L'applicazione in esecuzione in Jboss è configurata per connettersi a redis master server (M).

scenario di failover

Idealmente, penso che quando cache server master non riesce (o processo Redis va giù o guasto alla macchina) l'applicazione in Jboss ha bisogno di connettersi al server di cache Slave. Come posso configurare i server redis per ottenere questo risultato?

+--------+   +--------+ 
| Master |---------| Slave | 
|   |   |  | 
+--------+   +--------+ 

Configuration: quorum = 1 
+1

Questo potrebbe anche aiutare - http: // fnordig.de/2015/06/01/redis-sentinel-and-redis-cluster/ –

risposta

52

Innanzitutto, parliamo sentinella.

Sentinel gestisce il failover, non configura Redis per HA. È una distinzione importante. In secondo luogo, il diagramma che hai postato è in realtà una configurazione errata: non vuoi eseguire Sentinel sullo stesso nodo dei nodi Redis che sta gestendo. Quando perdi quell'host, perdi entrambi.

Per "È uno spreco di risorse?" dipende dal tuo caso d'uso. Non hai bisogno di tre nodi Redis in quella configurazione, ne hai solo bisogno due. Tre aumenta la ridondanza, ma non è richiesta. Se hai bisogno della ridondanza aggiunta, allora non è uno spreco di risorse. Se non hai bisogno di ridondanza, devi solo eseguire una singola istanza di Redis e chiamarla correttamente, poiché eseguire di più sarebbe "sprecato".

Un altro motivo per l'esecuzione di due slave è la divisione delle letture. Di nuovo, se ne hai bisogno, non sarebbe uno spreco.

Per quanto riguarda "C'è un modo migliore di utilizzare a pieno le risorse disponibili?" non possiamo rispondere perché dipende troppo dal tuo scenario e codice specifico. Ciò detto se la quantità di dati da memorizzare è "piccola" e il tasso di comando non è eccessivamente alto, quindi ricorda che non è necessario dedicare un host a Redis.

Ora per "Il clustering Redis è un'alternativa a Redis sentinel?". Dipende davvero interamente dal tuo caso d'uso. Redis Cluster non è una soluzione HA: è una soluzione di scrittore multiplo/più grande di ram. Se il tuo obiettivo è solo HA, allora probabilmente non sarà adatto a te.Redis Cluster è dotato di limitazioni, in particolare per quanto riguarda le operazioni con più tasti, quindi non è necessariamente un'operazione di "uso semplice cluster".

Se pensate che avere tre host che eseguono Redis (e tre sentinelle in esecuzione) sia dispendioso, probabilmente Cluster sarà ancora più importante in quanto richiede più risorse.

Le domande che hai posto sono probabilmente troppo ampie e basate su opinioni per sopravvivere come scritto. Se hai un caso specifico/problema che stai risolvendo, per favore aggiorna con quello in modo che possiamo fornire assistenza e informazioni specifiche.

Aggiornamento per le specifiche:

per una corretta gestione di failover nello scenario Vorrei andare con 3 sentinelle, uno in esecuzione sul server JBoss. Se hai 3 nodi JBoss, vai con uno su ciascuno. Avrei un pod Redis (master + slave) su nodi separati e lasciare che il sentinel gestisca il failover.

Da qui si tratta di collegare JBoss/Jedis per utilizzare Sentinel per la gestione delle informazioni e della connessione. Dato che non uso quelli a cui viene fatta una ricerca rapida, Jedis ha il supporto per farlo, devi solo configurarlo correttamente. Alcuni esempi che ho trovato sono a Looking for an example of Jedis with Sentinel e https://github.com/xetorthio/jedis/issues/725 che parlano di JedisSentinelPool come percorso per l'utilizzo di un pool.

Quando Sentinel esegue un failover i client verranno disconnessi e Jedis (dovrebbe?) Gestirà la riconnessione chiedendo ai Sentinel chi è il master corrente.

+0

da cui provengono le immagini. http://www.symantec.com/connect/blogs/configuring-redis-high- availability – ravindrab

+1

Ciao @ The-Real-Bill, potresti approfondire "Sentinel gestisce il failover, non configura Redis per HA. " Sul documento ufficiale (http://redis.io/topics/sentinel), si dice "Redis Sentinel fornisce alta disponibilità per Redis". –

+0

HA Redis richiede diversi pezzi per essere HA. Sentinel gestisce solo un pezzo: il failover. Non imposta la replica e non fornisce e endpoint HA. Fornisce l'individuazione dei servizi in modo che un cliente possa sapere dove parlare per raggiungere il master. Questo non configura Redis per HA. –

24

La raccomandazione, dappertutto, è iniziare con un numero dispari di istanze, non utilizzando due o un multiplo di due. Questo è stato corretto, ma consente di correggere alcuni altri punti.

In primo luogo, dire che Sentinel fornisce il failover senza HA è falso. Quando si esegue il failover, si dispone di HA con il vantaggio aggiuntivo dello stato dell'applicazione che viene replicato. La distinzione è che puoi avere HA in un sistema senza replica (è HA ma non è tollerante ai guasti).

In secondo luogo, l'esecuzione di una sentinella sulla stessa macchina dell'istanza di destinazione redis non è una "configurazione errata": se si perde la sentinella, o l'istanza di Redis o l'intera macchina, i risultati sono gli stessi. Questo è probabilmente il motivo per cui ogni esempio di tali configurazioni mostra entrambi in esecuzione sulla stessa macchina.

+5

In realtà sembra che ci sia un bug in cui Sentinel fallirà l'avvio di un'elezione nell'installazione "sentinel-on-the-instance", e l'ho vista molte volte qui, sulla ML e nella consulenza individuale. Lo spostamento delle sentinelle dal server Redis lo ha risolto ogni volta. Quindi, sì, farlo in questo modo è una cattiva installazione in quanto ti mancherà nel momento stesso in cui ne hai bisogno. L'esempio lo mostra in questo modo perché non sono scritti da persone con una vasta esperienza operativa ed è più facile. –

14

Questa non è una risposta diretta alla tua domanda, ma pensa, è un'informazione utile per i neofiti di Redis, come me. Anche questa domanda appare come il primo link in google durante la ricerca di "Redis cluster vs sentinel".

Redis Sentinel è il nome della soluzione Redis elevata disponibilità ... Non ha nulla a che fare con Redis Cluster ed è destinato ad essere utilizzato da persone che non hanno bisogno Redis Cluster, ma semplicemente un modo per eseguire il failover automatico quando un'istanza master non funziona correttamente .

tratto dal Redis Sentinel design draft 1.3

Non è obviuos quando si è nuovi a Redis e l'attuazione di soluzione di failover. Le documentazioni ufficiali su sentinel e clustering non si confrontano tra loro, quindi è difficile scegliere il modo giusto senza leggere tonnellate di documenti.