Redis Cluster에서 min-replicas-to-write 설정 및 운영
Redis Cluster 환경에서 데이터의 안정성을 보장하기 위해 min-replicas-to-write 옵션을 사용합니다. 이 설정은 주 노드(Master)가 쓰기 작업을 수용하기 위해 최소한으로 유지해야 하는 복제본(Replica)의 수를 정의합니다. 지정된 수 이상의 복제본이 연결되어 있지 않으면 주 노드는 쓰기 요청을 거부하여 데이터 유실 가능성을 차단합니다.
설정 방법
각 주 노드의 redis.conf 파일에 직접 설정하거나 실행 중인 노드에 명령어를 통해 적용할 수 있습니다.
# redis.conf 설정 예시
# 최소 2개의 슬레이브가 정상 상태여야 쓰기 허용
min-replicas-to-write 2
# 복제본의 지연 시간이 10초를 초과하면 비정상으로 간주
min-replicas-max-lag 10
설정을 변경한 후에는 Redis 서비스를 재시작하거나, CONFIG SET 명령을 통해 실시간으로 반영해야 합니다.
장애 조치(Failover) 후 설정 유지 문제
Redis Cluster에서 주 노드에 장애가 발생하여 복제본이 새로운 주 노드로 승격될 때, 기존 주 노드에서 설정했던 min-replicas-to-write 값이 자동으로 전파되지 않을 수 있습니다. 새로운 주 노드는 자신의 로컬 설정 파일이나 메모리에 적재된 기존 값을 그대로 사용하기 때문입니다.
수동 설정 업데이트 프로세스
장애 조치 후 일관된 정책을 유지하기 위해 다음과 같은 절차로 설정을 갱신해야 합니다.
- 새롭게 선출된 주 노드의 주소와 포트를 확인합니다.
redis-cli를 사용하여 해당 노드에 접속한 뒤 설정을 변경합니다.
# 신규 마스터 노드에 설정 적용
redis-cli -h 192.168.1.100 -p 6379 CONFIG SET min-replicas-to-write 2
# 설정 반영 확인
redis-cli -h 192.168.1.100 -p 6379 CONFIG GET min-replicas-to-write
이 과정은 클러스터 관리 도구나 스크립트를 통해 자동화하는 것이 권장됩니다.
Redis Sentinel의 핵심 역할
Redis Sentinel은 분산 시스템의 고가용성을 책임지는 모니터링 도구로, 다음과 같은 네 가지 주요 기능을 수행합니다.
- 모니터링(Monitoring): 주 노드와 복제본 노드들이 정상적으로 작동하는지 주기적으로 체크합니다.
- 알림(Notification): 감시 중인 노드에 문제가 발생하면 API를 통해 관리자나 다른 애플리케이션에 이벤트를 전송합니다.
- 자동 장애 조치(Automatic Failover): 주 노드 장애 시 쿼럼(Quorum) 합의를 통해 복제본 중 하나를 새로운 주 노드로 승격시키고, 나머지 복제본들이 새 주 노드를 바라보도록 재구성합니다.
- 구성 제공자(Configuration Provider): 클라이언트가 현재 유효한 주 노드의 주소를 조회할 수 있는 단일 창구 역할을 합니다.
Raft 합의 알고리즘 기반의 데이터 일관성 보장
Redis 자체는 기본적으로 비동기 복제를 사용하지만, Raft와 같은 합의 알고리즘을 도입한 커스텀 구현체나 특정 모듈에서는 로그 기반 복제를 통해 강한 일관성을 구현합니다.
로그 동기화와 상태 머신(State Machine)
Raft 로그에는 실제 데이터 자체가 아닌, 데이터를 변경하는 '작령(Command)'이 기록됩니다. 예를 들어 SET user_1 "active"와 같은 요청이 로그 항목이 됩니다.
- 로그 전파: 리더 노드는 클라이언트의 요청을 로컬 로그에 기록하고 팔로워들에게 복제합니다.
- 과반수 합의: 전체 노드의 과반수 이상이 해당 로그를 기록하면 '커밋(Committed)' 상태가 됩니다.
- 상태 머신 적용: 커밋된 로그는 비로소 Redis의 메모리 데이터 구조(상태 머신)에 반영되어 실제 데이터로 변환됩니다.
AOF(Append Only File)와의 시너지
이러한 로그 기반 모델은 Redis의 AOF 메커니즘과 유사하게 동작합니다. Raft 로그를 통해 동기화된 명령어가 AOF 파일에 순차적으로 기록됨으로써, 노드 재시작 시에도 동일한 순서로 데이터를 복구할 수 있어 클러스터 전체의 데이터 무결성이 보장됩니다. 대규모 데이터 처리 시에는 Snapshot(스냅샷) 기능을 활용하여 로그의 길이를 최적화하고 복구 속도를 높입니다.