Heim  >  Artikel  >  Datenbank  >  Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertraut

Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertraut

青灯夜游
青灯夜游nach vorne
2021-05-06 11:08:322557Durchsuche

Dieser Artikel führt Sie durch die vier Modi in Redis: Standalone, Master-Slave, Sentinel und Cluster. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein. „Weniger Code, mehr Haar“ Ich war neu darin, liebe Kolleginnen und Kollegen, werfen Sie einen Blick auf die technischen Unterlagen in der Gruppe und finden Sie ein paar Demos, die Sie selbst üben können.

Hust, hust, hust, damit hätte ich nie gerechnet, alles war so, wie ich dachte, ich bin immer noch zu Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertrautzärtlich

.

Am Nachmittag des Tages, an dem ich dem Unternehmen beitrat, warf mir der Teamleiter ein paar Dokumente zu und bat mich, einen Blick auf die Caching-Systemprobleme dieser Projekte zu werfen, und bat mich, Redis auf den Sentinel-Modus zu aktualisieren.

Als ich die Mission erhielt, war ich innerlich verwirrt.

Erstens weiß ich nicht, welche Arten von Diensten Redis verwenden.

Zweitens weiß ich nicht, wie man Redis verwendet. Drittens: Hat Redis Auswirkungen auf die Benutzer, wenn es hängt?

Viertens habe ich Redis überhaupt noch nie verwendet.

Obwohl ich es noch nie zuvor gemacht habe, bin ich immer noch

nicht schüchtern

. Wenn Sie schließlich jeden Tag die gleiche Arbeit erledigen wie zuvor, dann stimmt etwas nicht und es wird schnell optimiert. Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertraut

Es scheint, dass soziale Rekrutierung und Schulrekrutierung immer noch unterschiedlich sind. Es wird einige Einführungsschulungen oder Anfängerkurse geben.

Durch diese Bildungsformen können Sie erstens die Kultur und Werte des Unternehmens verstehen und zweitens den Arbeitsprozess kennenlernen und die technische Atmosphäre des Unternehmens spüren.

Aufgabe

Aktualisieren Sie alle Redis-Dienste in unserer Abteilung auf den

Sentinel-Modus. [Verwandte Empfehlungen: Redis-Video-Tutorial]

Die verschiedenen Modi von Redis

Der zuvor verwendete Modus war nicht der Sentinel-Modus. Es muss andere Modi geben.

Einzelmaschinenmodus, Master-Slave-Modus, Sentinel-Modus, Clustermodus

EinzelmaschinenmodusDies ist die einfachste und auf einen Blick verständliche. Einfach ein Redis installieren, starten und das Unternehmen anrufen. Ich werde nicht näher auf die spezifischen Installations- und Startschritte eingehen, sondern sie einfach online durchsuchen.

Einzelne Maschine wird auch in vielen Szenarien verwendet, beispielsweise in Situationen, in denen eine hohe Verfügbarkeit nicht unbedingt gewährleistet ist. Ähm, eigentlich verwendet unser Dienst den Redis-Standalone-Modus, also lasst mich ihn in den Sentinel-Modus ändern.

Lassen Sie uns über die

Vor- und Nachteile

einer einzelnen Maschine sprechen. Vorteile:

Einfache Bereitstellung, 0 Kosten.

Geringe Kosten, keine Ersatzknoten, keine weiteren Kosten erforderlich.

Hohe Leistung, eine einzelne Maschine muss keine Daten synchronisieren und die Daten sind natürlich konsistent.

Nachteile:

Die Zuverlässigkeitsgarantie ist nicht sehr gut und es besteht die Gefahr von Ausfallzeiten auf einem einzelnen Knoten.

Die hohe Leistung einer einzelnen Maschine wird durch die Rechenleistung der CPU begrenzt, und Redis ist Single-Threaded.

    Die Wahl des Standalone-Modus muss auf Ihrem eigenen Geschäftsszenario basieren. Wenn hohe Leistung und Zuverlässigkeit erforderlich sind, ist der Standalone-Modus nicht geeignet.
  • Master-Slave-Replikation
  • Master-Slave-Replikation bezieht sich auf das Kopieren von Daten von einem Redis-Server auf andere Redis-Server.

