Wie kann ein Redis FLUSHALL ausgeführt werden, ohne dass ein Sentinel-Failover ausgelöst wird?

8

Wir haben eine Redis-Konfiguration mit zwei Redis-Servern. Wir haben auch 3 Sentinels, um die beiden Instanzen zu überwachen und bei Bedarf ein Failover zu initiieren.

Wir haben derzeit einen Prozess, bei dem wir regelmäßig einen FLUSHALL auf dem Redis-Server durchführen müssen. Dies ist ein Blockiervorgang, der länger dauert als die Zeit, die wir den Sentinels für die Zeitüberschreitung zugewiesen haben. Mit anderen Worten, wir haben unsere Sentinel-Konfiguration mit:

sentinel down-after-milliseconds OurMasterName 5000

und einen redis-cli FLUSHALL auf dem Server ausführen, nimmt & gt; 5000 Millisekunden, so dass die Sentinels einen Failover auslösen.

Wir erkennen an, dass das Ausführen einer FLUSHALL nicht großartig ist und wir wissen auch, dass wir die Abwärts-nach-Millisekunden erhöhen könnten, aber für die Zwecke dieser Frage annehmen, dass keine dieser Optionen ist.

Die Frage ist: Wie können wir einen FLUSHALL (oder eine äquivalente Operation) ausführen, OHNE dass unsere Sentinels einen Failover auslösen, weil die FLUSHALL-Blockierung länger als 5000 Millisekunden dauert? Hat jemand dieses Problem gefunden und gelöst?

    
jakejgordon 08.10.2015, 18:38
quelle

2 Antworten

1

Sie können einfach neue Instanzen erstellen: Wenn Sie etwas wie AWS oder Azure verwenden, haben Sie eine API zum Erstellen eines neuen Redis-Clusters. Starten Sie es, laden Sie es mit Daten und sobald Sie fertig sind, ändern Sie einfach das DNS, wieder mit API-Aufruf -so alle diese können von einem Teil Ihrer Anwendung behandelt werden. Aber auf dem Gelände können Dinge komplexer werden, weil es eine gewisse Automatisierung mit ansible / chef / puppet erfordert.

    
Liviu Costea 23.10.2015, 13:18
quelle
0

Die nächstbeste Option, die Sie momentan haben müssen, ist das Löschen von Schlüsseln in Stapeln, um den Arbeitsaufwand auf einmal zu reduzieren. Sie können eine Liste erstellen, vorausgesetzt, Sie haben keine. Verwenden Sie scan . Löschen Sie dann in jeder Stapelgröße, die für Sie arbeitet.

Bearbeiten: Da Sie nicht daran interessiert sind, Daten beizubehalten, deaktivieren Sie die Persistenz, löschen Sie die RDB-Datei und starten Sie die Instanz einfach neu. Auf diese Weise müssen Sie Sentinel nicht wie bei der Bereitstellung neuer Hosts aktualisieren.

Aus Neugier, wenn Sie nur die ganze Zeit spülen werden und sich nicht um die Daten kümmern, wie Sie es abwischen werden, warum sollten Sie sich mit Sentinel beschäftigen?

    
The Real Bill 09.10.2015 17:06
quelle

Tags und Links