Database/Redis

[Redis] 클러스터 마스터, 슬레이브 노드를 제거하는 방법

꽁담 2020. 4. 5. 02:57

노드 제거 방법


Redis 인터렉티브에서 forget 명령어를 수행하거나

redis-cli 명령어에서 del-node 옵션을 부여하여 노드를 제거할 수 있습니다.


클러스터 마스터 노드 제거 방법


먼저 2가지 조건을 만족해야 합니다.


슬롯이 비워져 있어야 합니다.

마스터 노드에 슬롯이 할당되어 있다면, 먼저 슬롯을 비워주어야 합니다.

슬롯을 비우는 방법(다른 노드로 변경하는 방법)은 아래 URL 을 참고해 주세요.

https://mozi.tistory.com/384



삭제할 마스터 노드의 복제 노드가 없어야 합니다.

노드를 삭제할 때는 다른 모든 노드로부터 forget 명령어를 수행하여야 하는데,

삭제할 마스터의 복제노드에서 forget 명령어를 수행할 수 없기 때문에 클러스터는 계속 유지되어 있습니다.


8000 마스터 노드를 삭제하고 싶을 때,

7000, 7001 노드에서는 삭제가 가능했지만 8000 마스터노드의 복제노드인 8001 에서는 삭제가 불가능합니다.

따라서 클러스터에서 해제할 수 없고 8000 마스터 노드에서는 클러스터 데이터를 계속 조회할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
127.0.0.1:7000> cluster nodes
869859e396c881b3c26f2a386c1495235225b57b 127.0.0.1:7000@17000 myself,master - 0 1586021994000 9 connected 0-16383
43597f93847795b38392bd496b60e6a3825ef889 127.0.0.1:8001@18001 slave 1b299b2e52ab3210f8d53599dcefff43f6ab6916 0 1586021995349 8 connected
1b299b2e52ab3210f8d53599dcefff43f6ab6916 127.0.0.1:8000@18000 master - 0 1586021994731 8 connected
e8b8e9115aab2a8bb42ec9aff1c62f1aeb3cc10c 127.0.0.1:7001@17001 slave 869859e396c881b3c26f2a386c1495235225b57b 0 1586021994000 9 connected
 
127.0.0.1:7000> cluster forget 1b299b2e52ab3210f8d53599dcefff43f6ab6916
OK
 
127.0.0.1:7000> cluster nodes
869859e396c881b3c26f2a386c1495235225b57b 127.0.0.1:7000@17000 myself,master - 0 1586022050000 9 connected 0-16383
43597f93847795b38392bd496b60e6a3825ef889 127.0.0.1:8001@18001 slave - 0 1586022050468 8 connected
e8b8e9115aab2a8bb42ec9aff1c62f1aeb3cc10c 127.0.0.1:7001@17001 slave 869859e396c881b3c26f2a386c1495235225b57b 0 1586022051008 9 connected
 
 
 
127.0.0.1:7001> cluster nodes
1b299b2e52ab3210f8d53599dcefff43f6ab6916 127.0.0.1:8000@18000 master - 0 1586022078482 8 connected
43597f93847795b38392bd496b60e6a3825ef889 127.0.0.1:8001@18001 slave 1b299b2e52ab3210f8d53599dcefff43f6ab6916 0 1586022078000 8 connected
e8b8e9115aab2a8bb42ec9aff1c62f1aeb3cc10c 127.0.0.1:7001@17001 myself,slave 869859e396c881b3c26f2a386c1495235225b57b 0 1586022077000 0 connected
869859e396c881b3c26f2a386c1495235225b57b 127.0.0.1:7000@17000 master - 0 1586022078381 9 connected 0-16383
 
127.0.0.1:7001> cluster forget 1b299b2e52ab3210f8d53599dcefff43f6ab6916
OK
 
127.0.0.1:7001> cluster nodes
43597f93847795b38392bd496b60e6a3825ef889 127.0.0.1:8001@18001 slave - 0 1586022108000 8 connected
e8b8e9115aab2a8bb42ec9aff1c62f1aeb3cc10c 127.0.0.1:7001@17001 myself,slave 869859e396c881b3c26f2a386c1495235225b57b 0 1586022107000 0 connected
869859e396c881b3c26f2a386c1495235225b57b 127.0.0.1:7000@17000 master - 0 1586022108233 9 connected 0-16383
 
 
 