Ersterer wird als Master-Knoten (Master) und letzterer als Slave-Knoten (Slave) bezeichnet. Die Datenreplikation erfolgt in eine Richtung und kann nur vom Master-Knoten zum Slave-Knoten erfolgen.

  • Die Konfiguration des Master-Slave-Modus ist sehr einfach. Sie müssen nur die IP- und Portnummer des Master-Knotens auf dem Slave-Knoten konfigurieren.
slaveof <masterip> <masterport>
# 例如
# slaveof 192.168.1.214 6379</masterport></masterip>
Starten Sie alle Dienste der

Master-Slave-Knoten und überprüfen Sie die Protokolle, um die Dienstverbindungen zwischen den

Master-Slave-Knoten zu sehen.

Aus dem oben Gesagten kann man sich leicht ein Problem vorstellen. Da die Master-Slave-Replikation bedeutet, dass die Daten von Master und Slave gleich sind, liegt ein Datenredundanzproblem vor.

Beim Programmdesign ist Redundanz für hohe Verfügbarkeit und hohe Leistung zulässig. Ich hoffe, dass jeder dies beim Entwurf des Systems berücksichtigt und eine Einsparung dieser Ressource für das Unternehmen vermeidet.

Für Produkte, die das ultimative

Benutzererlebnis

anstreben, sind

AusfallzeitenMachen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertraut absolut nicht zulässig.

Das Master-Slave-Modell wird in vielen Systemdesigns berücksichtigt. Wenn der Master-Dienst ausfällt, wird ein neuer Master-Knoten ausgewählt, um die hohe Verfügbarkeit des Dienstes sicherzustellen.

Vorteile des Master-Slave-Modus: Sobald der Master-Knoten ausfällt, kann der

Slave-Knoten

als

Backup

des Master-Knotens jederzeit zurückkommen.

Erweitern Sie die Lesefähigkeit des

Masterknotens

, um den Lesedruck des Masterknotens zu teilen.

Eckpfeiler der Hochverfügbarkeit: Zusätzlich zu den oben genannten Funktionen ist die Master-Slave-Replikation auch die Grundlage für die Implementierung des Sentinel-Modus und des Cluster-Modus. Daher ist die Master-Slave-Replikation der Eckpfeiler der Redis-Hochverfügbarkeit.

weist auch entsprechende Mängel auf, wie zum Beispiel das gerade erwähnte Datenredundanzproblem:

  • Sobald der Master-Knoten ausfällt, wird der Slave-Knoten zum Master-Knoten und zur Anwendungsseite befördert muss gleichzeitig geändert werden Die Master-Knotenadresse muss auch allen Slave-Knoten befehlen, den neuen Master-Knoten zu kopieren , und der gesamte Prozess erfordert manuelles Eingreifen . Die
  • Schreibfähigkeit
  • des Masterknotens wird durch die einzelne Maschine begrenzt. Die
  • Speicherkapazität
  • des Masterknotens wird durch die einzelne Maschine begrenzt.

Sentinel-Modus

Der gerade erwähnte Master-Slave-Modus: Wenn der Master-Knoten ausfällt, kann der Slave-Knoten als Master-Knoten hochfahren und weiterhin Dienste bereitstellen.

Aber es gibt ein Problem. Die IP des Masterknotens hat sich geändert. Zu diesem Zeitpunkt verwendet der Anwendungsdienst immer noch die ursprünglicheAdresse des Masterknotens, um darauf zuzugreifen Redis Version 2.8 und es gibt das Konzept von Sentry.

Basierend auf

Replikation

implementiert Sentinel eine automatisierteFehlerbehebung.

Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertrautWie in der Abbildung gezeigt, besteht der Sentinel-Knoten aus zwei Teilen, dem Sentinel-Knoten und dem Datenknoten:

Sentinel-Knoten: Das Sentinel-System besteht aus einem oder mehreren Sentinel-Knoten. Der Sentinel-Knoten ist eine Besonderheit Redis-Knoten, der keine Daten speichert.
  • Datenknoten: Masterknoten und Slaveknoten sind beide Datenknoten.
  • Der Datenzugriff auf den Redis-Cluster erfolgt über den Sentinel-Cluster, und der Sentinel überwacht den gesamten Redis-Cluster.

