Heim  >  Artikel  >  Datenbank  >  Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren

Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren

WBOY
WBOYnach vorne
2022-03-16 17:44:582235Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über Redis. Er stellt hauptsächlich Fragen im Zusammenhang mit dem Sentinel-Modus vor, einschließlich des Konzepts von Sentinels, der Rolle von Sentinels, der Aktivierung von Sentinels, des Prinzips von Sentinels usw. Ich hoffe, dass er hilfreich sein wird alle.

Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren

Empfohlenes Lernen: Redis-Tutorial

Sentinel-Modus

1. Sentinel-Konzept

  • Wenn in einer Master-Multi-Slave-Struktur der Master ausgefallen ist, müssen Sie aus mehreren Slaves auswählen Um einen neuen Master zu erstellen und eine solche Funktion auszuführen, müssen Sie den Sentinel-Mechanismus von Redis verwenden. Sentinel (Sentinel) ist ein verteiltes System, das zur Überwachung jedes Servers in der Master-Slave-Struktur verwendet wird. Überwachung , wenn ein Fehler auftritt, wählen Sie

    einen neuen Master über den
  • Abstimmungsmechanismus
  • aus und verbinden Sie alle Slaves mit dem neuen Master, wie in der Abbildung unten gezeigt:

    2. Sentinel-Rolle

    Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysierenÜberwachung
  • : Master und Slave überwachen

Kontinuierlich prüfen, ob Master und Slave normal laufenMaster-Überlebenserkennung, Master- und Slave-Betriebsstatuserkennung

    • Benachrichtigung
    • (Erinnerung): Wenn es ein Problem mit dem gibt überwachter Server, Benachrichtigungen an andere Sentinels und Redis-Server senden
    Failover
  • : Trennen Sie den ausgefallenen Master vom Slave, wählen Sie einen Slave als Master aus, verbinden Sie andere Slaves mit dem neuen Master und informieren Sie den Client über den neuen Server Adresse

  • Hinweis:
  • Sentinel ist auch ein Redis-Server, der nur Überwachungsdienste und keine Datenverwaltungsdienste bereitstellt; normalerweise ist die Anzahl der Sentinels als ungerade Zahl konfiguriert (praktisch für Abstimmungen)

    3. Sentinels aktivieren

Ändern Sie die Konfigurationsdatei von Sentinel. Die Konfigurationsdatei befindet sich im Redis-Verzeichnis, wie in der folgenden Abbildung dargestellt:

    Die Bedeutung einiger Konfigurationen ist in der folgenden Abbildung dargestellt :
  • sentinel.conf

    Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysierenSentinel startenLassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren
    redis-sentinel filename 
    #filename指的是配置文件名
    #每个哨兵都要配置自己的配置文件
  • Sentinel konfigurieren und starten. Nachdem der Hauptserver ausgefallen ist, führt er

    automatisch Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren Abstimmungen, Master-Slave-Umschaltung und andere Prozesse aus
  • 4. Sentinel-Prinzip
  • Sentinel durchläuft während des Master-Slave-Umschaltprozesses drei Phasen:

  • Überwachung

BenachrichtigungFailover

  • 4.1 Überwachung
  • wird verwendet, um die Statusinformationen jedes Knotens zu synchronisieren Dazu gehören Master, Slave und Sentry, also die Informationen aller Server im gesamten System.

Hauptsächlich abgeschlossene Funktionen:

Erhalten Sie den Status jedes Sentinels (ob online oder nicht): Der neu hinzugefügte Sentinel muss mit den vorhandenen Sentinels im System interagieren.