127.0.0.1:8001> cluster nodes
1b299b2e52ab3210f8d53599dcefff43f6ab6916 127.0.0.1:8000@18000 master - 0 1586022133508 8 connected
869859e396c881b3c26f2a386c1495235225b57b 127.0.0.1:7000@17000 master - 0 1586022133608 9 connected 0-16383
43597f93847795b38392bd496b60e6a3825ef889 127.0.0.1:8001@18001 myself,slave 1b299b2e52ab3210f8d53599dcefff43f6ab6916 0 1586022133000 0 connected
e8b8e9115aab2a8bb42ec9aff1c62f1aeb3cc10c 127.0.0.1:7001@17001 slave 869859e396c881b3c26f2a386c1495235225b57b 0 1586022133098 9 connected
 
127.0.0.1:8001> cluster forget 1b299b2e52ab3210f8d53599dcefff43f6ab6916
(error) ERR Can`t forget my master!
 
127.0.0.1:8000> get key
-> Redirected to slot [12539] located at 127.0.0.1:7000
"mozi"
cs


혹은 redis-cli 명령어에서 del-node 명령어로도 진행할 수 있습니다.

이 때는 del-node 뒤에 삭제할 IP, Port, 노드 ID 를 입력해 주면 됩니다.

1
2
3
4
5
6
$ redis-cli --cluster del-node 127.0.0.1:8000 1b299b2e52ab3210f8d53599dcefff43f6ab6916
>>> Removing node 1b299b2e52ab3210f8d53599dcefff43f6ab6916 from cluster 127.0.0.1:8000
>>> Sending CLUSTER FORGET messages to the cluster...
>>> 127.0.0.1:8001 as replica of 127.0.0.1:8000
Node 127.0.0.1:8001 replied with error:
ERR Can't forget my master!
cs


슬롯도 없고 복제노드도 없다면 마스터 노드를 삭제해 줍니다.

redis-cli 를 통해서 진행하면 모든 노드에서 한번에 삭제가 진행되고 삭제한 마스터 노드는 SHUTDOWN 됩니다.

1
2
3
4
5
6
7
8
$ redis-cli --cluster del-node 127.0.0.1:8000 1b299b2e52ab3210f8d53599dcefff43f6ab6916
>>> Removing node 1b299b2e52ab3210f8d53599dcefff43f6ab6916 from cluster 127.0.0.1:8000
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
 
127.0.0.1:7000> cluster nodes
869859e396c881b3c26f2a386c1495235225b57b 127.0.0.1:7000@17000 myself,master - 0 1586022855000 9 connected 0-16383
e8b8e9115aab2a8bb42ec9aff1c62f1aeb3cc10c 127.0.0.1:7001@17001 slave 869859e396c881b3c26f2a386c1495235225b57b 0 1586022870303 9 connected
cs


redis 인터랙티브 창에서 forget 명령어로 진행하는 경우에는

모든 노드(삭제노드 제외)에서 일일이 수행해주어야 하고, 마지막으로 마스터 노드에서는 SHUTDOWN 도 수기로 해주어야 합니다.



클러스터 슬레이브 노드 제거 방법



마스터 노드를 삭제해 주듯이 진행합니다.

redis-cli 를 통해서 진행하면 모든 노드에서 한번에 삭제가 진행되고 삭제한 마스터 노드는 SHUTDOWN 됩니다.


1
2
3
4
5
6
7
8
9
$ redis-cli --cluster del-node 127.0.0.1:8001 43597f93847795b38392bd496b60e6a3825ef889
>>> Removing node 43597f93847795b38392bd496b60e6a3825ef889 from cluster 127.0.0.1:8001
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
 
127.0.0.1:8000> cluster nodes
e8b8e9115aab2a8bb42ec9aff1c62f1aeb3cc10c 127.0.0.1:7001@17001 slave 869859e396c881b3c26f2a386c1495235225b57b 0 1586022791577 9 connected
869859e396c881b3c26f2a386c1495235225b57b 127.0.0.1:7000@17000 master - 0 1586022792597 9 connected 0-16383
1b299b2e52ab3210f8d53599dcefff43f6ab6916 127.0.0.1:8000@18000 myself,master - 0 1586022791000 8 connected
cs


redis 인터랙티브 창에서 forget 명령어로 진행하는 경우에는

모든 노드(삭제노드 제외)에서 일일이 수행해주어야 하고, 마지막으로 삭제할 노드에서 SHUTDOWN 도 수기로 해주어야 합니다.