본문 바로가기
Study OR Book/실전 레디스

[실전 레디스] Chaprter 08_레디스 클러스터

by Baest 2025. 7. 14.

 

 

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"