Heim >Datenbank >Redis >Was ist das Prinzip des Sentinel-Failovers in Redis?

Was ist das Prinzip des Sentinel-Failovers in Redis?

王林
王林nach vorne
2023-05-27 10:55:171322Durchsuche

Was ist Sentinel?

Sentinel ist eine Hochverfügbarkeitslösung für Redis. Die zuvor erwähnte Master-Slave-Replikation erfordert jedoch einen manuellen Eingriff, um das Failover abzuschließen Bei diesem Problem kann Sentinel im Falle einer Master-Slave-Replikation den Fehler automatisch erkennen und das Failover abschließen, um eine echte Redis-Hochverfügbarkeit zu erreichen. Im Sentinel-Cluster überwacht Sentinel den Status aller Redis-Server und anderer Sentinel-Knoten, erkennt Fehler rechtzeitig und schließt die Übertragung ab und stellt so die hohe Verfügbarkeit von Redis sicher.

Aufbau eines Sentinel-Clusters

Obwohl Sentinel im Wesentlichen ein Redis-Dienst ist, bietet es andere Funktionen als gewöhnliche Redis-Dienste. Sentinel ist eine verteilte Architektur, denn wenn Sie die Hochverfügbarkeit von Redis sicherstellen möchten, müssen Sie zunächst Ihre eigene Hochverfügbarkeit sicherstellen. Wenn wir also einen Sentinel erstellen müssen, müssen wir mindestens drei Instanzen bereitstellen, vorzugsweise eine ungerade Zahl , da bei einem nachfolgenden Failover eine Abstimmung erforderlich ist.

Wir können die Sentinel-Konfigurationsdatei unter dem Redis-GitHub-Projekt herunterladen. Sie können sie natürlich auch als Sentinel-Konfigurationsdatei verwenden . Fügen Sie einfach Sentinel-bezogene Konfigurationen hinzu.

Es gibt nicht viele Konfigurationselemente im Zusammenhang mit Sentinel. Es gibt hauptsächlich die folgenden Konfigurationselemente:

// 端口号,默认是 redis 实例+20000,所以我们沿用这个规则就好了 port 26379  // 是否守护进程运行 daemonize yes // 日志存放的位置,这个非常重要,通过日志可以查看故障转移的过程 logfile "26379.log"  // 监视一个名为 mymaster(自定义) 的 redis 主服务器, 这个主服务器的 IP 地址为 127.0.0.1 , 端口号为 6379 , // 最后面的 2 代表着至少有两个哨兵认为主服务器出现故障才会进行故障转移,否则认定主服务未失效 sentinel monitor mymaster 127.0.0.1 6379 2  // 哨兵判断服务器失效的响应时间,超过这个时间未接收到服务器的回应,就认为该服务器失效了 sentinel down-after-milliseconds mymaster 30000  // 完成故障转移之后,最多多少个从服务器可以同时发起数据复制,数字越小,说明完成全部从服务数据复制的时间越长 // 数字越大,对主服务器的压力就变大了 sentinel parallel-syncs mymaster 1  // 故障转移超时时间 sentinel failover-timeout mymaster 180000

Für jede Sentinel-Instanzkonfiguration sind die anderen Konfigurationselemente mit Ausnahme des unterschiedlichen Ports und der Protokolldatei gleich. Nachdem wir die Konfiguration geändert haben, können wir den Befehl ./redis-sentinel sentinel.conf verwenden, um den Sentinel zu starten. Da der Sentinel auch eine Redis-Instanz ist, können wir den Befehl ./redis-sentinel verwenden. cli -p 26379 info sentinel-Befehl, um es anzuzeigen. Die aktuellen Sentinel-Informationen sind in der folgenden Abbildung dargestellt:

Was ist das Prinzip des Sentinel-Failovers in Redis?

Sentinel-Informationen

Frage: So erkennen Sie den Slave-Server und andere Sentinel, wenn nur der Master-Server konfiguriert ist

Um den Slave-Server zu erkennen, kann Sentinel den Master-Server auffordern, Informationen vom Server zu erhalten. Die Erkennung anderer Sentinel-Knoten erfolgt über die Veröffentlichungs- und Abonnementfunktionen und das Senden von Informationen an den Kanal sentinel:hello Dies sind hauptsächlich die folgenden zwei Schritte:

1. Alle 2 Sekunden wird eine Nachricht an den sentinel:hello-Kanal aller Master-Dienste und Slave-Server gesendet. Die Nachricht enthält die IP-Adresse und Portnummer von Sentinel und laufende ID (Runid)

2. Jeder Sentinel ist ein abonnierter Sentinel:Hallo-Kanal aller von ihm überwachten Master-Server und Slave-Server und sucht nach Sentinels, die zuvor noch nicht erschienen sind (auf der Suche nach unbekannten Sentinels). Wenn ein Sentinel einen neuen Sentinel entdeckt, fügt er den neuen Sentinel zu einer Liste hinzu, die alle anderen dem Sentinel bekannten Sentinel enthält, die denselben Masterserver überwachen.

Sentinel-Failover-Prinzip

Failover Es ist die Hauptarbeit von Sentinel Die Logik dahinter ist ebenfalls sehr kompliziert. Die spezifischen Implementierungslogiken finden Sie in den folgenden drei Punkten:

1. Der Sentinel-Knoten sendet den Ping-Befehl an den Master-Knoten, Slave-Knoten und andere Sentinel-Knoten alle 1 Sekunde zur Heartbeat-Erkennung, um den Status des Servers zu ermitteln.

