Heim  >  Artikel  >  Datenbank  >  Detaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung

Detaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung

尚
nach vorne
2019-12-17 16:42:013418Durchsuche

Detaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung

Verstehen und erstellen Sie einen Redis-Cluster von Grund auf

Einige Entwickler verwenden Redis nur in ihren Anwendungen, z. B. zum Zwischenspeichern von Datenergebnissen. Und jetzt gibt es viele gute Redis-Client-Tools (Redisson), die grundsätzlich eine beträchtliche Anzahl von Funktionen ausführen können, ohne auf den Redis-Befehl zu achten. Daher wird den folgenden Themen möglicherweise nicht genügend Aufmerksamkeit geschenkt:

Wie kann man sich von einer Katastrophe erholen? Das heißt, wenn es ein Problem mit einem bestimmten Redis-Knoten gibt, wie kann die hohe Verfügbarkeit des Dienstes sichergestellt werden?

Wie kann man ihn horizontal erweitern? Wie kann das Leistungsproblem eines einzelnen Redis gelöst werden, wenn die Datenmenge besonders groß ist?

Wie viele Maschinen werden mindestens im Cluster benötigt? Oder mit welchen Technologien und Tools werden Cluster aus mehreren Redis-Knoten aufgebaut

?

Wie erholt man sich von einer Katastrophe?

Redis bietet einen Master-Slave-Hot-Standby-Mechanismus. Die Daten des Master-Servers werden mit dem Slave-Server synchronisiert. Der Status des Master-Servers wird in Echtzeit über Sentinel überwacht und ist für die Auswahl des Master-Servers verantwortlich . Wenn eine Anomalie beim Hauptserver festgestellt wird, wird der Hauptserver gemäß einem bestimmten Algorithmus neu gewählt, der Problemserver aus der verfügbaren Liste entfernt und der Client schließlich benachrichtigt. Der Master-Slave ist eine Eins-zu-Viele-Baumstruktur, wie unten gezeigt:

Detaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung

Sentinel

Sentinel ist der Chinese Name von Sentinel: Ein von Redis erstelltes Hochverfügbarkeits-Architekturtool ist selbst ein unabhängiger Prozess und kann mehr als einen Redis-Cluster gleichzeitig überwachen.

Sentinel-Cluster

Aus Gründen der Hochverfügbarkeit muss Sentinel selbst auch Clustering unterstützen. Wenn es nur einen Sentinel gibt, gibt es einen einzigen Problempunkt.

Sentinel-Entscheidung

Sentinels verfügen über eine Mengenkonfiguration, die nur durchgeführt wird, wenn wie viele Sentinels der Meinung sind, dass ein bestimmter Master-Dienst gleichzeitig nicht verfügbar ist. Beispielsweise gibt es insgesamt 5 Sentinels. Wenn die drei Sentinels glauben, dass der Dienst nicht verfügbar ist, entscheiden sie sich für einen Master-Slave-Wechsel. Dadurch können fehlerhafte Wechsel vermieden und die Wechselkosten gesenkt werden, z. B. bei plötzlichen Netzwerkanomalien.

Wie kann man horizontal expandieren?

Ob Redis oder andere Datenbankprodukte: Wenn die Datenkapazität eines einzelnen Knotens eine bestimmte Obergrenze erreicht, wird die Fähigkeit, Dienste für die Außenwelt bereitzustellen, immer schwächer. Redis stellt in höheren Versionen redis-trib.rb zur Implementierung von Clusterfunktionen zur Verfügung. Sie können auch das Drittanbieter-Tool twemproxy verwenden.

Dezentralisierung, jeder Knoten ist gleich

Der Redis-Cluster ist nicht auf Zentralisierung ausgelegt, wodurch Probleme wie ein einzelner Punkt im zentralen Knoten vermieden werden können. Jeder Knoten kann den Status des gesamten Clusters erfassen, und jeder mit ihm verbundene Knoten kann auf alle Schlüssel zugreifen, genau wie Redis mit einem einzelnen Knoten.

Cluster-Schemadiagramm

Ich habe es nach meinem eigenen Verständnis gezeichnet. Bitte weisen Sie darauf hin, wenn es ein Missverständnis gibt.

Detaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung

Die Beziehung zwischen Schlüssel und Redis-Knoten

Hasy Solt wird vorgestellt, was auf Chinesisch als Hash-Slot verstanden wird. Insgesamt sind es 16384. Der von uns betriebene Schlüssel verwendet den Modulo-Algorithmus, um zu bestätigen, auf welchen Steckplatz der Schlüssel fällt.

HASH_SLOT = CRC16(key) mod 16384

Es besteht eine bestimmte Beziehung zwischen dem Hash-Slot und dem Knoten, sodass wir den Schlüssel einem bestimmten Redis-Knoten zuweisen können.

Die detaillierte Beziehung kann erneut untersucht werden. Beispielsweise ist Knoten A für Hash-Slots mit den Nummern 0-5000 verantwortlich, Knoten B ist für 5001-1000 verantwortlich.

Erstellen Sie Schritt für Schritt

Beginnen Sie mit dem Aufbau eines Clusters mit drei Mastern und drei Slaves. Das System ist Ubuntu und es wird das von Redis bereitgestellte Cluster-Tool redis-trib.rb verwendet.

Installieren Sie das neueste Redis

Erstellen Sie das Verzeichnis redis_cluster und erstellen Sie 6 Verzeichnisse von 7000 bis 7005

Kopieren Sie redis.conf im Redis-Verzeichnis in die 6 über Medium erstellten Verzeichnisse

分别修改redis.conf文件,对6个文件做类似的修改。

port  7000                                       //端口7000       
bind  127.0.0.1                                  //默认ip为127.0.0.1 需要改为其他节点机器可访问的ip
daemonize    yes                                 //后台运行
pidfile  /var/run/redis_7000.pid                 //pidfile文件对应7000
cluster-enabled  yes                             //开启集群
cluster-config-file  nodes_7000.conf             //集群的配置
cluster-node-timeout  15000                      //请求超时  默认15秒,可自行设置

bind需要注意的就是需要配置为其它机器可以访问的ip,否则无论是创建集群还是客户端连接都会有问题。

启动6个redis

redis-server redis_cluster/7000/redis.conf
redis-server redis_cluster/7001/redis.conf
redis-server redis_cluster/7002/redis.conf
redis-server redis_cluster/7003/redis.conf
redis-server redis_cluster/7004/redis.conf
redis-server redis_cluster/7005/redis.conf

创建集群
redis的src目录下有个redis-trib.rb,将它复制到/usr/local/bin中,然后执行如下脚本:

redis-trib.rb  create  --replicas  1  127.0.0.1:7000 127.0.0.1:7001  127.0.0.1:7002 127.0.0.1:7003  127.0.0.1:7004  127.0.0.1:7005

--replicas后面的1代表从服务器的个数,上面可以理解为前面3个为主服务器,后面三个分别做为从服务器,即三对主从。

执行过程中会遇到提示需要安装ruby,安装完成之后又会提示安装 gem redis。

安装gem redis,折腾了好久,最终发现是因为在国内访问不了某些网站导致通过apt-get install安装不成功,最后通过下载源码的方式安装成功。

Detaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung再次执行创建集群的脚本,出现如下提示:

Detaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung

输入yes,继续

Detaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung

最少需要多少个主服务器?

可能是基于某些约定,集群约定只有当可用节点数大于半数以上时才具备对外提供服务的能力。首先数量一定是奇数,其实必须大于1,所以最少的主服务器数量为3。

测试集群
连接客户端,由于我的所有节点都是在本地,所以不需要输入ip,但需要加-c的参数。redis-cli -c -p 7000

连接成功后,增加一个key

set mykey 123

有一行提示语,指向到端口7002,这说明虽然我们连接的是7000的实例,但通过hash算法最终会将key分配到7002的实例上。

Detaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung

再连接7005端口查询下key,测试下是否任意一个实例都可以查询到key

get mykey

显示指向到端口7002

Detaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung

更多redis知识请关注redis数据库教程栏目。

Das obige ist der detaillierte Inhalt vonDetaillierte grafische Erläuterung der Redis-Hochverfügbarkeitslösung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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