Redis 확장: Redis 클러스터 설정 가이드
고가용성 및 수평 확장을 위한 Redis 클러스터 설정 및 관리 방법을 알아보세요. 이 단계별 가이드에는 설치, 여러 Redis 노드 구성, redis-trib.rb를 사용한 클러스터 생성, 내결함성을 위한 복제본 추가, 필수 관리 명령이 포함됩니다. Redis 배포를 확장하기 위한 필수 자료입니다.
Redis 확장 가이드: Redis 클러스터 설정하기
Redis 클러스터는 하나의 Redis 인스턴스로 데이터 크기, 트래픽 또는 가용성 목표를 감당할 수 없을 때 유용합니다. 여러 기본 노드에 키를 샤딩하고 기본 노드에 장애가 발생하면 복제본을 승격시킬 수 있습니다.
이 가이드는 현재의 redis-cli --cluster 워크플로우, 로컬 6노드 예제, 그리고 클러스터 실행 후 필요한 관리 명령어를 보여줍니다.
Redis 클러스터 개념 이해하기
Redis 클러스터는 몇 가지 실용적인 아이디어를 기반으로 구축되었습니다:
- 샤딩: Redis 클러스터는 키 공간을 16,384개의 해시 슬롯으로 나눕니다. 각 기본 노드는 슬롯 범위를 소유하며, 클러스터를 인식하는 클라이언트는 키의 슬롯을 소유한 노드로 명령을 라우팅합니다.
- 복제: 각 기본 노드는 하나 이상의 복제본을 가질 수 있습니다. 기본 노드에 장애가 발생하고 클러스터가 정족수에 도달할 수 있으면 복제본이 승격될 수 있습니다.
- 클러스터 버스: 노드는 클라이언트 포트와 클러스터 버스 포트(일반적으로 클라이언트 포트 + 10000)를 통해 서로 통신합니다. 포트
7000의 경우 버스 포트는17000입니다. - 클라이언트 지원: 애플리케이션 클라이언트는
MOVED및ASK와 같은 Redis 클러스터 리디렉션을 지원해야 합니다. 클러스터를 인식하지 못하는 클라이언트는 키가 다른 노드에 있으면 제대로 작동하지 않습니다.
사전 요구 사항
프로덕션 스타일 클러스터의 경우 최소 6개의 Redis 노드(기본 노드 3개와 각 기본 노드당 복제본 1개)를 계획하세요. 연습을 위해 한 대의 머신에서 아래 예제를 실행할 수 있지만, 프로덕션 노드는 호스트 또는 가용성 영역에 분산되어야 합니다.
또한 Redis가 설치되어 있고 redis-cli를 사용할 수 있어야 하며, 모든 노드 간에 Redis 클라이언트 포트와 클러스터 버스 포트 모두에 대한 네트워크 액세스가 가능해야 합니다. 가능하면 현재 지원되는 Redis 릴리스를 사용하세요.
Redis 클러스터 단계별 설정
이 예제는 포트 7000부터 7005까지의 6개의 로컬 Redis 프로세스를 사용합니다.
1. Redis 설치
Debian 또는 Ubuntu에서 패키지 설치는 다음과 같습니다:
sudo apt update
sudo apt install redis-server
패키지 버전은 배포판에 따라 다릅니다. 최신 Redis 릴리스가 필요한 경우 공식 Redis 패키지 또는 플랫폼의 관리형 Redis 서비스를 사용하세요.
2. 클러스터 모드를 위한 Redis 인스턴스 구성
Redis 프로세스당 하나의 디렉토리와 구성 파일을 생성합니다:
mkdir cluster
cd cluster
for port in 7000 7001 7002 7003 7004 7005; do
mkdir "$port"
cp /etc/redis/redis.conf "$port/redis.conf"
done
각 redis.conf를 편집하고 포트별 값을 설정합니다. 7000/redis.conf의 경우 다음을 사용합니다:
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
bind 127.0.0.1
7001부터 7005까지 동일한 패턴을 반복하고 port와 cluster-config-file을 모두 변경합니다. nodes-7000.conf 파일은 Redis에서 관리합니다. 직접 편집하지 마십시오.
원격 서버의 경우 127.0.0.1 대신 개인 네트워크 인터페이스에 바인딩하고, Redis 빌드 또는 서비스에서 지원하는 경우 방화벽, 인증 및 TLS로 액세스를 보호하세요.
3. Redis 인스턴스 시작
각 인스턴스를 자체 구성으로 시작합니다:
for port in 7000 7001 7002 7003 7004 7005; do
redis-server "$port/redis.conf"
done
패키지 관리자가 이미 포트 6379에서 기본 Redis 서비스를 실행 중인 경우 이 테스트 클러스터와 분리하여 유지하거나 실험하는 동안 중지하세요.
4. redis-cli --cluster로 클러스터 생성
redis-cli --cluster create를 사용하여 슬롯과 복제본을 할당합니다:
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 1
Redis는 제안된 슬롯 레이아웃을 표시하고 확인을 요청합니다. 기본 및 복제본 배치가 올바르게 보이면 yes를 입력합니다.
5. 클러스터 확인
모든 노드에서 클러스터를 확인합니다:
redis-cli -c -p 7000 CLUSTER INFO
redis-cli -c -p 7000 CLUSTER NODES
redis-cli --cluster check 127.0.0.1:7000
CLUSTER INFO는 cluster_state:ok를 표시해야 합니다. -c 플래그는 redis-cli가 클러스터 리디렉션을 따르도록 지시하며, 다른 노드에 속한 키에 대해 명령을 테스트할 때 유용합니다.
기본 쓰기 및 읽기를 시도합니다:
redis-cli -c -p 7000 SET user:1 "Ada"
redis-cli -c -p 7001 GET user:1
키가 다른 노드에서 제공하는 슬롯에 속하더라도 클러스터를 인식하는 클라이언트는 리디렉션을 따를 수 있습니다.
기존 클러스터에 복제본 추가
이미 클러스터가 있고 새 복제본을 추가하려면 클러스터 모드를 활성화하여 새 Redis 인스턴스를 시작합니다. 그런 다음 기본 노드 ID를 찾습니다:
redis-cli -p 7000 CLUSTER NODES
새 노드를 해당 기본 노드의 복제본으로 추가합니다:
redis-cli --cluster add-node \
127.0.0.1:7006 127.0.0.1:7000 \
--cluster-slave \
--cluster-master-id <master_node_id>
첫 번째 주소는 새 노드입니다. 두 번째 주소는 기존 클러스터의 연결 가능한 노드입니다. <master_node_id>를 CLUSTER NODES의 ID로 바꿉니다.
클러스터 관리
일반적인 관리 작업은 다음과 같습니다:
- 상태 확인:
redis-cli --cluster check 127.0.0.1:7000 - 기본 노드 추가:
redis-cli --cluster add-node <new_host:port> <existing_host:port> - 슬롯 리샤딩:
redis-cli --cluster reshard <existing_host:port> - 노드 제거: 기본 노드인 경우 먼저 노드에서 슬롯을 이동한 다음
redis-cli --cluster del-node <existing_host:port> <node_id>를 실행합니다. - 수동 장애 조치 테스트: 기본 노드가 아닌 복제본에서
CLUSTER FAILOVER를 실행합니다.
전체 마이그레이션 시퀀스를 알지 못하는 한 저수준 명령어로 슬롯을 수동으로 이동하지 마십시오. redis-cli --cluster 도우미는 슬롯이 일관성 없는 상태가 될 가능성을 줄여줍니다.
Redis 클러스터 모범 사례
- 최소 6개 노드 사용: 기본 노드 3개와 복제본 3개는 클러스터가 기본 노드 장애를 견딜 수 있는 여유를 제공합니다.
- 장애 도메인 전체에 복제본 분산: 가능하면 기본 노드와 해당 복제본을 동일한 호스트 또는 가용성 영역에 배치하지 마십시오.
- Redis 보안: Redis를 신뢰할 수 없는 네트워크에 직접 노출하지 마십시오. 개인 네트워킹, 방화벽 규칙, 인증 및 가능한 경우 TLS를 사용하십시오.
- 기본 노드당 메모리 계획: Redis 클러스터는 키를 샤딩하지만 각 기본 노드는 여전히 할당된 데이터, 오버헤드 및 증가를 위한 충분한 메모리가 필요합니다.
- 클러스터 인식 클라이언트 사용: 트래픽을 전환하기 전에 클라이언트 라이브러리가 Redis 클러스터를 지원하는지 확인하십시오.
- 장애 조치 및 슬롯 균형 모니터링: 메모리, 지연 시간, 거부된 연결, 복제 지연 및 클러스터 상태를 추적하십시오.
핵심 내용
실용적인 Redis 클러스터를 위해 최소 3개의 기본 노드와 기본 노드당 1개의 복제본으로 시작하고, redis-cli --cluster create로 클러스터를 생성하고, CLUSTER INFO 및 redis-cli --cluster check로 확인하십시오. 그 후 일상적인 작업은 메모리, 슬롯 균형, 장애 조치 동작 및 클라이언트 호환성을 모니터링하는 것입니다.