Sobald festgestellt wird, dass ein Problem mit dem Redis-Cluster vorliegt, z. B. wenn der gerade erwähnte Master-Knoten aufhängt, wird der Slave-Knoten hochgefahren. Wenn sich jedoch die Adresse des Masterknotens ändert, erkennt der Anwendungsdienst dies zu diesem Zeitpunkt nicht und es besteht keine Notwendigkeit, die Zugriffsadresse zu ändern, da der Sentinel mit dem Anwendungsdienst interagiert.

Sentinel löst das Problem des Failovers sehr gut und hebt es in puncto Hochverfügbarkeit auf ein neues Niveau. Natürlich verfügt Sentinel auch über weitere Funktionen.

Zum Beispiel:

Master-Knoten-Überlebenserkennung

, Master-Slave-Laufstatuserkennung, Master-Slave-Umschaltung. Die Mindestkonfiguration von Sentinel für Redis ist

ein Master und ein Slave

. Sprechen wir über das Prinzip der Überwachung im Sentinel-Modus

Jeder Sentinel sendet einmal pro Sekunde einen PING-Befehl an alle seine

Master-Server

, Slave-Server und andere Sentinel-Instanzen. Wenn die Zeit seit der letzten gültigen Antwort auf den PING-Befehl den durch down-after-milliseconds angegebenen Wert überschreitet, wird diese Instanz von Sentinel als „Subjektiv offline“ markiert.

Wenn ein Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertrautHauptserver

als

subjektiv offline markiert ist, müssen alle

Sentinel-Knoten, die diesen Hauptserver überwachen, bestätigen, ob der Hauptserver tatsächlich

subjektiv offline ist, und zwar mit einer Häufigkeit von einmal pro Sekunde Status. Wenn ein Master-Server als subjektiv offline markiert ist und eine ausreichende Anzahl von Sentinels (mindestens die in der Konfigurationsdatei angegebene Anzahl) dieser Einschätzung innerhalb des angegebenen Zeitraums zustimmt, dann wird der Master-Server als markiert Ziel offline

.

Unter normalen Umständen sendet jeder Sentinel alle 10 Sekunden INFO-Befehle an alle ihm bekannten Master-Server und Slave-Server. Wenn ein Master-Server von Sentinel als objektiv offline

markiert wird, ändert sich die Häufigkeit, mit der Sentinel INFO-Befehle an alle Slave-Server des Offline-Master-Servers sendet, von einmal alle 10 Sekunden auf einmal pro Sekunde.

Sentinel verhandelt den Status des

Master-Knotens mit anderen Sentinels. Wenn sich der Master-Knoten im Zustand SDOWN befindet, wählt die Abstimmung automatisch einen

neuen Master-Knoten aus. Richten Sie die verbleibenden

Slave-Knoten für die Datenreplikation auf den neuen Master-Knoten. Wenn es nicht genügend Sentinels gibt, die zustimmen, dass der Hauptserver offline geht, wird der objektive Offline-Status des Hauptservers entfernt. Wenn der Hauptserver eine gültige Antwort auf den PING-Befehl von Sentinel zurückgibt, wird der Subjektive Offline-Status

des Hauptservers entfernt.

Vor- und Nachteile des Sentinel-ModusVorteile:

Der Sentinel-Modus basiert auf dem Master-Slave-Modus und der Sentinel-Modus verfügt über alle Vorteile des Master-Slave-Modus. Master und Slave können automatisch umgeschaltet werden, wodurch das System robuster und benutzerfreundlicher wird.

