원노트의 단일 서버 실습을 기준으로 Redis Cluster의 샤딩과 복제본 선출을 확인합니다. 한 서버의 6개 프로세스는 서버 자체의 장애에 대비하는 이중화가 아니며, 운영은 호스트·전원·네트워크 장애 영역을 나누어 설계합니다.
인스턴스 6개 준비
포트 6000·6001·6002·7000·7001·7002를 각각 사용합니다. 각 인스턴스의 데이터 디렉터리, 로그, PID와 nodes 파일은 분리해야 합니다. Cluster 데이터 포트 외에 기본적으로 데이터 포트+10000의 버스 포트도 사용합니다.
port 6000
bind 127.0.0.1
cluster-enabled yes
cluster-config-file nodes-6000.conf
cluster-node-timeout 5000
dir /var/lib/redis/6000나머지 5개도 포트와 경로를 바꿔 준비합니다. 데이터가 비어 있는 실습 인스턴스인지 확인합니다. ACL·암호·영속성 설정은 모든 노드에 일관되게 적용해야 하며 원본 노드들 사이에서 자동 공유된다고 가정하지 않습니다.
클러스터 생성
원본 3개와 각 원본의 복제본 1개가 되도록 한 번에 구성하는 예시입니다. 실제 생성 전 화면에 표시되는 노드 배치와 slot 할당을 확인합니다.
redis-cli --cluster create 127.0.0.1:6000 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 --cluster-replicas 1
redis-cli -p 6000 CLUSTER NODES
redis-cli -p 6000 CLUSTER INFO
redis-cli --cluster check 127.0.0.1:6000리다이렉트와 장애 전환 확인
-c를 지정한 클라이언트는 키의 슬롯을 가진 노드로 리다이렉트할 수 있습니다. Cluster 대응 라이브러리를 사용하지 않는 애플리케이션은 MOVED 오류를 처리하지 못할 수 있습니다.
redis-cli -c -p 6000 SET app:cluster-test hello
redis-cli -c -p 6000 GET app:cluster-test실습 원본 프로세스 하나를 중지한 뒤 CLUSTER NODES와 로그에서 복제본 승격을 확인합니다. 노드의 역할과 실제 데이터 조회를 검증하고 중지한 노드를 다시 기동해 새 역할을 확인합니다. KEYS *로 전체 데이터를 반복 조회하기보다 필요한 시험 키나 SCAN을 사용합니다.