소개
이 랩에서는 Redis 클러스터를 관리하는 방법을 배우게 됩니다. 이 랩은 클러스터 초기화, 노드 추가, 클러스터 상태 확인, 슬롯 재분배 등 필수적인 클러스터 관리 작업에 중점을 둡니다.
먼저, 초기 구성을 자동화하는 redis-cli --cluster 명령을 사용하여 Redis 클러스터를 초기화하는 것으로 시작합니다. 그런 다음, CLUSTER MEET를 사용하여 새로운 노드를 추가하는 방법을 배우게 됩니다. 다음으로, CLUSTER INFO를 사용하여 클러스터의 상태를 확인합니다. 마지막으로, 클러스터의 균형을 맞추기 위해 CLUSTER SETSLOT을 사용하여 노드 간에 슬롯을 재분배합니다.
Redis 클러스터 초기화
이 단계에서는 redis-cli --cluster create 명령을 사용하여 Redis 클러스터를 초기화합니다. 이 명령은 작동하는 Redis 클러스터를 설정하는 프로세스를 단순화합니다.
Redis 클러스터란 무엇인가요?
Redis 클러스터는 여러 Redis 노드에 데이터를 자동으로 분산시키는 분산 설정입니다. 이를 통해 Redis 배포를 수평적으로 확장하고 단일 Redis 인스턴스가 처리할 수 있는 것보다 더 큰 데이터 세트를 관리할 수 있습니다.
redis-cli --cluster create를 사용하는 이유는 무엇인가요?
redis-cli --cluster create 명령은 Redis 클러스터를 생성, 관리 및 상호 작용하는 간단한 방법을 제공합니다. 초기 구성 및 노드 검색을 자동화하여 클러스터 생성을 더 쉽게 만듭니다.
단계:
Redis 인스턴스 시작:
먼저, 여러 Redis 인스턴스를 구성하고 시작해야 합니다. 이 랩에서는 7000 에서 7005 까지의 포트에서 실행되는 6 개의 인스턴스를 사용합니다. 각 인스턴스는
cluster-enabled yes로 구성되어야 합니다.이를 위해 다음 명령을 사용하여 구성 파일을 만들고 Redis 인스턴스를 시작할 수 있습니다. 이러한 명령은 데모 목적으로 사용됩니다. 설정 스크립트가 이미 이러한 인스턴스를 구성하고 시작했습니다.
REDIS_CONF="/etc/redis/redis.conf" for port in 7000 7001 7002 7003 7004 7005; do CONF_FILE="/etc/redis/redis-${port}.conf" sudo cp "$REDIS_CONF" "$CONF_FILE" sudo sed -i "s/^port 6379/port ${port}/g" "$CONF_FILE" sudo sed -i "s/^#cluster-enabled yes/cluster-enabled yes/g" "$CONF_FILE" sudo sed -i "s/^#cluster-config-file nodes.conf/cluster-config-file nodes-${port}.conf/g" "$CONF_FILE" sudo sed -i "s/^#cluster-node-timeout 15000/cluster-node-timeout 15000/g" "$CONF_FILE" sudo sed -i "s/^#appendonly no/appendonly yes/g" "$CONF_FILE" sudo redis-server "$CONF_FILE" & done sleep 5클러스터 생성:
이제
redis-cli --cluster create명령을 사용하여 클러스터를 생성합니다. 이 명령에는 초기 노드의 IP 주소와 포트가 필요합니다.터미널을 열고 다음 명령을 실행합니다.
redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1redis-cli --cluster create: 클러스터 생성 프로세스를 시작합니다.127.0.0.1:7000 127.0.0.1:7001 ... 127.0.0.1:7005: Redis 인스턴스의 주소와 포트입니다.--cluster-replicas 1: 각 마스터 노드가 하나의 레플리카를 갖도록 지정합니다.
클러스터 생성 확인:
redis-cli도구는 클러스터 생성을 확인하라는 메시지를 표시합니다.yes를 입력하고 Enter 키를 누릅니다.>>> Creating cluster >>> Performing hash slots allocation on 6 nodes... >>> Master[0] -> Slots 0 - 5460 >>> Master[1] -> Slots 5461 - 10922 >>> Master[2] -> Slots 10923 - 16383 >>> Adding replica node to Master[0] >>> Adding replica node to Master[1] >>> Adding replica node to Master[2] >>> M: 49a4928719291928192819281928192819281928 127.0.0.1:7000 slots:[0-5460] (5461 slots) master >>> M: 9281928192819281928192819281928192819281 127.0.0.1:7001 slots:[5461-10922] (5462 slots) master >>> M: 19281928192819281928192819281928192819281 127.0.0.1:7002 slots:[10923-16383] (5461 slots) master >>> S: 81928192819281928192819281928192819281928 127.0.0.1:7003 replicates 49a4928719291928192819281928192819281928 >>> S: 28192819281928192819281928192819281928192 127.0.0.1:7004 replicates 9281928192819281928192819281928192819281 >>> S: 928192819281928192819281928192819281928192 127.0.0.1:7005 replicates 19281928192819281928192819281928192819281 >>> Can I set the above configuration? (type 'yes' to accept): yes >>> Slots 0-5460 assigned to node 49a4928719291928192819281928192819281928 >>> Slots 5461-10922 assigned to node 9281928192819281928192819281928192819281 >>> Slots 10923-16383 assigned to node 19281928192819281928192819281928192819281 >>> Adding replica 81928192819281928192819281928192819281928 to 49a4928719291928192819281928192819281928 >>> Adding replica 28192819281928192819281928192819281928192 to 9281928192819281928192819281928192819281 >>> Adding replica 928192819281928192819281928192819281928192 to 19281928192819281928192819281928192819281 >>> [OK] All nodes agree about the cluster configuration. >>> >>> Check cluster info >>> >>> Nodes >>> M: 49a4928719291928192819281928192819281928 127.0.0.1:7000 slots:[0-5460] (5461 slots) master 1 additional replica(s) >>> M: 9281928192819281928192819281928192819281 127.0.0.1:7001 slots:[5461-10922] (5462 slots) master 1 additional replica(s) >>> M: 19281928192819281928192819281928192819281 127.0.0.1:7002 slots:[10923-16383] (5461 slots) master 1 additional replica(s) >>> S: 81928192819281928192819281928192819281928 127.0.0.1:7003 replicates 49a4928719291928192819281928192819281928 >>> S: 28192819281928192819281928192819281928192 127.0.0.1:7004 replicates 9281928192819281928192819281928192819281 >>> S: 928192819281928192819281928192819281928192 127.0.0.1:7005 replicates 19281928192819281928192819281928192819281 >>> [OK] All nodes agree about the cluster configuration. >>> All 16384 slots covered.이 출력은 각 마스터 노드에 대한 슬롯 할당과 레플리카 할당을 보여줍니다.
클러스터에 연결:
redis-cli를 사용하여 Redis 클러스터에 연결합니다. 이렇게 하면 클러스터에 대해 명령을 실행할 수 있습니다.redis-cli -h 127.0.0.1 -p 7000redis-cli종료:명령이 기록되도록 하려면
redis-cli세션을 종료합니다.exit
이제 Redis 클러스터를 성공적으로 초기화했습니다. 다음 단계에서는 노드 추가, 클러스터 상태 확인 및 슬롯 재분배 방법을 살펴봅니다.
클러스터에 새 노드 추가
이 단계에서는 CLUSTER MEET 명령을 사용하여 기존 Redis 클러스터에 새 노드를 추가하는 방법을 배웁니다. 이 명령은 클러스터의 용량을 확장하고 고가용성을 보장하는 데 필수적입니다.
CLUSTER MEET 이해
CLUSTER MEET 명령은 클러스터에 새로운 Redis 노드를 추가합니다. 노드가 이 명령을 받으면 지정된 노드에 연결을 시도하고 클러스터의 일부가 되기 위한 핸드셰이크 프로세스를 시작합니다.
사전 요구 사항:
- 이전 단계에서 설명한 대로 초기화된 Redis 클러스터.
- 클러스터의 일부가 되도록 실행 및 구성되었지만 아직 연결되지 않은 새 Redis 인스턴스. 이 랩에서는 포트 7006 에서 실행되는 새 인스턴스가 있다고 가정합니다. 이 인스턴스는
cluster-enabled yes구성 옵션으로 시작해야 합니다. 설정 스크립트가 이미 이 인스턴스를 구성하고 시작했습니다.
단계:
기존 노드에 연결:
redis-cli를 사용하여 클러스터의 기존 노드 중 하나에 연결합니다.CLUSTER MEET명령이 클러스터 전체에 정보를 전파하므로 어떤 노드에 연결하는지는 중요하지 않습니다.redis-cli -h 127.0.0.1 -p 7000CLUSTER MEET명령 사용:이제 클러스터의 노드에 연결되었으므로
CLUSTER MEET명령을 사용하여 새 노드 (포트 7006) 를 추가합니다.CLUSTER MEET 127.0.0.1 7006CLUSTER MEET: 새 노드를 추가하는 명령입니다.127.0.0.1: 새 노드의 IP 주소입니다.7006: 새 노드의 포트 번호입니다.
다음 출력이 표시되어야 합니다.
OK이는 명령이 성공적으로 전송되었음을 나타냅니다.
redis-cli종료:명령이 기록되도록 하려면
redis-cli세션을 종료합니다.exit
Redis 클러스터에 새 노드를 성공적으로 추가했습니다. 다음 단계에서는 클러스터의 상태를 확인합니다.
클러스터 상태 확인
이 단계에서는 CLUSTER INFO 명령을 사용하여 Redis 클러스터의 상태를 확인하는 방법을 배웁니다. 이 명령은 클러스터의 전반적인 상태에 대한 귀중한 정보를 제공합니다.
CLUSTER INFO 이해
CLUSTER INFO 명령은 Redis 클러스터에 대한 정보를 반환하며, 이를 사용하여 상태를 모니터링하고 문제를 진단할 수 있습니다.
사전 요구 사항:
- 이전 단계에서 설명한 대로 초기화되고 새 노드가 추가된 Redis 클러스터.
단계:
클러스터 노드에 연결:
redis-cli를 사용하여 클러스터의 노드 중 하나에 연결합니다.redis-cli -h 127.0.0.1 -p 7000CLUSTER INFO명령 실행:CLUSTER INFO명령을 사용하여 클러스터 정보를 검색합니다.CLUSTER INFO다음과 유사한 출력이 표시되어야 합니다.
cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:7 cluster_size:3 cluster_current_epoch:7 cluster_my_epoch:7 ...출력 해석:
다음은 몇 가지 주요 지표에 대한 설명입니다.
cluster_state:ok: 클러스터가 정상 상태입니다.cluster_slots_assigned:16384: 노드에 할당된 슬롯 수입니다.cluster_slots_ok:16384: 올바르게 작동하는 슬롯 수입니다.cluster_slots_pfail:0: "잠재적 실패" 상태의 슬롯 수입니다.cluster_slots_fail:0: "실패" 상태의 슬롯 수입니다.cluster_known_nodes:7: 현재 노드가 알고 있는 총 노드 수입니다.cluster_size:3: 클러스터의 마스터 노드 수입니다.
redis-cli종료:명령이 기록되도록 하려면
redis-cli세션을 종료합니다.exit
CLUSTER INFO 명령을 사용하여 Redis 클러스터의 상태를 성공적으로 확인했습니다.
새 노드로 슬롯 재분배
이 단계에서는 redis-cli --cluster reshard 명령을 사용하여 Redis 클러스터에서 슬롯을 재분배하는 방법을 배웁니다. 이는 특히 새 노드를 추가한 후 데이터를 균등하게 분산하는 데 중요합니다.
Redis 슬롯 및 재분배 이해
Redis 클러스터는 키 공간을 16384 개의 슬롯으로 나눕니다. 각 마스터 노드는 이러한 슬롯의 하위 집합을 담당합니다. 새 노드를 추가하면 처음에는 슬롯을 소유하지 않습니다. 재분배는 기존 노드에서 새 노드로 슬롯을 이동하여 데이터와 워크로드를 균형 있게 조정합니다.
단계:
redis-cli --cluster를 사용하여 클러스터에 연결:재분배 작업을 수행하려면
redis-cli --cluster reshard명령을 사용합니다. 이 명령은 클러스터 전체에서 슬롯을 재분배하는 대화형 방식을 제공합니다.터미널을 열고 다음 명령을 실행합니다.
redis-cli --cluster reshard 127.0.0.1:7000이 명령은
127.0.0.1:7000의 노드를 통해 Redis 클러스터에 연결하고 재분배 프로세스를 시작합니다.이동할 슬롯 수 지정:
redis-cli도구는 이동할 슬롯 수를 입력하라는 메시지를 표시합니다. 이 예에서는 새 노드로 101 개의 슬롯을 이동해 보겠습니다.How many slots do you want to move? (default: all)101을 입력하고 Enter 키를 누릅니다.대상 노드 ID 입력:
다음으로, 도구는 대상 노드의 노드 ID 를 입력하라는 메시지를 표시합니다. 대상 노드는 이전 단계에서 추가한 새 노드 (포트 7006) 입니다. 노드 ID 를 찾으려면 이전 단계에서와 같이
CLUSTER NODES명령을 사용하거나, 다음 명령을 사용하여 노드 ID 를 직접 얻을 수 있습니다.redis-cli -h 127.0.0.1 -p 7006 cluster nodes | grep myself | awk '{print $1}'출력에서 노드 ID 를 복사합니다.
redis-cli도구는 다음 메시지를 표시합니다.What is the receiving node ID?노드 ID 를 붙여넣고 Enter 키를 누릅니다.
소스 노드 지정:
도구는 슬롯을 가져올 소스 노드를 지정하라는 메시지를 표시합니다.
all을 입력하여 모든 기존 마스터 노드에서 슬롯을 재분배할 수 있습니다.Please enter all the source node IDs. Type 'all' to use all the nodes as source nodes for the hash slots. Type 'done' to stop entering IDs.all을 입력하고 Enter 키를 누릅니다.재분배 계획 확인:
redis-cli도구는 재분배 계획을 표시하고 확인하라는 메시지를 표시합니다.Do you want to proceed with the reshard plan? (type 'yes' to accept):yes를 입력하고 Enter 키를 눌러 재분배 프로세스를 시작합니다.재분배 완료 대기:
이제
redis-cli도구는 소스 노드에서 대상 노드로 슬롯을 이동합니다. 이 프로세스는 클러스터의 데이터 양에 따라 시간이 걸릴 수 있습니다. 슬롯이 이동되는 동안 진행률 메시지가 표시됩니다.redis-cli종료:재분배가 완료되면
redis-cli세션을 종료합니다.exit
이제 redis-cli --cluster reshard 명령을 사용하여 Redis 클러스터에서 슬롯을 성공적으로 재분배했습니다. 이렇게 하면 새 노드를 포함하여 클러스터 전체에 데이터가 더 균등하게 분산됩니다.
요약
이 랩에서는 Redis 클러스터를 관리하는 방법을 배웠습니다. redis-cli --cluster create를 사용하여 클러스터를 초기화하는 것으로 시작하여, CLUSTER MEET로 새 노드를 추가했습니다. CLUSTER INFO를 사용하여 클러스터의 상태를 확인하고, 마지막으로 redis-cli --cluster reshard로 슬롯을 재분배하여 클러스터의 균형을 맞췄습니다. 이는 Redis 클러스터를 관리하고 확장성 및 고가용성을 보장하는 데 필수적인 작업입니다.


