Redis 클러스터 구동 전 사전 설정
redis.conf
3개의 노드를 구성할 conf 파일을 설정해 줍니다.
cluster-enabled : 클러스터로 사용합니다.
cluster-config-file : 노드별로 클러스터 노드 정보를 conf 파일에 저장합니다.
cluster-node-timeout : 노드간 통신이 되지 않아 timeout 되는 시간을 설정합니다.
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 | $ cat redis_7000.conf cluster-enabled yes cluster-config-file nodes-7000.conf cluster-node-timeout 3000 port 7000 dir /home/psh/7000 appendonly yes daemonize yes logfile "redis_7000.log" $ cat redis_8000.conf cluster-enabled yes cluster-config-file nodes-8000.conf cluster-node-timeout 3000 port 8000 dir /home/psh/8000 appendonly yes daemonize yes logfile "redis_8000.log" $ cat redis_9000.conf cluster-enabled yes cluster-config-file nodes-9000.conf cluster-node-timeout 3000 port 9000 dir /home/psh/9000 appendonly yes daemonize yes logfile "redis_9000.log" | cs |
port
클러스터에서는 conf파일에 설정한 '포트 + 10000' 번의 추가 포트를 열어주어야 합니다.
이 포트는 클러스터끼리의 통신을 위해 사용됩니다.
위의 conf 파일에서 7000, 8000, 9000 의 포트를 사용했으므로 17000, 18000, 19000 의 포트를 추가로 통신허용 해야합니다.
최소 노드
클러스터 구성을 위해서는 최소 3개의 노드가 필요합니다. ( redis-cli 명령어 사용 시 )
3개의 노드가 필요한 이유는 정족 수 때문입니다.
(정족 수는 https://mozi.tistory.com/378 링크의 맨 하단을 참고해 주세요)
클러스터 구성 방법
1. conf 파일에서 구성한 클러스터를 구동합니다.
1 2 3 | $ redis-server 7000/redis_7000.conf $ redis-server 8000/redis_8000.conf $ redis-server 9000/redis_9000.conf | cs |
로그를 확인하면 아래와 같이 클러스터 모드라는 것을 알 수 있습니다.
참고로 레디스는 시작했지만 클러스터까지 구성된 상태는 아닙니다.
1 | 4279:M 22 Mar 2020 02:13:57.005 * Running mode=cluster, port=7000. | cs |
2. 클러스터로 묶어줍니다.
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 | $ redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:8000 127.0.0.1:9000 >>> Performing hash slots allocation on 3 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 M: 8b27f9ee6a0389ff9902883f298c24dbbcd7e192 127.0.0.1:7000 slots:[0-5460] (5461 slots) master M: d0d90875d0cab217ea8c5470b6f42877dacb647a 127.0.0.1:8000 slots:[5461-10922] (5462 slots) master M: f3ebf6b11ee07bb404d2a2d1b8e76c58916873d0 127.0.0.1:9000 slots:[10923-16383] (5461 slots) master Can I set the above configuration? (type 'yes' to accept): yes >>> Nodes configuration updated >>> Assign a different config epoch to each node >>> Sending CLUSTER MEET messages to join the cluster Waiting for the cluster to join .. >>> Performing Cluster Check (using node 127.0.0.1:7000) M: 8b27f9ee6a0389ff9902883f298c24dbbcd7e192 127.0.0.1:7000 slots:[0-5460] (5461 slots) master M: f3ebf6b11ee07bb404d2a2d1b8e76c58916873d0 127.0.0.1:9000 slots:[10923-16383] (5461 slots) master M: d0d90875d0cab217ea8c5470b6f42877dacb647a 127.0.0.1:8000 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 | cs |
Line 1 : 클러스터로 구성하는 명령어 입니다.
Line 4-6 : 마스터별로 할당되는 슬롯범위를 출력합니다.
Line 7-12 : 노드별로 ID값과 슬롯번호를 구성합니다.
Line 16 : 클러스터에 조인합니다.
Line 26-29 : 클러스터가 구성이 되었습니다.
그리고 각 노드의 로그파일에는 클러스터가 구성되었다는 로그가 기록됩니다.
1 | 4279:M 22 Mar 2020 02:17:46.823 # Cluster state changed: ok | cs |
클러스터 접속 방법 및 정보 확인방법
클러스터 접속 방법
클러스터로 접속할 때는 -c 옵션을 사용해주어야 합니다.
아래 cluster info 에서 접속할 때 명령어를 참고해 주세요.
cluster info 명령어
클러스터 상태 정보를 확인할 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $ redis-cli -c -p 7000 127.0.0.1:7000> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:3 cluster_size:3 cluster_current_epoch:3 cluster_my_epoch:1 cluster_stats_messages_ping_sent:403 cluster_stats_messages_pong_sent:400 cluster_stats_messages_sent:803 cluster_stats_messages_ping_received:398 cluster_stats_messages_pong_received:403 cluster_stats_messages_meet_received:2 cluster_stats_messages_received:803 | cs |
Line 3 : 클러스터가 정상인 상태입니다.
Line 4 : 클러스터에 할당된 슬롯 개수 입니다.
Line 5 : 현재 구동된 클러스터에 할당된 슬롯 개수 입니다. (특정 노드 다운 시, 해당 노드의 슬롯 개수가 빠지게 됩니다.)
Line 7 : 인식하지 못하는 슬롯 개수입니다.
Line 8 : 클러스터에 구성된 모든 노드 수 입니다.
Line 9 : 클러스터 마스터 노드 수 입니다.
cluster nodes 명령어
각 클러스터 노드 ID와 IP, PORT 를 확인할 수 있습니다.
1 2 3 4 | 127.0.0.1:7000> cluster nodes f3ebf6b11ee07bb404d2a2d1b8e76c58916873d0 127.0.0.1:9000@19000 master - 0 1584811339022 3 connected 10923-16383 d0d90875d0cab217ea8c5470b6f42877dacb647a 127.0.0.1:8000@18000 master - 0 1584811338510 2 connected 5461-10922 8b27f9ee6a0389ff9902883f298c24dbbcd7e192 127.0.0.1:7000@17000 myself,master - 0 1584811338000 1 connected 0-5460 | cs |
클러스터 모드에서 클라이언트 데이터 처리방법
클라이언트 데이터 처리방법
클라이언트는 레디스 서버에 접속해서 각 서버에 할당된 슬롯 정보를 먼저 가져옵니다.
키 입력 시, 서버와 동일한 Hash 알고리즘으로 슬롯값을 구한 후 해당 슬롯에 맞는 노드에 접속하여 요청을 처리합니다.
set, get 테스트 해보기
key에 mozi값을 할당할 때, Hash 함수에 의해 12539 슬롯값으로 지정되었고, 이 값은 9000노드에 있어 Redirect 되었습니다.
1 2 3 4 5 | 127.0.0.1:7000> set key mozi -> Redirected to slot [12539] located at 127.0.0.1:9000 OK 127.0.0.1:9000> get key "mozi" | cs |
다른 노드에서 key를 조회하는 경우,
클러스터 노드에서 주는 슬롯정보를 사용하여 키가있는 노드로 Redirect 되어 데이터를 가져옵니다.
1 2 3 | 127.0.0.1:7000> get key -> Redirected to slot [12539] located at 127.0.0.1:9000 "mozi" | cs |
'Database > Redis' 카테고리의 다른 글
[Redis] 클러스터 마스터노드 구성방법, 마스터 노드, 복제 노드 추가 방법 (0) | 2020.03.23 |
---|---|
[Redis] redis-cli create 옵션으로 클러스터 노드 마스터/복제 구성방법과 주의점 (0) | 2020.03.23 |
[Redis] 클러스터 개념 및 Key 할당 방법 (0) | 2020.03.22 |
[Redis] 센티넬을 사용한 자동 Failover 방법 (Failback 포함) (0) | 2020.03.19 |
[Redis] 센티넬이란, 센티넬 구동 및 모니터링 방법 (0) | 2020.03.19 |