Dieser Artikel vermittelt Ihnen relevantes Wissen über Redis, in dem hauptsächlich die Probleme im Zusammenhang mit der Verkleinerung von Master- und Slave-Knoten im Redis-Cluster-Cluster vorgestellt werden, einschließlich des Konzepts der Cluster-Cluster-Verkleinerung, der Verkleinerung von 6390 Master-Knoten aus dem Cluster und der Überprüfung von Daten . Ob der Migrationsprozess Datenanomalien usw. verursacht. Ich hoffe, es wird für alle hilfreich sein.
Empfohlenes Lernen: Redis-Video-Tutorial
Wenn die Drucktragfähigkeit des Projekts zu hoch ist, müssen Knoten hinzugefügt werden, um die Last zu erhöhen ist nicht sehr hoch, ich hoffe auch, den Cluster zu verkleinern und für andere Projekte zu verwenden. Der Cluster-Verkleinerungsvorgang ist derselbe wie bei der Cluster-Erweiterung.
Beim Erweitern der Kapazität können Sie den Befehl einmal ausführen, um eine erfolgreiche Slot-Migration zu erreichen. Beim Verkleinern müssen Sie ihn so oft ausführen, wie beispielsweise der Knoten, der offline sein soll, noch vorhanden ist 3 Masterknoten, dann müssen Sie es dreimal ausführen, die Anzahl der Migrationsslots muss durch 3 geteilt werden und jeder Knoten muss gleichmäßig verteilt werden.
Beim Schrumpfen müssen Sie zuerst die Anzahl der zuzuweisenden Slots eingeben, dann angeben, wem Sie die Slots zuweisen möchten, und schließlich angeben, wo die Slots zugewiesen werden sollen. Im Allgemeinen hängt die Anzahl der zuzuweisenden Slots von der Anzahl der Slots ab sich auf dem Host befinden, der offline sein soll, und dividieren Sie ihn dann durch die Anzahl der Cluster-Masterknoten, sodass die jedem Host zugewiesenen Slots gleich sind. Geben Sie beim Ausfüllen die ID des ersten Masterknotens ein zum ersten Mal und geben Sie zum zweiten Mal die ID ein. Die ID des zweiten Masterknotens und schließlich die Knoten-ID, die den Steckplatz bereitstellt, ist die ID-Nummer des Offline-Knotens.
Wenn der Cluster schrumpft und die Slots erweitert, hat dies keinen Einfluss auf die Datennutzung.
Das Quellende der Cluster-Schrumpfung ist der Masterknoten, der offline geht, und das Zielende ist der Online-Masterknoten (der ihm zugewiesene Knoten).
Wir müssen uns darüber im Klaren sein, dass nur der Master-Knoten Slots hat, daher müssen die Slots des Master-Knotens anderen Master-Knoten zugewiesen werden. Wenn die Slots gelöscht sind, kann der Host-Knoten offline gehen.Vergleichsbild vor und nach dem Verkleinern des Clusters
1. Führen Sie den Reshard-Befehl aus, um die Slots des Masterknotens zu verteilen, der offline geschaltet werden muss.
2. Wenn Sie mehrere Masterknoten haben, müssen Sie den Reshard-Befehl mehrmals ausführen. Geben Sie zunächst die Anzahl der zu teilenden Slots ein, geben Sie dann ein, von wem Sie sie teilen möchten, und geben Sie schließlich ein, wo sie geteilt werden sollen.
3. Wenn die Slot-Verteilung abgeschlossen ist und der Masterknoten, der offline sein soll, keine Daten hat, löschen Sie den Knoten aus dem Cluster.
Cluster-InformationenDer aktuelle Cluster verfügt über vier Master und vier Slaves, insgesamt 8 Knoten. Wir müssen den Cluster auf drei Master und drei Slaves ändern und zwei Knoten für die Verwendung durch andere Programme verkleinern.
2. Verkleinern Sie den 6390-Masterknoten aus dem Cluster
Sie müssen nur das Feld „Was ist die empfangende Knoten-ID“ als 6380-Knoten-ID 192.168.81.210 eingeben, die sich darauf bezieht, wem der zugewiesene Steckplatz zugewiesen wird.
Dann gibt der Quellknoten die ID des 6390-Knotens 192.168.81.240 ein, die sich darauf bezieht, von welchem Knoten 1365 Slots zugewiesen werden. Nach dem Ausfüllen der ID und dem Drücken der Eingabetaste werden Sie gefragt, von welchem Knoten aus Slots zugewiesen werden sollen , weil Es müssen nur 6390 Slots zugewiesen werden. Füllen Sie daher hier „Done“ aus und geben Sie an, dass nur dieser Knoten anderen Knoten 1365 Slots zugewiesen hat.
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb reshard 192.168.81.210:6380 How many slots do you want to move (from 1 to 16384)? 1365 #分配出多少个槽位 What is the receiving node ID? 80e256579658eb256c5b710a3f82c439665794ba #将槽位分给那个节点 Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs. Source node #1:6bee155f136f40e28e1f60c8ddec3b158cd8f8e8 #从哪个节点分出槽位 Source node #2:done Do you want to proceed with the proposed reshard plan (yes/no)? yes #输入yes继续
Das Folgende ist ein Screenshot des Prozesses zum Verkleinern von Knoten.
Datenmigrationsprozess.
Die Slot-Migration war erfolgreich.
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb reshard 192.168.81.210:6380 How many slots do you want to move (from 1 to 16384)? 1365 #分配出多少个槽位 What is the receiving node ID? 10dc7f3f9a753140a8494adbbe5a13d0026451a1 #将槽位分给那个节点 Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs. Source node #1:6bee155f136f40e28e1f60c8ddec3b158cd8f8e8 #从哪个节点分出槽位 Source node #2:done Do you want to proceed with the proposed reshard plan (yes/no)? yes #输入yes继续
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb reshard 192.168.81.210:6380 How many slots do you want to move (from 1 to 16384)? 1366 #分配出多少个槽位 What is the receiving node ID? a4381138fdc142f18881b7b6ca8ae5b0d02a3228 #将槽位分给那个节点 Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' once you entered all the source nodes IDs. Source node #1:6bee155f136f40e28e1f60c8ddec3b158cd8f8e8 #从哪个节点分出槽位 Source node #2:done Do you want to proceed with the proposed reshard plan (yes/no)? yes #输入yes继续
收缩过程截图展示。
当最后一个节点迁移完数据后,6390主节点槽位数变为0。
槽位及数据已经从6390即将下线的主机迁移完毕,可以看下当前集群三个主节点的槽位数。
可以非常清楚的看到,现在每个主节点的槽位数为5461。
如果觉得槽位重新分配后顺序不太满意,那么在执行一下reshard,把其它节点的槽位都分给192.168.81.210的6380上,这样一来,210的6380拥有的槽位就是0-16383,然后在将210的槽位一个节点分给5461个,分完之后,各节点的顺序就一致了。
多开几个窗口,一个执行数据槽位迁移,一个不断创建key,一个查看key的创建进度,一个查看key的数据。
持续测试,发现没有任何数据异常,全部显示ok。
使用redis-trib删除一个节点,如果这个节点存在复制关系,有节点在复制当前节点或者当前节点复制别的节点的数据,redis-trib会自动处理复制关系,然后将节点删除,节点删除后会把对应的进程也停止运行。
删除节点之前必须确保该节点没有任何槽位和数据,否则会删除失败。
命令:./redis-trib.rb del-node 节点IP:端口 ID
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb del-node 192.168.81.240:6390 6bee155f136f40e28e1f60c8ddec3b158cd8f8e8 >>> Removing node 6bee155f136f40e28e1f60c8ddec3b158cd8f8e8 from cluster 192.168.81.240:6390 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node. [root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb del-node 192.168.81.240:6391 f6b9320dfbc929ad5a31cdb149360b0fd8de2e60 >>> Removing node f6b9320dfbc929ad5a31cdb149360b0fd8de2e60 from cluster 192.168.81.240:6391 >>> Sending CLUSTER FORGET messages to the cluster... >>> SHUTDOWN the node.
删掉192.168.81.240服务器上的两个redis节点后,192.168.81.210服务器上的6380就没有了复制关系,我们需要把192.168.81.230的6381节点复制192.168.81.210的6380节点。
[root@redis-1 ~]# redis-cli -h 192.168.81.230 -p 6381 192.168.81.230:6381> CLUSTER REPLICATE 80e256579658eb256c5b710a3f82c439665794ba OK
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb del-node 192.168.81.220:6380 10dc7f3f9a753140a8494adbbe5a13d0026451a1 >>> Removing node 10dc7f3f9a753140a8494adbbe5a13d0026451a1 from cluster 192.168.81.220:6380 [ERR] Node 192.168.81.220:6380 is not empty! Reshard data away and try again.
redis-trib虽然能够将节点在集群中删除,但是无法将其的集群信息清空,如果集群信息还有保留,那么该接地那就无法加入其它集群。
在下线的redis节点上使用cluster reset删除集群信息即可。
192.168.81.240:6390> CLUSTER reset OK
推荐学习:Redis视频教程
Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel für die Verkleinerung von Master- und Slave-Knoten im Redis-Cluster-Cluster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!