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.
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:
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.
Failover Es ist die Hauptarbeit von Sentinel Die Logik dahinter ist ebenfalls sehr kompliziert. Die spezifischen Implementierungslogiken finden Sie in den folgenden drei Punkten:
2. Wählen Sie Sentinel-Knoten aus, um die Übertragungsaufgabe abzuschließen.
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# 🎜 🎜#
#🎜 🎜## 🎜🎜#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(3) Verwandeln Sie den alten Master-Server in einen Slave-Server
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!