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 zärtlich
.Als ich die Mission erhielt, war ich innerlich verwirrt.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.
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.
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 denSentinel-Modus. [Verwandte Empfehlungen: Redis-Video-Tutorial]
Die verschiedenen Modi von RedisDer zuvor verwendete Modus war nicht der Sentinel-Modus. Es muss andere Modi geben.
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.
Lassen Sie uns über die
Vor- und Nachteileeiner 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.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.
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.Benutzererlebnis
anstreben, sindAusfallzeiten 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-Knotenals
Backupdes 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:
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
Replikationimplementiert Sentinel eine automatisierteFehlerbehebung.
Wie 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.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
, 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 Hauptserver
alssubjektiv offline markiert ist, müssen alle
Sentinel-Knoten, die diesen Hauptserver überwachen, bestätigen, ob der Hauptserver tatsächlichsubjektiv 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 desMaster-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 verbleibendenSlave-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:
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.
我部署的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的地方改一下,之前使用的是一个两个单机节点。
干完,收工。
虽然领导的任务完成了,但并不意味着学习redis的路结束了。爱学习的龙叔,继续研究了下redis的集群模式。
主从不能解决故障自动恢复问题,哨兵已经可以解决故障自动恢复了,那到底为啥还要集群模式呢?
主从和哨兵都还有另外一些问题没有解决,单个节点的存储能力是有上限,访问能力是有上限的。
Redis Cluster 集群模式具有 高可用、可扩展性、分布式、容错 等特性。
通过数据分片的方式来进行数据共享问题,同时提供数据复制和故障转移功能。
之前的两种模式数据都是在一个节点上的,单个节点存储是存在上限的。集群模式就是把数据进行分片存储,当一个分片数据达到上限的时候,就分成多个分片。
集群的键空间被分割为16384个slots(即hash槽),通过hash的方式将数据分到不同的分片上的。
HASH_SLOT = CRC16(key) & 16384 复制代码
CRC16是一种循环校验算法,这里不是我们研究的重点,有兴趣可以看看。
这里用了位运算得到取模结果,位运算的速度高于取模运算。
有一个很重要的问题,为什么是分割为16384个槽?这个问题可能会被面试官随口一问
读请求分配给slave节点,写请求分配给master,数据同步从master到slave节点。
读写分离提高并发能力,增加高性能。
master节点可以做扩充,数据迁移redis内部自动完成。
当你新增一个master节点,需要做数据迁移,redis服务不需要下线。
举个栗子:上面的有三个master节点,意味着redis的槽被分为三个段,假设三段分别是0~7000,7001~12000、12001~16383。
现在因为业务需要新增了一个master节点,四个节点共同占有16384个槽。
槽需要重新分配,数据也需要重新迁移,但是服务不需要下线。
redis集群的重新分片由redis内部的管理软件redis-trib负责执行。redis提供了进行重新分片的所有命令,redis-trib通过向节点发送命令来进行重新分片。
假如途中红色的节点故障了,此时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!