8.1 레디스 클러스터 기능 개요
레디스 클러스터란?
레디스 클러스터는 여러 레디스 인스턴스를 하나의 논리적 단위로 묶어 수평적 확장(horizontal scaling)을 지원하는 분산 시스템
주요 특징
- 자동 샤딩(Auto Sharding): 16,384개의 해시 슬롯으로 데이터를 자동 분산
- 고가용성: 마스터 노드 장애 시 자동 페일오버
- 확장성: 노드 추가/제거를 통한 동적 확장 데이터 일관성: 강력한 일관성 모델 제공
클러스터 vs 센티넬
목적 | 수평 확장 + 고가용성 | 고가용성 (모니터링 + 페일오버) |
데이터 분산 | 자동 샤딩 | 복제 기반 |
최소 노드 수 | 6개 (마스터 3 + 슬레이브 3) | 3개 (센티넬 노드) |
8.2 레디스 클러스터 장애 탐지
장애 탐지 메커니즘
메커니즘 레디스 클러스터는 고시프 프로토콜(Gossip Protocol)을 사용해 노드 간 상태 정보를 교환한다.
장애 판단 과정
PFAIL (Probable Fail): 개별 노드가 다른 노드의 장애를 의심
FAIL: 클러스터 과반수 노드가 장애를 확인
자동 페일오버: 슬레이브 노드가 마스터로 승격
핵심 설정 파라미터
# 노드 타임아웃 (기본: 15초)
cluster-node-timeout 15000
# 페일오버 투표 시간 (기본: 노드 타임아웃 * 2)
cluster-slave-validity-factor 10
# 마이그레이션 배리어 (기본: 1)
cluster-migration-barrier 1
모니터링 지표
노드 상태: CLUSTER NODES 명령어로 확인
슬롯 커버리지: 16,384개 슬롯 모두 할당되었는지 확인
네트워크 파티션: 클러스터 분할 상황 감지
8.3 레디스 클러스터 키워드
해시 슬롯(Hash Slot)
- 총 16,384개 슬롯으로 데이터 분산
- CRC16 해시 함수 사용: CRC16(key) % 16384
- 각 마스터 노드가 특정 슬롯 범위 담당
해시 태그(Hash Tag)
# 같은 슬롯에 저장하고 싶은 경우
SET user:1000:profile "John"
SET user:1000:settings "theme=dark"
# 해시 태그 사용 (중괄호 안의 값으로 해시 계산)
SET {user:1000}:profile "John"
SET {user:1000}:settings "theme=dark"
8.4 레디스 클러스터 지원 클라이언트
- 클라이언트는 레디스와 연결해서 사용되는 곳을 의미하며, Java나 Node 등이 될 수 있음
- 많이 사용되는 Lettuce가 있음
Spring Boot + Lettuce
@Component
class RedisClusterService(
private val redisTemplate: RedisTemplate<String, Any>
) {
fun setValue(key: String, value: Any) {
redisTemplate.opsForValue().set(key, value)
}
fun getValue(key: String): Any? {
return redisTemplate.opsForValue().get(key)
}
}
클라이언트별 특징
클라이언트 | 언어 | 특징 |
Lettuce | Java/Kotlin | 비동기, 반응형 프로그래밍 지원 |
Jedis | Java/Kotlin | 동기식, 단순한 API |
redis-py-cluster | Python | 파이썬 클러스터 전용 |
node_redis | Node.js | 콜백 및 Promise 지원 |
8.5 레디스 클러스터 관련 명령어
클러스터 상태 확인
# 클러스터 전체 정보
CLUSTER INFO
# 노드 목록 및 상태
CLUSTER NODES
# 특정 키의 슬롯 번호 확인
CLUSTER KEYSLOT mykey
# 슬롯 소유 노드 확인
CLUSTER SLOTS
슬롯 관리
# 슬롯 할당
CLUSTER ADDSLOTS 0 1 2 3 4
# 슬롯 마이그레이션
CLUSTER SETSLOT 866 MIGRATING 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
# 슬롯 가져오기
CLUSTER SETSLOT 866 IMPORTING 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
노드 관리
bash# 클러스터 초기화
CLUSTER RESET [HARD|SOFT]
# 노드 추가
CLUSTER MEET 127.0.0.1 7006
# 페일오버 강제 실행
CLUSTER FAILOVER [FORCE|TAKEOVER]
모니터링이 필요한 경우
#!/bin/bash
# 클러스터 헬스체크
redis-cli -c -p 7000 CLUSTER INFO | grep cluster_state
redis-cli -c -p 7000 CLUSTER NODES | grep -c "master"
redis-cli -c -p 7000 CLUSTER NODES | grep -c "slave"
'Study OR Book > 실전 레디스' 카테고리의 다른 글
[실전 레디스] Chaprter 09_메모리 관리 (3) | 2025.07.21 |
---|---|
[실전 레디스] Chaprter 10_클라우드에서 사용하는 레디스 (0) | 2025.07.21 |
[실전 레디스] Chaprter 07_레플리케이션 (0) | 2025.07.07 |
[실전 레디스] Chaprter 06_트러블 슈팅 (0) | 2025.07.01 |
[실전 레디스] Chaprter 05_레디스 운용 관리 (0) | 2025.06.23 |