본문 바로가기
Database2024년 8월 10일5분 읽기

Redis Sentinel vs Cluster — 고가용성 아키텍처 선택

YS
김영삼
조회 608

Redis 고가용성이 필요한 이유

Redis를 캐시뿐 아니라 세션 스토어, 실시간 랭킹, 메시지 큐 등 핵심 데이터 저장소로 사용할 때, 단일 인스턴스 장애는 서비스 전체에 영향을 줍니다.

Redis Sentinel

Sentinel은 마스터-레플리카 구조에 자동 장애 조치(failover)를 추가한 시스템입니다.

Sentinel 설정

# sentinel.conf
port 26379
sentinel monitor mymaster 10.0.1.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel parallel-syncs mymaster 1
sentinel notification-script mymaster /opt/redis/notify.sh

클라이언트 연결 (Node.js)

const Redis = require('ioredis');

const redis = new Redis({
  sentinels: [
    { host: '10.0.1.10', port: 26379 },
    { host: '10.0.1.11', port: 26379 },
    { host: '10.0.1.12', port: 26379 }
  ],
  name: 'mymaster',
  sentinelPassword: 'sentinel-pass',
  password: 'redis-pass',
  db: 0,
  retryStrategy(times) {
    return Math.min(times * 100, 3000);
  }
});

redis.on('connect', () => console.log('Connected to Redis'));
redis.on('+failover', () => console.log('Failover detected'));

Redis Cluster

Redis Cluster는 데이터를 16,384개의 해시 슬롯으로 분산하여 여러 노드에 저장합니다.

클러스터 생성

redis-cli --cluster create \
  10.0.1.1:6379 10.0.1.2:6379 10.0.1.3:6379 \
  10.0.1.4:6379 10.0.1.5:6379 10.0.1.6:6379 \
  --cluster-replicas 1

redis-cli --cluster check 10.0.1.1:6379
redis-cli --cluster add-node 10.0.1.7:6379 10.0.1.1:6379
redis-cli --cluster reshard 10.0.1.1:6379

클라이언트 연결 (Node.js)

const Redis = require('ioredis');

const cluster = new Redis.Cluster([
  { host: '10.0.1.1', port: 6379 },
  { host: '10.0.1.2', port: 6379 },
  { host: '10.0.1.3', port: 6379 }
], {
  redisOptions: { password: 'redis-pass' },
  scaleReads: 'slave',
  maxRedirections: 16,
  retryDelayOnFailover: 300
});

// Hash Tag 사용: 같은 슬롯으로 라우팅
await cluster.set('{user:100}.name', 'Kim');
await cluster.set('{user:100}.email', 'kim@test.com');

비교표

기준SentinelCluster
데이터 분산없음 (단일 마스터)해시 슬롯 기반 샤딩
최대 메모리단일 노드 한계노드 수 x 메모리
최소 노드3 (Sentinel) + 3 (Redis)6 (Master 3 + Replica 3)
자동 failover지원지원
multi-key 연산제한 없음같은 슬롯만 가능
Pub/Sub정상 동작모든 노드에 브로드캐스트
Lua 스크립트제한 없음같은 슬롯 키만
운영 복잡도낮음높음

선택 가이드

  • Sentinel 선택: 메모리 32GB 이하, multi-key 연산 필요, Lua 스크립트 활용, 운영 간소화 우선
  • Cluster 선택: 메모리 32GB 초과, 쓰기 트래픽 수평 확장 필요, 대규모 데이터셋
  • 대부분의 서비스는 Sentinel로 충분합니다. Cluster는 데이터가 수십 GB 이상일 때 고려하세요.
  • Redis 7.0+의 Cluster는 성능과 안정성이 크게 향상되었으므로, 신규 구축 시 최신 버전을 사용하세요.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록