Sentinel prüft ständig, ob der Master-Server und der Slave-Server normal laufen. Wenn auf einem überwachten Redis-Server ein Problem auftritt, sendet Sentinel über API-Skripte Benachrichtigungen an den Administrator oder andere Anwendungen.

  • Nachteile:
    • Redis较难支持在线扩容,对于集群,容量达到上限时在线扩容会变得很复杂。

    我的任务

    我部署的redis服务就如上图所示,三个哨兵节点,三个主从复制节点。

    使用java的jedis去访问我的redis服务,下面来一段简单的演示代码(并非工程里面的代码):

    public static void testSentinel() throws Exception {
         //mastername从配置中获取或者环境变量,这里为了演示
             String masterName = "master";
             Set<String> sentinels = new HashSet<>();
         // sentinel的IP一般会从配置文件获取或者环境变量,这里为了演示
             sentinels.add("192.168.200,213:26379");
             sentinels.add("192.168.200.214:26380");
             sentinels.add("192.168.200.215:26381");
     
         //初始化过程做了很多工作
             JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinels); 
         //获取到redis的client
             Jedis jedis = pool.getResource();
         //写值到redis
             jedis.set("key1", "value1");
         //读取数据
         jedis.get("key1");
    }

    具体部署的配置文件这里太长了,需要的朋友可以公众号后台回复【redis配置】获取。

    听起来是入职第二天就部署了任务感觉很难的样子。

    其实现在看来是个so easy的任务,申请一个redis集群,自己配置下。在把工程里面使用到redis的地方改一下,之前使用的是一个两个单机节点。

    干完,收工。

    Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertraut

    虽然领导的任务完成了,但并不意味着学习redis的路结束了。爱学习的龙叔,继续研究了下redis的集群模式。

    集群模式

    主从不能解决故障自动恢复问题,哨兵已经可以解决故障自动恢复了,那到底为啥还要集群模式呢?

    主从和哨兵都还有另外一些问题没有解决,单个节点的存储能力是有上限,访问能力是有上限的。

    Redis Cluster 集群模式具有 高可用可扩展性分布式容错 等特性。

    Cluster 集群模式的原理

    通过数据分片的方式来进行数据共享问题,同时提供数据复制和故障转移功能。

    之前的两种模式数据都是在一个节点上的,单个节点存储是存在上限的。集群模式就是把数据进行分片存储,当一个分片数据达到上限的时候,就分成多个分片。

    数据分片怎么分?

    集群的键空间被分割为16384个slots(即hash槽),通过hash的方式将数据分到不同的分片上的。

HASH_SLOT = CRC16(key) & 16384 复制代码

CRC16是一种循环校验算法,这里不是我们研究的重点,有兴趣可以看看。

这里用了位运算得到取模结果,位运算的速度高于取模运算。

Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertraut

有一个很重要的问题,为什么是分割为16384个槽?这个问题可能会被面试官随口一问

数据分片之后怎么查,怎么写?
Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertraut

读请求分配给slave节点,写请求分配给master,数据同步从master到slave节点。

读写分离提高并发能力,增加高性能。

如何做到水平扩展?

Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertraut

master节点可以做扩充,数据迁移redis内部自动完成。

当你新增一个master节点,需要做数据迁移,redis服务不需要下线。

举个栗子:上面的有三个master节点,意味着redis的槽被分为三个段,假设三段分别是0~7000,7001~12000、12001~16383。

现在因为业务需要新增了一个master节点,四个节点共同占有16384个槽。

槽需要重新分配,数据也需要重新迁移,但是服务不需要下线。

redis集群的重新分片由redis内部的管理软件redis-trib负责执行。redis提供了进行重新分片的所有命令,redis-trib通过向节点发送命令来进行重新分片。

如何做故障转移?

Machen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertraut

假如途中红色的节点故障了,此时master3下面的从节点会通过 选举 产生一个主节点。替换原来的故障节点。

此过程和哨兵模式的故障转移是一样的。

总结

每种模式都有各自的优缺点,在实际使用场景中要根据业务特点去选择合适的模式。

redis是一个非常常用的中间件,作为一个使用者来说,学习成本一点不高。

如果作为一个很好的中间件去研究的话,还是有很多值得学习和借鉴的地方。比如redis的各种数据结构(动态字符串、跳跃表、集合、字典等)、高效的内存分配(jemalloc)、高效的IO模型等等。

Jeder Punkt kann eingehend untersucht und in den späteren Entwurf von Systemen mit hoher Parallelität und hoher Verfügbarkeit integriert werden.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmiervideos! !

Das obige ist der detaillierte Inhalt vonMachen Sie sich schnell mit den Standalone-, Master-Slave-, Sentinel- und Cluster-Modi in Redis vertraut. 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