redis
im Standalone-Modus ist sehr einfach. Sie müssen nur einen einzelnen Knoten starten und der Installationsvorgang dauert nicht länger als 5 Minuten. redis
非常简单,你只需要启动一个单一的节点就可以了,安装过程不超过5分钟。
通过redis-benchmark
测试简单的命令,QPS
可达到10w
以上,不得不说非常的让人惊艳了。
单机模式的问题也非常明显。缺乏高可用的机制!
假如redis
进程死了,进程就只能够穿透到底层的数据库中,对业务来说非常的危险。如果你把redis
当作数据存储来用,情况会更加严重,甚至会丢失数据。
所以最基本的redis
部署,都会增加一个或者多个slave
(现在叫replication
)。
当主redis
发生问题的时候,能够选取一个slave
顶上去。
非常可惜的是,这种模式和传统的MySQL
主从一样,切换起来比较蛋疼,需要借助外部的工具,比如keepalived
等辅助进行切换,部署和维护难度直接飙升。
keepalived
是一个基于VRRP
协议来实现的高可用方案,通过 IP 漂移实现高可用。从描述上就可以看出它需要网络管理员的参与,和我们轻量级的redis
背道而驰。
哨兵模式就是使用额外的进程来替换keepalived
的功能,对redis
进程的存活性进行判断。在哨兵模式下,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来。
但哨兵模式一个最大的问题,就是哨兵的数量太多,至少需要3个节点。
对redis
进行仲裁的时候,需要n/2+1
个节点投票才能确认,这也是分布式系统的一般做法 (quorum)。和Zookeeper
类似,哨兵节点做成奇数个,是非常合适的。
哨兵模式可以通过sentinel monitor
配置同时检测多套集群,在集群数量适中的时候,还是比较好用的。
但哨兵模式有很多隐藏的坑,比如哨兵的启动,必须在master
存活的情况下才能正常运行;另外,如果你的redis
配置文件中使用RENAME
屏蔽了一些危险命令时,哨兵也不能够启动。
客户端在连接redis
的时候,就不能再直接连接redis
的实例,它需要从哨兵转上一圈,以便获取一些变更信息。
集群模式可以说是这里面最优雅的方式了。你只需要部署多个对等的redis
节点,然后使用客户端命令进行组群就可以了。
ip=192.169.0.23 ./bin/redis-cli --cluster create $ip:7001 $ip:7002 $ip:7003 $ip:7004 $ip:7005 $ip:7006 --cluster-replicas 1
它对节点的要求也是比较多的,一般是采用6个节点,三主三从。一旦节点数量超过10个,协同性就会变得不太灵活,因此,单个集群的存储和性能上限也迅速达到。
集群模式的一些缺点很隐蔽。它的服务端节点倒是非常稳定了,但有些命令会严重影响性能。比如mget
,pipeline
redis-benchmark
kann QPS
mehr als 10 W
erreichen, was sehr beeindruckend ist. Die Leute sind erstaunt. #🎜🎜##🎜🎜#Das Problem mit dem Einzelspielermodus ist auch sehr offensichtlich. Fehlender Hochverfügbarkeitsmechanismus! #🎜🎜##🎜🎜#Wenn der redis
-Prozess abstürzt, kann der Prozess nur in die zugrunde liegende Datenbank eindringen, was für das Unternehmen sehr gefährlich ist. Wenn Sie redis
als Datenspeicher verwenden, wird die Situation ernster und es können sogar Daten verloren gehen. #🎜🎜##🎜🎜#Master-Slave-Modus#🎜🎜##🎜🎜#Die einfachste redis
-Bereitstellung fügt also einen oder mehrere slave
(jetzt Replikation). #🎜🎜##🎜🎜#Wenn ein Problem mit dem Master-redis
auftritt, können Sie einen Slave
zur Übernahme auswählen. #🎜🎜##🎜🎜#Es ist schade, dass dieser Modus mit dem herkömmlichen MySQL
-Master-Slave identisch ist. Der Wechsel ist schwieriger und erfordert die Hilfe externer Tools wie keepalivedcode> und andere Unterstützung beim Wechseln erhöhen die Schwierigkeit der Bereitstellung und Wartung direkt. #🎜🎜##🎜🎜#keepalived
ist eine Hochverfügbarkeitslösung basierend auf dem VRRP
-Protokoll, das eine hohe Verfügbarkeit durch IP-Drift erreicht. Aus der Beschreibung geht hervor, dass es die Beteiligung des Netzwerkadministrators erfordert, was im Gegensatz zu unserem leichtgewichtigen redis
steht. #🎜🎜##🎜🎜#Sentinel-Modus#🎜🎜##🎜🎜#Der Sentinel-Modus verwendet einen zusätzlichen Prozess, um die Funktion von keepalived
zu ersetzen und die redis
-Prozessaktivität zu speichern wird beurteilt. Im Sentry-Modus kann der Slave-Knoten jederzeit als Ersatz für den Master-Knoten zurückkehren, sobald der Master-Knoten ausfällt. #🎜🎜##🎜🎜#Aber das größte Problem beim Sentinel-Modus ist, dass es zu viele Sentinels gibt, was mindestens 3 Knoten erfordert. #🎜🎜##🎜🎜#Bei der Vermittlung von redis
müssen n/2+1
Knoten zur Bestätigung abstimmen. Dies ist auch die allgemeine Praxis in verteilten Systemen (Quorum). . Ähnlich wie bei Zookeeper
ist es sehr sinnvoll, eine ungerade Anzahl von Sentinel-Knoten zu erstellen. #🎜🎜##🎜🎜# Der Sentinel-Modus kann über die sentinel-monitor
-Konfiguration mehrere Cluster gleichzeitig erkennen. Er ist relativ einfach zu verwenden, wenn die Anzahl der Cluster moderat ist. #🎜🎜##🎜🎜#Aber es gibt viele versteckte Fallstricke im Sentinel-Modus. Beispielsweise kann der Start des Sentinel nur dann normal ausgeführt werden, wenn master
aktiv ist; >redisWenn RENAME
in der Konfigurationsdatei verwendet wird, um einige gefährliche Befehle zu blockieren, kann Sentinel nicht gestartet werden. #🎜🎜##🎜🎜#Wenn der Client eine Verbindung zu redis
herstellt, kann er keine direkte Verbindung mehr mit der Instanz von redis
herstellen. Er muss einen Kreis vom Sentinel bilden um einige Änderungsinformationen zu erhalten. #🎜🎜##🎜🎜#Cluster-Modus#🎜🎜##🎜🎜#Der Cluster-Modus kann hier als der eleganteste Weg bezeichnet werden. Sie müssen lediglich mehrere Peer-redis
-Knoten bereitstellen und diese dann mithilfe von Client-Befehlen gruppieren. #🎜🎜#rrreee#🎜🎜# Es erfordert auch viele Knoten, normalerweise 6 Knoten, drei Master und drei Slaves. Sobald die Anzahl der Knoten 10 übersteigt, wird die Zusammenarbeit weniger flexibel und daher werden schnell die Speicher- und Leistungsgrenzen eines einzelnen Clusters erreicht. #🎜🎜##🎜🎜#Einige Nachteile des Cluster-Modus sind sehr versteckt. Sein Serverknoten ist sehr stabil, aber einige Befehle beeinträchtigen die Leistung erheblich. Zum Beispiel mget
, pipeline
usw. Sie müssen Anforderungen zur Ausführung an mehrere Knoten verteilen und diese dann aggregieren. Je mehr Knoten vorhanden sind, desto geringer ist die Leistung. #🎜🎜#Das obige ist der detaillierte Inhalt vonWas sind die Redis-Clustermodi und welche Vorteile haben sie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!