고가용성: Redis Sentinel
고가용성: Redis Sentinel (High availability with Sentinel)
Redis Sentinel은 Redis Cluster를 쓰지 않을 때 Redis에 고가용성(HA)을 제공합니다. 감시(monitoring), 알림(notification), 자동 페일오버(auto failover), 그리고 클라이언트 서비스 디스커버리의 설정 제공자(configuration provider) 역할을 합니다. 마스터가 정상이 아니면 Sentinel이 페일오버를 시작해 레플리카를 마스터로 승격시키고, 나머지 레플리카를 새 마스터로 재구성하며, 애플리케이션에 새 주소를 알려줍니다.
출처: 공식문서
분산 시스템으로서의 Sentinel
Sentinel은 여러 프로세스가 협력하도록 설계된 분산 시스템입니다.
- 장애 판정은 여러 Sentinel이 합의할 때 이뤄져 오탐(false positive) 확률이 낮아집니다.
- 일부 Sentinel이 고장나도 동작하므로 페일오버 시스템 자체가 단일 장애점이 되지 않습니다.
Sentinel 빠른 시작
실행
redis-sentinel 실행 파일 또는 redis-server를 Sentinel 모드로 실행할 수 있습니다.
redis-sentinel /path/to/sentinel.conf
redis-server /path/to/sentinel.conf --sentinel
Sentinel은 반드시 설정 파일로 실행해야 하며(재시작 시 상태 복원용), 설정 파일이 없거나 쓰기 불가하면 시작을 거부합니다. Sentinel은 기본적으로 TCP 26379 포트를 사용하므로, 다른 Sentinel IP에서 이 포트에 연결할 수 있어야 협의가 가능합니다.
배포 전 핵심 사항
- 견고한 배포를 위해 최소 3개 이상의 Sentinel 인스턴스를, 서로 독립적으로 실패할 것으로 예상되는 장소(다른 물리 서버, 다른 가용영역의 VM)에 배치합니다.
- Redis는 비동기 복제를 사용하므로 Sentinel+Redis 시스템은 실패 구간 동안 확인된 쓰기(acknowledged write)를 보장하지 않습니다.
- 클라이언트 라이브러리가 Sentinel을 지원해야 합니다(인기 라이브러리는 대부분 지원).
- Docker/NAT/포트 매핑과 함께 쓰면 Sentinel 자동 탐지가 깨질 수 있어 주의가 필요합니다.
Sentinel 설정
최소 설정 예시(sentinel.conf):
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
sentinel parallel-syncs resque 5
감시할 마스터마다 다른 이름을 붙이면 되며, 레플리카는 자동 탐지됩니다.
sentinel monitor 구문
sentinel monitor <master-name> <ip> <port> <quorum>
- quorum: 마스터가 도달 불가능하다고 판정하기 위해 합의해야 하는 Sentinel 수입니다. 단, quorum은 장애 탐지에만 쓰이며, 실제 페일오버는 Sentinel 과반수의 투표로 선출된 리더만 시작할 수 있습니다. 예를 들어 5개 Sentinel에서 quorum=2면, 2개가 동시에 마스터 불가를 판정하고 3개 이상의 Sentinel이 도달 가능할 때 페일오버가 승인·실행됩니다. 즉 과반수 Sentinel이 통신 불가한 소수 파티션에서는 페일오버하지 않습니다.
기타 옵션
sentinel <option_name> <master_name> <option_value>
down-after-milliseconds: 이 시간(ms) 동안 PING에 응답하지 않거나 오류 응답이면 다운으로 간주.parallel-syncs: 페일오버 후 동시에 새 마스터로 재동기화할 수 있는 레플리카 수(낮을수록 완료 시간이 길지만, 오래된 데이터를 서빙 중인 레플리카를 안전하게 분산 재동기화).