Database/Redis

[Redis] redis-cli create 옵션으로 클러스터 노드 마스터/복제 구성방법과 주의점

꽁담 2020. 3. 23. 02:16

클러스터 노드 구성 방법


redis-cli 혹은 redis-trib.rb 의 create 옵션을 사용하여 클러스터를 구성하는 방법

create 옵션을 사용하여 클러스터를 구성할 수 있으며, 이 때는 Redis 엔진에 의해 마스터/복제 노드가 지정됩니다.

마스터는 최소 3개 이상으로 구성되어야 합니다.

모든 마스터는 동일한 복제 노드 수를 가지고 있어야 합니다.


* redis-trib.rb는 레디스5.0 버전부터 redis-cli로 대체되었으며 여기에서는 다루지 않습니다.


매뉴얼을 사용하여 개별 구성하는 방법

마스터/복제노드를 사용자가 설정할 수 있습니다.

마스터와 복제노드를 사용자가 원하는 만큼 개별적으로 설정할 수 있습니다.


매뉴얼을 사용하여 개별 구성하는 방법을 권장드리며 이유는 포스팅 하단에 작성되어 있습니다.



redis-cli 를 사용한 클러스터 노드 구성 방법


마스터 노드 3개를 구성하는 방법 (총 3노드)

1
2
3
4
5
6
7
8
9
10
11
$ redis-server 7000/redis_7000.conf
$ redis-server 8000/redis_8000.conf
$ redis-server 9000/redis_9000.conf
 
$ redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:8000 127.0.0.1:9000
 
$ redis-cli --7000
127.0.0.1:7000> cluster nodes
8b27f9ee6a0389ff9902883f298c24dbbcd7e192 127.0.0.1:7000@17000 myself,master - 0 1584891282000 1 connected 0-5460
f3ebf6b11ee07bb404d2a2d1b8e76c58916873d0 127.0.0.1:9000@19000 master - 0 1584891283424 3 connected 10923-16383
d0d90875d0cab217ea8c5470b6f42877dacb647a 127.0.0.1:8000@18000 master - 0 1584891283000 2 connected 5461-10922
cs


마스터 노드 3개와 각 마스터에 복제 노드 3개씩 구성하는 방법 (총 6노드)

* --cluster-replicas 값이 2인경우 마스터 3개이고 각 마스터에 복제노드가 2개씩 구성되어야 하기 때문에 총 9개의 노드가 필요합니다.
* 마스터서버가 구성된 후, 이후 나열되는 복제서버는 마스터노드에 랜덤으로 지정됩니다. (단, 복제수는 맞춤)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ redis-server 7000/redis_7000.conf
$ redis-server 7001/redis_7001.conf
$ redis-server 8000/redis_8000.conf
$ redis-server 8001/redis_8001.conf
$ redis-server 9000/redis_9000.conf
$ redis-server 9001/redis_9001.conf
 
$ redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:8000 127.0.0.1:9000 \
127.0.0.1:7001 127.0.0.1:8001 127.0.0.1:9001 --cluster-replicas 1
 
$ redis-cli --7000
127.0.0.1:7000> cluster nodes
0cd9d0a05e47e43b9f75261c5b38758ae4e76f56 127.0.0.1:8000@18000 master - 0 1584892014565 2 connected 5461-10922
8ad74b2b153b29d75e4d09b88535c0bd1da85513 127.0.0.1:8001@18001 slave 0cd9d0a05e47e43b9f75261c5b38758ae4e76f56 0 1584892014000 5 connected
85dbfd72292ef1a6a0afa0ca71f7009abe76d8bc 127.0.0.1:9001@19001 slave e8f98e267e5bec09b6cd392c08d6c627c9006624 0 1584892014565 6 connected
2503fb62e1bc1d4e0a313062f359e8035b6dca3b 127.0.0.1:7000@17000 myself,master - 0 1584892014000 1 connected 0-5460
0d9b52fee36407c810dffb0baa074268bfd05aa0 127.0.0.1:7001@17001 slave 2503fb62e1bc1d4e0a313062f359e8035b6dca3b 0 1584892014000 4 connected
e8f98e267e5bec09b6cd392c08d6c627c9006624 127.0.0.1:9000@19000 master - 0 1584892014969 3 connected 10923-16383
cs


마스터 노드 2개와 복제노드 1개로 구성하려는 경우 (총 3노드 - 오류발생)

redis-cli 를 사용하여 클러스터를 구성할 때는 마스터 노드가 최소 3개 이상이어야 합니다.

1
2
3
4
5
6
7
8
9
10
$ redis-server 7000/redis_7000.conf
$ redis-server 8000/redis_8000.conf
$ redis-server 9000/redis_9000.conf
 
$ redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:8000 127.0.0.1:9000 --cluster-replicas 1
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 3 nodes and 1 replicas per node.
*** At least 6 nodes are required.
 
cs


마스터 노드 3개와 복제노드 2개로 구성하려는 경우 (총 5노드 - 오류 발생)

redis-cli 를 사용하여 클러스터를 구성할 때는 마스터와 복제노드의 매핑 수가 일치해야 합니다.

1
2
3
4
5
6
7
8
9
10
11
12
$ redis-server 7000/redis_7000.conf
$ redis-server 8000/redis_8000.conf
$ redis-server 9000/redis_9000.conf
$ redis-server 7001/redis_7001.conf
$ redis-server 8001/redis_8001.conf
 
$ redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:8000 127.0.0.1:9000 \
127.0.0.1:7001 127.0.0.1:8001 --cluster-replicas 1 
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 5 nodes and 1 replicas per node.
*** At least 6 nodes are required
cs


[주의] redis-cli 에서는 복제노드를 구성할 때 특징


앞에 나열한 서버의 노드를 마스터로 구성합니다.

이후 나열한 서버는 Redis 엔진에서 랜덤으로 마스터서버의 복제서버로 구성됩니다.

즉, 작성한 순서대로 마스터 서버의 노드의 복제서버로 지정되지 않습니다.


Line 17-22 : 작성한 순서와 별개로 마스터서버의 복제서버로 지정되는 것을 확인할 수 있습니다. 

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
$ redis-server 7000/redis_7000.conf
$ redis-server 8000/redis_8000.conf
$ redis-server 9000/redis_9000.conf
$ redis-server 7001/redis_7001.conf
$ redis-server 8001/redis_8001.conf
$ redis-server 9001/redis_9001.conf
$ redis-server 7002/redis_7002.conf
$ redis-server 8002/redis_8002.conf
$ redis-server 9002/redis_9002.conf
 
$ redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:8000 127.0.0.1:9000 \
127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:8001 \
127.0.0.1:8002 127.0.0.1:9001 127.0.0.1:9002 --cluster-replicas 2
>>> Performing hash slots allocation on 9 nodes...
Master[0-> Slots 0 - 5460
Master[1-> Slots 5461 - 10922
Master[2-> Slots 10923 - 16383
Adding replica 127.0.0.1:7002 to 127.0.0.1:7000
Adding replica 127.0.0.1:8001 to 127.0.0.1:7000
Adding replica 127.0.0.1:8002 to 127.0.0.1:8000
Adding replica 127.0.0.1:9001 to 127.0.0.1:8000
Adding replica 127.0.0.1:9002 to 127.0.0.1:9000
Adding replica 127.0.0.1:7001 to 127.0.0.1:9000
 
 
$ redis-cli --7000
127.0.0.1:7000> cluster nodes
d2c858c6730f7344f40c0dfab26dea9a0e5c4073 127.0.0.1:8000@18000 master - 0 1584896829028 2 connected 5461-10922
cca90e44bfa3ab98fe94307f2b3e7a7116f155a6 127.0.0.1:9002@19002 slave 6fcd9c2d6a363ce17fc7ab5bccb5f32b9fa05a09 0 1584896828521 9 connected
48e4f908a8109453a92fd11056cf9c28c37869aa 127.0.0.1:9001@19001 slave d2c858c6730f7344f40c0dfab26dea9a0e5c4073 0 1584896829028 8 connected
dfa40c112a8ebbc95d64b4631a23da29a1a763df 127.0.0.1:7002@17002 slave 79bc08efe700e340567713a7f8a56106e848d855 0 1584896828521 5 connected
ee5ceb4a6570fdebd2e76e1aed971365a63de21f 127.0.0.1:8002@18002 slave d2c858c6730f7344f40c0dfab26dea9a0e5c4073 0 1584896828000 7 connected
79bc08efe700e340567713a7f8a56106e848d855 127.0.0.1:9000@19000 master - 0 1584896829028 3 connected 10923-16383
6fcd9c2d6a363ce17fc7ab5bccb5f32b9fa05a09 127.0.0.1:7000@17000 myself,master - 0 1584896828000 1 connected 0-5460
fa9da1b28d54725601f490fb97140e9cad1efe0c 127.0.0.1:8001@18001 slave 79bc08efe700e340567713a7f8a56106e848d855 0 1584896828014 6 connected
c64911edfcfcea2236b77b67cb9063e5f0449133 127.0.0.1:7001@17001 slave 6fcd9c2d6a363ce17fc7ab5bccb5f32b9fa05a09 0 1584896828521 4 connected
cs



다음 포스팅에서는 매뉴얼대로 구성하는 방법에 대해 포스팅해보겠습니다.