Heim  >  Artikel  >  Datenbank  >  Detaillierte Erläuterung der Beispiele für Redis-Cluster-Operationen

Detaillierte Erläuterung der Beispiele für Redis-Cluster-Operationen

WBOY
WBOYnach vorne
2022-06-23 12:24:122174Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über Redis, in dem hauptsächlich Probleme im Zusammenhang mit Clustervorgängen organisiert werden, einschließlich des Hinzufügens von Redis-Instanzen, der Konfiguration von 8007 als Masterknoten, der Konfiguration von 8008 als Slave-Knoten von 8007 usw. Werfen wir einen Blick darauf Gemeinsam hoffe ich, dass es für alle hilfreich sein wird.

Detaillierte Erläuterung der Beispiele für Redis-Cluster-Operationen

Empfohlenes Lernen: Redis-Video-Tutorial

Basierend auf der vorhandenen Grundlage ist hier eine Basisversion mit drei Mastern und drei Slaves. Die Struktur ist wie folgt:

1 . Starten Sie den Cluster

/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8001/redis.conf 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8002/redis.conf 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8003/redis.conf 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8004/redis.conf 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8005/redis.conf 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8006/redis.conf

Sehen Sie sich den Clusterstatus an: Clusterknoten

Wie aus dem obigen Bild ersichtlich ist, läuft der gesamte Cluster normal, mit drei Masterknoten und drei Slaveknoten,

  • Der Instanzknoten von Port 8001 speichert 0-5460 dieser Hash-Slots,
  • 8002 Port-Instanzknoten speichert 5461-10922 dieser Hash-Slots,
  • 8003 Port-Instanzknoten speichert 10923-16383 dieser Hash-Slots,

Diese drei Masterknoten speichern alle Hash-Slots und bilden die Speicherslots des Redis-Clusters. Der Slave-Punkt ist der Backup-Slave-Knoten jedes Masterknotens, und die Speicherslots werden nicht angezeigt.

2. Cluster-Betrieb

Wir fügen einen weiteren Master (8007) und einen Slave (8008) basierend auf dem ursprünglichen Cluster hinzu, wie in der folgenden Abbildung dargestellt Dotted Boxen

2.1. und 8008 Konfigurieren Sie unter den beiden Ordnern
mkdir 8007 8008 
cd 8001
cp redis.conf /usr/local/redis‐cluster/8007/ 
cp redis.conf /usr/local/redis‐cluster/8008/
 
# 修改8007文件夹下的redis.conf配置文件
vim /usr/local/redis‐cluster/8007/redis.conf 
# 修改如下内容:
port:8007 
dir /usr/local/redis‐cluster/8007/
cluster‐config‐file nodes‐8007.conf 

# 修改8008文件夹下的redis.conf配置文件
vim /usr/local/redis‐cluster/8008/redis.conf
# 修改内容如下:
port:8008
dir /usr/local/redis‐cluster/8008/
cluster‐config‐file nodes‐8008.conf

# 启动8007和8008俩个服务并查看服务状态
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8007/redis.conf
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8008/redis.conf

ps ‐el | grep redis

2.2 8007 als Masterknoten

Verwenden Sie den Befehl add-node, um einen neuen Masterknoten 8007 (Master) hinzuzufügen. Der erste IP:Port ist der neue Knoten, und der folgende ip:port ist der neue Knoten. Wenn Sie am Ende des Protokolls die Eingabeaufforderung „[OK] Neuer Knoten korrekt hinzugefügt“ sehen, bedeutet dies, dass der neue Knoten vorhanden ist wurde erfolgreich hinzugefügt.
/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster add‐node 192.168.0.61:8007 192.168.0.61:8001

Sehen Sie sich den Clusterstatus

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐c ‐h 192.168.0.61 ‐p 8001

192.168.0.61:8001> cluster nodes

wie unten gezeigt an:

Hinweis: Wenn der Knoten erfolgreich hinzugefügt wurde, hat der neu hinzugefügte Knoten keinen Daten, da ihnen kein Slot (Hash-Slot) zugewiesen wurde. Wir müssen Hash-Slots für den neuen Knoten manuell zuweisen.

Verwenden Sie den Befehl redis-cli, um einen Hash-Slot für 8007 zuzuweisen 2.3. Konfigurieren Sie 8008 als Slave-Knoten von 8007. Fügen Sie den Slave-Knoten 8008 zum Cluster hinzu und überprüfen Sie den Cluster-Status

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster reshard 192.168.0.61:8001
wie folgt:

Wie im Bild gezeigt, handelt es sich immer noch um einen Masterknoten, dem kein Hash-Slot zugewiesen wurde.

Grund: Wir müssen den Replikationsbefehl ausführen, um die Master-Knoten-ID des aktuellen Knotens (Slave-Knotens) anzugeben. Zuerst müssen wir den Client des neu hinzugefügten 8008-Knotens verbinden und dann den Cluster-Befehl verwenden Um den aktuellen 8008 zu betreiben und zu ersetzen, wird der (Slave-)Knoten einem Masterknoten zugewiesen (hier wird der zuvor erstellte 8007-Masterknoten verwendet). wurde erfolgreich als Slave-Knoten des 8007-Knotens hinzugefügt

 2.4、删除8080从节点[不删除四主四从]

用del-node删除从节点8008,指定删除节点ip和端口,以及节点id(红色为8008节点id)

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster del‐node 192.168.0.61:8008 a1cfe35722d151cf70585cee212755653 93c0956

再次查看集群状态,如下图所示,8008这个slave节点已经移除,并且该节点的redis服务也已被停止

 2.5、删除8007主节点[不删除四主四从]

因为主节点的里面是有分配了hash槽的,所以我们这里必须先把8007里的hash槽放入到其他的可用主节点中去,然后再进行移除节点操作,不然会出现数据丢失问题(目前只能把master的数据迁移到一个节点上,暂时做不了平均分配功能),执行命令如下:

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster reshard 192.168.0.61:8007

迁移验证:会发现8007下面已经没有任何hash槽了,证明迁移成功!

 用del-node命令删除8007主节点即可

/usr/local/redis‐5.0.3/src/redis‐cli ‐a user ‐‐cluster del‐node 192.168.0.61:8007 2728a594a0498e98e4b83a537e19f9a0a 3790f38

查看最终集群状态,发现一切恢复如初,至此水平扩展结束

推荐学习:Redis视频教程

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Beispiele für Redis-Cluster-Operationen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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