Der Knoten antwortet auch entsprechend auf Sentinel. Unter diesen Antworten sind die folgenden drei Antworten gültige Antworten:

Return+PONG
  • Return-LOADING
  • Return-MASTERDOWN
  • Wenn a Wenn der Knoten innerhalb des in der Sentinel-Konfigurationsdatei festgelegten Werts nicht einmal eine gültige Antwort erhalten hat, markiert Sentinel den Server als offline, d. h. als offline. Nur dieser Wächter geht davon aus, dass der Server offline ist.
Wenn der Server, der subjektiv offline ist, der Hauptserver ist, fragt der Sentinel andere Sentinels, die den Hauptserver ebenfalls überwachen, um zu bestätigen, ob der Hauptserver wirklich offline ist, um zu sehen, ob sie auch denken, dass der Hauptserver offline ist Offline-Status: Wenn genügend Sentinels glauben, dass der Hauptserver offline ist, beurteilt der Sentinel den Hauptserver als objektiv offline, also tatsächlich offline, und führt einen Failover-Vorgang durch.

2. Wählen Sie Sentinel-Knoten aus, um die Übertragungsaufgabe abzuschließen.

Failover wird nicht von allen Sentinel-Knoten abgeschlossen, sondern ein Sentinel-Knoten wird als Leiter zum Abschließen des Failovers ausgewählt. Wenn also der Hauptserver als Zielserver markiert ist, Die Wächter wählen über den Raft-Algorithmus einen Anführer, der die Failover-Arbeiten abschließt. Die allgemeinen Regeln und Methoden lauten wie folgt: Redis führt die Wahl des Sentinel-Anführers durch: Alle Online-Sentinels können als Anführer gewählt werden, was bedeutet, dass jeder Sentinel die Möglichkeit hat, ein Anführer zu werden
  • Wenn Sentinel den Master-Server als subjektiv offline markiert, sendet er den Befehl „Sentinel is-master-down-by-addr“ an andere Sentinel-Knoten mit der Aufforderung, sich selbst als Anführer festzulegen# 🎜 🎜#

  • Der Sentinel-Knoten, der den Befehl empfängt, übernimmt die „Wer zuerst kommt, mahlt zuerst“-Regel Wenn der Sentinel-Knoten feststellt, dass er mehr als die Hälfte der Stimmen hat, wird er zum Leader

    #🎜 🎜#
  • Wenn der Sentinel-Anführer nicht innerhalb der angegebenen Zeit gewählt wird, wird er nach einer gewissen Zeit erneut gewählt, bis der Sentinel-Anführer gewählt ist.
  • 3. Wählen Sie einen neuen Master-Server, um den Failover abzuschließen Die verbleibenden Failover-Arbeiten umfassen die folgenden drei Hauptschritte:

  • (1) Wählen Sie den neuen Hauptserver aus.

    wurde unter allen Slave-Servern heruntergeladen Wählen Sie für den Master-Server in der Zeile einen Slave-Server aus und konvertieren Sie ihn in den Master-Server. Die Regeln für die Auswahl des neuen Master-Servers lauten wie folgt:

    In Among Die Slave-Server unter dem ausgefallenen Master-Server, die Slave-Server, die als subjektiv offline oder getrennt markiert sind oder deren letzte Antwort auf den PING-Befehl länger als fünf Sekunden dauert, werden eliminiert

    #🎜 🎜## 🎜🎜#Unter den Slave-Servern unter dem ausgefallenen Master-Server werden diejenigen Slave-Server eliminiert, die länger als das Zehnfache der durch die Down-After-Option angegebenen Zeit vom ausgefallenen Master-Server getrennt sind#🎜🎜 ## 🎜🎜#

    Wählen Sie unter den verbleibenden Slave-Servern nach den beiden oben genannten Eliminierungsrunden den Slave-Server mit dem größten Replikationsoffset als neuen Master-Server aus, oder den Replikationsoffset des Slave-Servers, wenn der Replikationsoffset nicht verfügbar ist gleich ist, dann wird der Slave-Server mit der kleinsten laufenden ID zum neuen Master-Server

    • für den ausgewählten Slave-Server Führen Sie den Befehl „slaveof no one“ aus, um ihn zum Master zu machen Knoten.

    • (2) Ändern Sie die Replikationsziele anderer Slave-Server
    • Wenn der neue Master-Server erscheint, muss der Sentinel-Anführer den nächsten Schritt tun Schritt Das Einzige, was Sie tun müssen, besteht darin, anderen Slave-Servern die Replikation des neuen Master-Servers zu ermöglichen, indem Sie den Befehl „slaveof new_master port“ an andere Slave-Server senden. Die Replikationsregeln beziehen sich auf den Parameter „parallel-syncs“ der Konfigurationsdatei
    • (3) Verwandeln Sie den alten Master-Server in einen Slave-Server

    Das Letzte, was Sie im Failover-Vorgang tun müssen, besteht darin, den Offline-Master-Server als Slave-Server festzulegen Erstellen Sie einen neuen Master-Dienst, behalten Sie ihn im Auge und weisen Sie ihn an, den neuen Master-Knoten nach der Wiederherstellung zu replizieren.

    Das obige ist der detaillierte Inhalt vonWas ist das Prinzip des Sentinel-Failovers in Redis?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen