Heim >Datenbank >Redis >Erfahren Sie in einem Artikel mehr über den Sentry-Modus in Redis

Erfahren Sie in einem Artikel mehr über den Sentry-Modus in Redis

青灯夜游
青灯夜游nach vorne
2022-01-04 10:10:452265Durchsuche

Dieser Artikel stellt Ihnen den Sentry-Modus in Redis vor. Ich hoffe, er wird Ihnen hilfreich sein!

Erfahren Sie in einem Artikel mehr über den Sentry-Modus in Redis

Redis-Master-Slave-Modus Sobald der Master-Knoten ausfällt, kann der Slave-Knoten zum Master-Knoten aktualisiert werden. Dies ist im Allgemeinen nicht möglich . Daher stellt Redis den Redis Sentinel 哨兵机制 来解决这个问题。【相关推荐:Redis视频教程

主从复制的问题

Erfahren Sie in einem Artikel mehr über den Sentry-Modus in Redis

1. 主从复制的好处

  • 主节点发生故障,从节点会升级为主节点
  • 扩展主节点的读能力,分担主节点压力

2. 存在的问题

  • 从节点升级主节点的过程需要人工干预,同时要更改客户端Redis服务地址
  • 主节点写能力、存储能力受到单机限制
  • 性能的影响:Redis 复制中断 后从节点会发起 psync。此时如果同步不成功,则会进行全量同步,主库执行全量备份的同时,可能会造成毫秒或秒级的 卡顿

Sentinel 实现原理

1. 一些概念

主要功能

  • 监控 : 不断检查主从服务器是否正常运行
  • 通知 : 一旦某个节点发生故障,会通知其他节点
  • 自动故障转移 : 当主节点不能正常工作会自动进行故障转移,从其中一个从节点升级为主节点
  • 配置提供者 : 客户端不是配置单个节点,而是 Sentinel 节点集合

主观下线和客观下线

一般来说,每个 Sentinel 节点会不断的 对其他 Sentinel 节点和 Redis 节点发送 PING,通过是否回复来确认是否在线

  • 主观下线 : 适用于所有主节点和从节点,如果在 down-after-milliseconds 毫秒内,Sentinel 没有收到目标节点的有效回复,则会判定该节点为主观下线。
  • 客观下线 : 只使用于主节点,如果主节点发生故障,Sentinel 节点会通过 sentinel is-master-down-by-addr 命令,向其它 Sentinel 节点询问对该节点的状态判断。如果超过 <quorum></quorum> 个数的节点判定主节点不可达,则该 SentinelSentinel-Mechanismus
  • Redis Sentinel bereit, um dieses Problem zu lösen. [Verwandte Empfehlungen: Redis-Video-Tutorial]

Probleme mit der Master-Slave-Replikation

Erfahren Sie in einem Artikel mehr über den Sentry-Modus in Redis