Erhalten Sie den Status von der Master (über den Info-Befehl) Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren

  • Der erhaltene Inhalt ist wie folgt

    1. master属性
    	 runid
    	 role:master
    2. 各个slave在master中保存的基本信息
  • Erhalten Sie den Status aller Slaves (der Info-Befehl wird basierend auf den Slave-Informationen im Master an alle Slaves gesendet)
    • Der erhaltene Inhalt ist wie folgt
    slave属性
    	runid
    	role:slave
    	master_host、master_port
    	offset
    • Das spezifische Innenleben ist wie folgt:
    • Nachdem Sentinel 1 den Info-Befehl an den Master gesendet hat, wird die erstellte Verbindung zum Senden von Befehlen verwendet.
    • Nach dem Erstellen der cmd-Verbindung werden alle bisher erhaltenen Informationen gespeichert Sentinel 1-Seite und auf der anderen Seite speichert der Master auch die darin enthaltenen Informationen
    • Dann sendet Sentinel 1 den Infobefehl an den Slave basierend auf den vom Master erhaltenen Informationen über die Salbe, ruft die Salbeninformationen ab und reichert sie an An diesem Ende gespeicherte Informationen
    • Wenn ein neuer Sentinel 2 hinzugefügt wird, sendet Sentinel 2 einen Info-Befehl an den Master, um eine cmd-Verbindung herzustellen. Basierend auf den Informationen im Master kann er den zuvor vorhandenen Sentinel 1 abrufen und speichern die gewonnenen Informationen selbständig verarbeiten. Stellen Sie dann fest, ob Sentinel 1 online ist, und stellen Sie eine Verbindung mit Sentinel 1 her. Die beiden tauschen Informationen miteinander aus, und beide Parteien pingen weiterhin, um sicherzustellen, dass sie füreinander offen sind
    • Sentinel 2 erhält die Slave-Informationen von Master und dann vom Slave Erhalten Sie Informationen und bereichern Sie die von Ihnen gespeicherten Informationen
    • Beim Hinzufügen eines weiteren Sentinel 3 ähnelt es dem vorherigen Prozess. Schließlich bauten die drei Sentinels ein Beziehungsnetzwerk auf
    • Im Beziehungsnetzwerk werden die drei Dieser Arbeitsmodus wird als „Publish-Subscribe-Modus“ bezeichnet. 4.2 Benachrichtigung: In der Benachrichtigungsphase muss der Sentinel kontinuierlich die Informationen des Masters und des Slaves abrufen Übertragen Sie die erhaltenen Informationen zwischen den verschiedenen Sentinels.
    • Der spezifische Prozess ist wie folgt:

    Der Sentinel sendet den Befehl hello über die hergestellte cmd-Verbindung an den Master und den Slave, ruft deren Informationen ab und gibt sie dann im Beziehungsnetzwerk weiter: Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren

    4.3 Failover

    Trennen Sie den ausgefallenen Master vom Slave, wählen Sie einen Slave als Master aus, verbinden Sie andere Slaves mit dem neuen Master und teilen Sie dem Client die neue Serveradresse mit.

    Der spezifische Prozess ist wie folgt: hello 指令,得到他们的信息,然后在关系网中共享:

    Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren

    4.3 故障转移

    断开宕机的master与slave的连接,选取一个slave作为master,将其他slave连接新的master,并告知客户端新的服务器地址。

    具体的流程如下所述:

    • 哨兵1始终得不到master的回应,主观判断master宕机,标记 sdown(仅有一个哨兵认为master宕机)

    • 哨兵1在关系网中传递消息,向其他哨兵发送图中左上角的消息

    • 其他哨兵得到消息之后,全部向master发送消息,确定master是否宕机,他们也会将自己得到的结果发送给关系网中的其他哨兵,确定master宕机后,将标记改为 odown(所有哨兵探测之后,超过一半的哨兵认为master宕机)

      Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren
    • 当认定master宕机之后,此时需要选举新的master,由哪个哨兵完成这件事要通过哨兵之间的选举决定,具体过程如下所述:

      • 在选举的时候每个哨兵手里都有一票,每个哨兵都会发出一个指令,在内网里边告诉其他哨兵自己当选举人,比如说sentinel1和sentinel2发出这个选举指令,那么sentinel3接收到他们的申请之后,sentinel3就会把自己的一票投给其中一方,根据到达的先后顺序投票,获得票的那一方就会多一张选举票,按照这样的一种形式,最终会有一个选举结果,获得票数最多的哨兵会被获选
      • 在这个过程中有可能会存在失败的现象,比如第一轮没有选举成功,那就会接着进行第二轮第三轮直到完成选举
    • 当完成哨兵之间的选举之后,接下来就要由选举胜出的哨兵去slave中挑选一个,将其变成新的master,具体的流程如下所述:

      • 哨兵在服务器列表中挑选备选master的原则:先排除,后选择    
        • 不在线的OUT
        • 响应慢的OUT
        • 与原master断开时间久的OUT
        • 排除结束,开始进行选择
        • 优先级高的获选
        • offset较大的获选(比较大说明同步原来master的数据最多)
        • 若还没有选出,则最后根据runid选出
    • 选出新的master之后,哨兵发送指令给服务器:

      • 向新的master发送 slaveof no one 指令

      • 向其他slave发送 slaveof 新masterIP端口

    • Sentinel 1 erhielt nie eine Antwort vom Master und kam subjektiv zu dem Schluss, dass der Master außer Betrieb war, und markierte ihn als sdown (nur ein Sentinel glaubte das). der Master war ausgefallen)
    • Sentinel 1 übermittelt die Nachricht im Beziehungsnetzwerk und sendet die Nachricht in der oberen linken Ecke des Bildes an andere Sentinels

    Nachdem andere Sentinels die Nachricht erhalten haben, senden sie alle Nachrichten an den Der Master ermittelt, ob der Master ausgefallen ist, und die erhaltenen Ergebnisse werden an andere Sentinels im Beziehungsnetzwerk gesendet. Nachdem bestätigt wurde, dass der Master ausgefallen ist, wird die Markierung in odown geändert (schließlich). Sentinels erkennen, mehr als die Hälfte der Sentinels glauben, dass der Master ausgefallen ist „Lassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren“ width="90%"/>

    Wenn festgestellt wird, dass der Master ausgefallen ist, muss zu diesem Zeitpunkt ein neuer Master gewählt werden Die Wahl unter den Wächtern ist wie folgt:

    Während der Wahl hat jeder Wächter eine Anweisung, andere Wächter im Intranet als Wähler anzugeben Wahlanweisung. Nachdem sentinel3 seinen Antrag erhalten hat, wird die Abstimmung gemäß der „Ankunftsreihenfolge“ erfolgen, und die Partei, die die Stimme erhält, erhält dort eine weitere Wahlstimme Irgendwann wird es ein Wahlergebnis geben und der Wächter mit den meisten Stimmen wird gewählt.

      In diesem Prozess kann es zu Misserfolgen kommen. Wenn die Wahl beispielsweise im ersten Wahlgang nicht erfolgreich ist, werden der zweite und dritte Wahlgang fortgesetzt Die Wahl ist abgeschlossen
    1. Nachdem die Wahl unter den Wächtern abgeschlossen ist, wird der nächste Schritt sein: Der Wächter, der die Wahl gewinnt, wählt einen Sklaven aus und verwandelt ihn in einen neuen Herrn. Der spezifische Prozess ist wie folgt:
    2. Das Prinzip, nach dem der Sentinel einen alternativen Master in der Serverliste auswählt: Zuerst eliminieren, später auswählen
    OUTs, die nicht online sind.

    OUTs, die langsam reagieren wird ausgewählt (relativ groß) Dies bedeutet, dass der ursprüngliche Master die meisten synchronisierten Daten hat)

    Wenn er noch nicht ausgewählt wurde, wird er schließlich basierend auf der Runid ausgewählt 🎜🎜🎜🎜🎜🎜🎜Nach Auswahl des neuen Masters , sendet der Sentinel den Befehl an den Server: 🎜🎜🎜🎜An den neuen Master Sende den Befehl slaveof no one🎜🎜🎜🎜Sende den Befehl slaveof new masterIP port🎜🎜🎜 5. Zusammenfassung Problem, markiert abwechselnd subjektiv offline und objektiv offline. 🎜🎜Wählen Sie den verantwortlichen Wächter. 🎜 Bevorzugen Sie den neuen Master neuer Herr als Sklave🎜🎜🎜🎜Empfohlenes Lernen: 🎜Redis-Video-Tutorial🎜🎜
  • Das obige ist der detaillierte Inhalt vonLassen Sie uns gemeinsam den Redis-Sentry-Modus analysieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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