2015-10-08 11 views
8

Abbiamo una configurazione redis con due server redis. Abbiamo anche 3 sentinelle per monitorare le due istanze e avviare un failover quando necessario.Come eseguire un FLUSHALL redis senza avviare un failover sentinella?

Attualmente abbiamo un processo in cui periodicamente dobbiamo eseguire un FLUSHALL sul server redis. Questa è un'operazione di blocco che richiede più tempo del tempo che abbiamo assegnato per il timeout delle sentinelle. In altre parole, abbiamo la nostra configurazione di Sentinel con:

sentinel down-after-milliseconds OurMasterName 5000

e facendo un flushall Redis-cli sul server prende> 5000 millisecondi, per cui le sentinelle avviare un failover.

Riconosciamo che fare un FLUSHALL non è grande e sappiamo anche che potremmo aumentare il down-after-milliseconds ma ai fini di questa domanda assumiamo che nessuna di queste opzioni sia.

La domanda è: come possiamo fare un FLUSHALL (o un'operazione equivalente) SENZA avere i nostri sentinel avviare un failover dovuto al blocco FLUSHALL per oltre 5000 millisecondi? Qualcuno ha incontrato e risolto questo problema?

+0

se ci si trova su una piattaforma cloud, è sufficiente creare una nuova istanza: avere le immagini della macchina pronte o con alcuni strumenti di devops –

+0

@LiviuCostea Penso che questa sia probabilmente l'opzione giusta. Se puoi fare riferimento a qualcosa che descrive un po 'più in dettaglio come potrebbe funzionare, sarei felice di accettare la tua risposta. – jakejgordon

+0

Se si utilizza qualcosa come AWS o Azure di quanto si dispone di API per la creazione di un nuovo cluster Redis. Avvia, carica con i dati e, una volta pronto, modifica semplicemente il DNS, sempre con la chiamata API: tutti questi elementi possono essere gestiti da alcune parti della tua applicazione. Ma sul posto le cose possono diventare più complesse perché richiederà un po 'di automazione con ansible/chef/burattino. –

risposta

1

È possibile creare nuove istanze: se si utilizza qualcosa come AWS o Azure di quanto si dispone di API per la creazione di un nuovo cluster Redis. Avvia, carica con i dati e, una volta pronto, modifica semplicemente il DNS, sempre con la chiamata API: tutti questi elementi possono essere gestiti da alcune parti della tua applicazione. Ma sul posto le cose possono diventare più complesse perché richiederà un po 'di automazione con ansible/chef/burattino.

0

La prossima opzione migliore che è attualmente necessario è quella di eliminare le chiavi in ​​lotti per ridurre la quantità di lavoro in una sola volta. Puoi creare un elenco, supponendo che non ne possiedi uno, usando scan Quindi elimina in qualsiasi dimensione del batch lavori per te.

Modifica: come non è interessato a conservare i dati, disabilitare la persistenza, eliminare il file RDB, quindi riavviare semplicemente l'istanza. In questo modo è necessario aggiornare la sentinella come faresti se si adottassero nuovi host.

Per curiosità, se hai intenzione di fare il rossore tutto il tempo e non ti importa dei dati mentre lo pulirai, perché preoccuparti di sentinella?

+0

Penso che il problema qui non sia quello di garantire la coerenza. In questo caso, probabilmente, è meglio aumentare semplicemente il timeout a> 5000 ms (cosa che abbiamo effettivamente fatto - e risolvere temporaneamente il nostro problema - ma non è davvero una soluzione accettabile). – jakejgordon

Problemi correlati