1. Vorteile der Master-Slave-Replikation

  • Wenn der Master-Knoten ausfällt, wird der Slave-Knoten ausfallen auf den Masterknoten aktualisiert werden Erfahren Sie in einem Artikel mehr über den Sentry-Modus in Redis
  • Erweitern Sie die Lesekapazität des Masterknotens und teilen Sie den Druck des Masterknotens🎜

    🎜2. Vorhandene Probleme🎜🎜
    • Der Prozess des Upgrades des Master-Knotens vom Slave-Knoten erfordert einen manuellen Eingriff und gleichzeitig muss die Redis-Dienstadresse des Clients geändert werden🎜
    • Die Schreibfähigkeit und Speicherkapazität des Master-Knotens sind begrenzt durch eine einzelne Maschine🎜
    • Auswirkungen auf die Leistung: Nachdem die Redis-Replikation unterbrochen wurde, initiiert der Slave-Knoten psync . Wenn die Synchronisierung zu diesem Zeitpunkt fehlschlägt, wird eine vollständige Synchronisierung durchgeführt, während die Hauptdatenbank eine vollständige Sicherung durchführt. Dies kann zu einer Verzögerung von Millisekunden oder einer zweiten Ebene führen.

      Sentinel-Implementierungsprinzip h2>

      🎜1. Einige Konzepte🎜🎜

      🎜Hauptfunktionen🎜

      • 🎜 Überwachung: 🎜Überprüfen Sie ständig, ob die Master- und Slave-Server normal laufen. 🎜
      • 🎜Benachrichtigung: 🎜 Sobald ein Knoten ausfällt, werden andere Knoten benachrichtigt. 🎜
      • 🎜Automatisches Failover: 🎜 Wenn der Master-Knoten nicht ordnungsgemäß funktionieren kann, wird dies automatisch der Fall sein Failover, Upgrade von einem der Slave-Knoten auf den Master-Knoten🎜
      • 🎜Konfigurationsanbieter:🎜 Der Client konfiguriert keinen einzelnen Knoten, sondern eine Sammlung von Sentinel-Knoten🎜🎜

        🎜Subjektiver Offline- und objektiver Offline-Modus🎜

        🎜Im Allgemeinen überwacht jeder Sentinel-Knoten kontinuierlich andere Sentinel-Knoten und Redis-Knoten sendet PING und bestätigt, ob er online ist, indem er antwortet oder nicht 🎜
        • 🎜Subjektiv offline: 🎜 Gilt für alle Master-Knoten und Slave-Knoten, wenn in Wenn <code>Sentinel innerhalb von Down-after-milliseconds Millisekunden keine gültige Antwort vom Zielknoten erhält, wird festgestellt, dass der Knoten subjektiv offline ist. 🎜
        • 🎜Ziel offline: 🎜 Wird nur für den Masterknoten verwendet. Wenn der Masterknoten ausfällt, übergibt der Sentinel-Knoten sentinel is-master-down-by-addr Befehl zum Abfragen anderer Sentinel-Knoten zur Statusbeurteilung dieses Knotens. Wenn mehr als <quorum></quorum>-Knoten feststellen, dass der primäre Knoten nicht erreichbar ist, stellt der Sentinel-Knoten fest, dass der primäre Knoten objektiv offline ist. 🎜🎜🎜🎜2. Funktionsprinzip🎜🎜🎜🎜🎜
          • Jeder Sentinel sendet mit einer Frequenz von 1 Mal/san andere Sentinel-Knoten und Redis-Master-Slave-Knoten > PING-Befehl.
          • Sentinel1次/s 频率,向其他 Sentinel 节点、Redis 主从节点发送 PING 指令。
        • 如果一个实例,距离最后有效回复 PING 命令超过 down-after-milliseconds,这个实例被 Sentinel 标记为 主观下线
        • 如果一个 主服务器 被标记为主观下线,那么正在监视这个主服务器的所有 Sentinel 节点,以 1次/s 确认此主服务器是否进入主观下线状态
        • 如果超过 <quorum></quorum> 个数的节点判定主节点不可达,则该 Sentinel 节点会判断主节点为 客观下线
        • 当主服务器被标记为客观下线时,Sentinel 向下线服务器的所欲服务器发送 INFO 命令,会从10次/s 改为 1次/s
        • Sentinel 节点之间协商主节点状态,如果主节点处于 SDOWN 状态,则投票自动选出新的 主节点。将剩余的 从节点 指向 新的主节点 进行 数据复制
        • 当没有足够数量的 Sentinel 同意 主服务器 下线时, 主服务器客观下线状态 就会被移除。当 主服务器 重新向 SentinelPING 命令返回 有效回复 时,主服务器主观下线状态 就会被移除。

        3. 消息丢失

        Redis 采用主从复制的模式,一旦主节点挂掉,从节点正在同步的数据可能会丢失,延迟越大,丢失的越多。

        Redis 提供了两个配置项来限制主库的请求处理,分别是 min-slaves-to-writemin-slaves-max-lag

        • min-slaves-to-write:这个配置项设置了主库能进行数据同步的最少从库数量;
        • min-slaves-max-lag:这个配置项设置了主从库间进行数据复制时,从库给主库发送 ACK 消息的最大延迟(以秒为单位)。

        这两个配置项组合后的要求是,主库连接的从库中至少有 N 个从库,和主库进行数据复制时的 ACK 消息延迟不能超过 T 秒,否则,主库就不会再接收客户端的请求了

        所以,Sentine 无法保证消息完全不丢失,但是也能尽量保证消息少丢失。

        小结

        SentinelWenn eine Instanz mehr als down-after-milliseconds von der letzten gültigen Antwort auf den PING-Befehl entfernt ist, wird diese Instanz als Sentinel strong>Subjektiv offline.

      • Wenn ein Hauptserver als subjektiv offline markiert ist, dann werden alle Sentinel-Knoten dieses Hauptservers mit 1 Zeit/s überwacht. code> Bestätigen Sie, ob der Hauptserver in einen subjektiven Offline-Zustand eingetreten ist

  • Wenn mehr als <quorum></quorum> Knoten feststellen, dass der Hauptknoten nicht erreichbar ist, dann wird der Sentinel Der Knoten stellt fest, dass der Masterknoten objektiv offline ist.

Wenn der Hauptserver als objektiv offline markiert ist, sendet Sentinel den Befehl INFO an alle Server des Offline-Servers 10 mal/s wird in 1 mal/s geändert. Sentinel-Knoten verhandeln den Masterknotenstatus. Wenn sich der Masterknoten im Status SDOWN befindet, wird bei der Abstimmung automatisch ein neuer Masterknoten ausgewählt. stark >. Verweisen Sie die verbleibenden Slave-Knoten auf den neuen Master-Knoten für die Datenreplikation. Wenn nicht genügend Sentinel vorhanden sind, um zuzustimmen, dass der Hauptserver offline geht, wird der objektive Offline-StatusHauptservers /strong> wird entfernt. Wenn der Hauptserver eine gültige Antwort auf den PING-Befehl von Sentinel zurückgibt, wird der Hauptserver gesendet /strong> >s Subjektiver Offline-Status wird entfernt.

3. Nachrichtenverlust

🎜Redis übernimmt den Master-Slave-Replikationsmodus, sobald der Masterknoten hängt Nach oben können von Slave-Knoten synchronisierte Daten verloren gehen. Je größer die Verzögerung, desto mehr gehen verloren. 🎜🎜Redis bietet zwei Konfigurationselemente, um die Anforderungsverarbeitung der Hauptbibliothek einzuschränken, nämlich min-slaves-to-write und min-slaves-max-lag. 🎜🎜🎜min-slaves-to-write: Dieses Konfigurationselement legt die Mindestanzahl von Slave-Bibliotheken fest, mit denen die Master-Bibliothek Daten synchronisieren kann. 🎜min-slaves-max-lag: Dieses Konfigurationselement legt die Mindestanzahl fest Anzahl der Slave-Bibliotheken zwischen Master- und Slave-Bibliotheken Bei der Datenreplikation die maximale Verzögerung (in Sekunden), die die Slave-Bibliothek benötigt, um eine ACK-Nachricht an die Master-Bibliothek zu senden. 🎜Die Anforderung nach der Kombination dieser beiden Konfigurationselemente besteht darin, dass mindestens N Slave-Bibliotheken mit der Master-Bibliothek verbunden sind und die ACK-Nachrichtenverzögerung beim Replizieren von Daten mit der Master-Bibliothek T nicht überschreiten darf Sekunden, andernfalls empfängt die Hauptbibliothek keine Clientanfragen mehr. 🎜🎜Sentine kann also nicht garantieren, dass Nachrichten überhaupt nicht verloren gehen, kann aber auch versuchen, sicherzustellen, dass Nachrichten so wenig wie möglich verloren gehen. 🎜

Zusammenfassung

🎜Sentinel löst das Problem der Hochverfügbarkeit, löst jedoch nicht das Problem der Einzelknotenerweiterung des Masterknotens. 🎜🎜Weitere Kenntnisse zum Thema Programmierung finden Sie unter: 🎜Einführung in die Programmierung🎜! ! 🎜

Das obige ist der detaillierte Inhalt vonErfahren Sie in einem Artikel mehr über den Sentry-Modus in Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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