このセクションでは、Redis のクラスタノードを削除する方法を紹介します。

Redis のクラスタノードについて確認します。ここでは、3つのノードが登録されていることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 cluster nodes
ca443c4f54618f40e8682269bbca4033f98cb6d1 192.168.24.199:6390@16390 myself,master - 0 1548525949000 1 connected 0-5460
e582ec767bced7cbbc75427947e504d790f2cd03 192.168.24.199:6392@16392 master - 0 1548525950257 3 connected 10923-16383
2637035585cf77bdf997ddec83455f4c349178ff 192.168.24.199:6391@16391 master - 0 1548525951259 4 connected 5461-10922
[root@localhost ~]# 

各ノードに登録されているキー配置状況を確認します。各ノードでキーがそれぞれ配置されていることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 --cluster info 192.168.24.199:6390
192.168.24.199:6390 (ca443c4f...) -> 3 keys | 5461 slots | 0 slaves.
192.168.24.199:6392 (e582ec76...) -> 1 keys | 5461 slots | 0 slaves.
192.168.24.199:6391 (26370355...) -> 1 keys | 5462 slots | 0 slaves.
[OK] 5 keys in 3 masters.
0.00 keys per slot on average.
[root@localhost ~]# 

192.168.24.199:6392 ノードを削除します。削除しようとするノードにキーが配置されていなければ削除は成功しますが、キーが配置されているノードを削除しようとした場合には、ノードはデータは空ではないためデータの再構築をしてくださいといったエラーとなります。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 --cluster del-node 192.168.24.199:6392 e582ec767bced7cbbc75427947e504d790f2cd03
>>> Removing node e582ec767bced7cbbc75427947e504d790f2cd03 from cluster 192.168.24.199:6392
[ERR] Node 192.168.24.199:6392 is not empty! Reshard data away and try again.
[root@localhost ~]# 

削除するノード( 192.168.24.199:6392 )に配置されているキーを他のノードに移行するために、データの再構築をします。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 --cluster reshard 192.168.24.199:6392
>>> Performing Cluster Check (using node 192.168.24.199:6392)
M: e582ec767bced7cbbc75427947e504d790f2cd03 192.168.24.199:6392
   slots:[10923-16383] (5461 slots) master
M: ca443c4f54618f40e8682269bbca4033f98cb6d1 192.168.24.199:6390
   slots:[0-5460] (5461 slots) master
M: 2637035585cf77bdf997ddec83455f4c349178ff 192.168.24.199:6391
   slots:[5461-10922] (5462 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

移行するスロットの数を聞かれるので、全ての移行するために 16384 を入力します。

How many slots do you want to move (from 1 to 16384)? 16384

移行先のノードを聞かれるので、移行先のノードのIDを入力します。ここでは、192.168.24.199:6391 ノードを移行先として 192.168.24.199:6391 ノードのID を入力します。

What is the receiving node ID? 2637035585cf77bdf997ddec83455f4c349178ff

移行元のノードを聞かれるので、削除するノード( 192.168.24.199:6392 )の ID を入力します。

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: e582ec767bced7cbbc75427947e504d790f2cd03

他に削除するノードはないので、done と入力します。

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: e582ec767bced7cbbc75427947e504d790f2cd03
Source node #2: done

データ再構築の計画が表示されるので、問題がなければ yes と入力します。

〜(省略)〜
    Moving slot 16374 from e582ec767bced7cbbc75427947e504d790f2cd03
    Moving slot 16375 from e582ec767bced7cbbc75427947e504d790f2cd03
    Moving slot 16376 from e582ec767bced7cbbc75427947e504d790f2cd03
    Moving slot 16377 from e582ec767bced7cbbc75427947e504d790f2cd03
    Moving slot 16378 from e582ec767bced7cbbc75427947e504d790f2cd03
    Moving slot 16379 from e582ec767bced7cbbc75427947e504d790f2cd03
    Moving slot 16380 from e582ec767bced7cbbc75427947e504d790f2cd03
    Moving slot 16381 from e582ec767bced7cbbc75427947e504d790f2cd03
    Moving slot 16382 from e582ec767bced7cbbc75427947e504d790f2cd03
    Moving slot 16383 from e582ec767bced7cbbc75427947e504d790f2cd03
Do you want to proceed with the proposed reshard plan (yes/no)? yes

データの再構築が行われ、問題なければ正常にデータの移行が完了します。

〜(省略)〜
Moving slot 16375 from 192.168.24.199:6392 to 192.168.24.199:6391: 
Moving slot 16376 from 192.168.24.199:6392 to 192.168.24.199:6391: 
Moving slot 16377 from 192.168.24.199:6392 to 192.168.24.199:6391: 
Moving slot 16378 from 192.168.24.199:6392 to 192.168.24.199:6391: 
Moving slot 16379 from 192.168.24.199:6392 to 192.168.24.199:6391: 
Moving slot 16380 from 192.168.24.199:6392 to 192.168.24.199:6391: 
Moving slot 16381 from 192.168.24.199:6392 to 192.168.24.199:6391: 
Moving slot 16382 from 192.168.24.199:6392 to 192.168.24.199:6391: 
Moving slot 16383 from 192.168.24.199:6392 to 192.168.24.199:6391: 
[root@localhost ~]# 

各ノードに登録されているキー配置状況を確認します。削除するノード( 192.168.24.199:392 )に配置されていたキーが、移行先ノード( 192.168.24.199:6391 )へ移行されていることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 --cluster info 192.168.24.199:6390
192.168.24.199:6390 (ca443c4f...) -> 3 keys | 5461 slots | 0 slaves.
192.168.24.199:6392 (e582ec76...) -> 0 keys | 0 slots | 0 slaves.
192.168.24.199:6391 (26370355...) -> 2 keys | 10923 slots | 0 slaves.
[OK] 5 keys in 3 masters.
0.00 keys per slot on average.
[root@localhost ~]# 

192.168.24.199:6392 ノードを削除します。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 --cluster del-node 192.168.24.199:6392 e582ec767bced7cbbc75427947e504d790f2cd03
>>> Removing node e582ec767bced7cbbc75427947e504d790f2cd03 from cluster 192.168.24.199:6392
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
[root@localhost ~]# 

Redis のクラスタノードとノードのキー配置状況を確認します。 192.168.24.199:6391 ノードが削除されていることが確認できます。

[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 cluster nodesca443c4f54618f40e8682269bbca4033f98cb6d1 192.168.24.199:6390@16390 myself,master - 0 1548526316000 1 connected 0-5460
2637035585cf77bdf997ddec83455f4c349178ff 192.168.24.199:6391@16391 master - 0 1548526328110 4 connected 5461-16383
[root@localhost ~]# 
[root@localhost ~]# redis-cli -h 192.168.24.199 -p 6390 --cluster info 192.168.24.199:6390
192.168.24.199:6390 (ca443c4f...) -> 3 keys | 5461 slots | 0 slaves.
192.168.24.199:6391 (26370355...) -> 2 keys | 10923 slots | 0 slaves.
[OK] 5 keys in 2 masters.
0.00 keys per slot on average.
[root@localhost ~]#