이 문서의 과거 버전 (r1)을 보고 있습니다. 수정일: 2026.02.23 09:59
레디스 센티넬은 레디스의 공식 고가용성 솔루션이다. 레디스 서버의 장애 감지와 자동 장애 조치를 담당하는 분산 시스템으로, 마스터-슬레이브 구조의 레디스 배포 환경에서 마스터 서버에 장애가 발생했을 때 자동으로 새로운 마스터를 선출하여 서비스 중단을 최소화한다.
이 시스템은 별도의 센티넬 인스턴스들로 구성되며, 이 인스턴스들은 쿼럼 기반의 합의 프로토콜을 사용하여 장애 판정과 새로운 마스터 선출을 수행한다. 이를 통해 운영자의 개입 없이도 시스템이 자체적으로 복구될 수 있다. 또한 센티넬은 최종적인 구성 정보를 관리하며, 클라이언트 라이브러리에게 새로운 마스터의 주소를 제공하는 서비스 디스커버리 역할도 수행한다.
주요 용도는 레디스 서버의 지속적인 모니터링, 장애 발생 시의 자동 페일오버, 그리고 변경된 구성 정보의 중앙 집중식 관리이다. 이는 인메모리 데이터베이스를 핵심 인프라로 사용하는 환경에서 데이터 서비스의 안정성과 연속성을 보장하는 데 기여한다.
센티넬 인스턴스는 레디스 고가용성 솔루션의 핵심 구성 요소이다. 이는 독립적인 프로세스로 실행되며, 하나의 레디스 마스터-슬레이브 복제 그룹을 모니터링하고 관리하는 역할을 담당한다. 일반적으로 고가용성을 보장하기 위해 최소 3개 이상의 센티넬 인스턴스가 쿼럼을 형성할 수 있도록 구성하여 운영된다.
각 센티넬 인스턴스는 설정 파일을 통해 모니터링할 마스터 노드의 정보를 정의받는다. 이들은 지속적으로 마스터 노드와 연결된 슬레이브 노드들의 상태를 헬스 체크하며, 서로 간의 통신을 통해 시스템 상태에 대한 합의를 이루어간다. 이 통신은 자체적으로 구성된 센티넬 버스라는 Pub/Sub 채널을 통해 이루어진다.
센티넬 인스턴스들은 분산 시스템으로서 협력하여 작동한다. 개별 인스턴스의 장애에도 전체 모니터링 시스템이 무정지로 운영될 수 있도록 설계되었다. 이들은 장애 감지, 장애 조치 결정, 새로운 구성 정보의 전파 등 모든 핵심 의사결정을 합의 알고리즘과 투표 메커니즘을 통해 집단적으로 수행한다.
레디스 센티넬이 감시하고 관리하는 대상은 마스터-슬레이브 복제 구조로 구성된 레디스 서버 그룹이다. 이 구조에서 데이터 쓰기 작업은 오직 하나의 마스터 서버에서만 처리되며, 하나 이상의 슬레이브 서버가 마스터 서버의 데이터를 비동기적으로 복제하여 읽기 부하 분산과 데이터의 이중화를 담당한다.
센티넬의 핵심 임무는 이 마스터 서버의 상태를 지속적으로 모니터링하는 것이다. 마스터 서버에 장애가 발생하면, 센티넬은 자동으로 가장 적합한 슬레이브 서버를 새로운 마스터 서버로 승격시키는 장애 조치를 수행한다. 이 과정에서 나머지 슬레이브 서버들은 새로운 마스터 서버를 주인으로 재구성되고, 애플리케이션 클라이언트는 업데이트된 구성 정보를 센티넬로부터 받아 새로운 마스터 서버에 자동으로 재연결된다.
이러한 구조는 단일 레디스 서버의 단일 장애점 문제를 해결하며, 계획된 유지보수나 예기치 않은 하드웨어 장애 시에도 서비스 중단을 최소화할 수 있도록 돕는다. 따라서 센티넬은 고가용성이 요구되는 프로덕션 환경에서 레디스를 운영할 때 필수적인 구성 요소로 자리 잡았다.
레디스 센티넬 시스템에서 클라이언트는 장애 조치 과정을 인식하고 새로운 마스터 서버에 자동으로 연결하는 애플리케이션을 의미한다. 센티넬은 단순히 서버의 상태를 감시하고 장애를 복구하는 데 그치지 않으며, 이 변화된 구성 정보를 클라이언트에게 전파하여 서비스의 연속성을 보장하는 역할까지 수행한다. 따라서 클라이언트는 센티넬과의 상호작용을 통해 고가용성을 실현하게 된다.
클라이언트는 일반적으로 하나 이상의 센티넬 인스턴스에 연결하여 현재의 마스터 서버 주소를 질의한다. 센티넬은 쿼럼을 통해 합의된 최신 구성 정보를 클라이언트에게 제공한다. 대부분의 레디스 클라이언트 라이브러리에는 센티넬을 지원하는 전용 드라이버가 포함되어 있어, 개발자는 센티넬 서버의 주소 목록만 설정하면 된다. 이 드라이버는 내부적으로 센티넬로부터 마스터의 정보를 받아와 연결을 설정하며, 장애 조치 발생 시에도 이 과정을 자동으로 재수행한다.
클라이언트의 구현 방식은 크게 두 가지로 나눌 수 있다. 첫 번째는 센티넬을 직접 조회하는 방식이다. 클라이언트는 초기화 시 센티넬에 연결하여 현재 마스터의 정보를 얻고, 이후 주기적으로 또는 연결 실패 시 다시 센티넬에 문의하여 새로운 마스터를 찾는다. 두 번째는 퍼블리시-서브스크라이브 채널을 구독하는 방식이다. 센티넬은 장애 조치가 완료되면 특정 채널에 새 마스터의 주소를 발행한다. 이를 구독 중인 클라이언트는 메시지를 받아 즉시 새로운 마스터로 재연결할 수 있다. 이 방식은 클라이언트가 지속적으로 센티넬에 폴링할 필요가 없어 더 효율적이다.
센티넬을 사용하는 클라이언트 애플리케이션을 설계할 때는 모든 센티넬 인스턴스에 대한 연결 정보를 하드코딩하기보다는 설정 파일이나 외부 설정 관리 서비스를 활용하는 것이 바람직하다. 이렇게 하면 센티넬 인프라가 변경되더라도 애플리케이션의 재배포 없이 유연하게 대응할 수 있다. 또한, 클라이언트 측에서도 일시적인 연결 실패에 대한 재시도 로직을 구현하여 네트워크 불안정 상황에서의 견고성을 높일 수 있다.
레디스 센티넬의 핵심 기능은 마스터-슬레이브 복제 구조로 구성된 레디스 서버들을 지속적으로 모니터링하는 것이다. 각 센티넬 인스턴스는 설정된 마스터 노드와 그에 연결된 슬레이브 노드들에 대해 정기적인 헬스 체크를 수행한다.
이 모니터링은 주기적으로 PING 명령을 전송하여 각 레디스 서버의 가용성을 확인하는 방식으로 이루어진다. 센티넬은 마스터 노드로부터의 응답 상태, 응답 시간, 그리고 복제 정보를 포함한 INFO 명령의 출력을 분석한다. 이를 통해 마스터의 작동 상태뿐만 아니라 슬레이브들의 연결 상태와 데이터 동기화 지연(리플리케이션 랙) 여부도 함께 감시한다.
모니터링 정보는 센티넬 인스턴스들 간에 지속적으로 공유된다. 센티넬들은 서로 Pub/Sub 채널을 통해 하트비트 메시지를 교환하며, 각자가 관찰한 마스터 노드의 상태에 대한 판단을 주고받는다. 이 분산 합의 과정을 통해 단일 센티넬의 네트워크 문제나 오판으로 인한 오류를 방지하고, 시스템 전체의 상태에 대한 일관된 뷰를 유지한다.
센티넬 인스턴스는 구성된 마스터 노드와 그에 연결된 슬레이브 노드들을 지속적으로 모니터링한다. 이 모니터링은 정기적인 핑 명령과 인포 명령을 통해 이루어진다. 각 센티넬은 마스터 노드에 대해 정해진 간격으로 헬스 체크를 수행하며, 응답 시간과 상태를 확인한다.
장애 감지는 주관적 다운과 객관적 다운이라는 두 가지 개념을 기반으로 한다. 주관적 다운은 단일 센티넬 인스턴스가 마스터 노드에 대한 연결이 설정된 시간 동안 일정 횟수 이상의 핑 명령에 응답을 받지 못했을 때 판단하는 상태이다. 이는 네트워크 일시적 불안정이나 해당 센티넬의 문제로 인해 발생할 수 있다.
객관적 다운은 쿼럼 메커니즘을 통해 결정된다. 하나의 센티넬이 마스터에 주관적 다운을 선언하면, 이는 다른 센티넬 인스턴스들에게 전파된다. 이후 충분한 수의 센티넬(설정된 쿼럼 값 이상)이 짧은 시간 내에 동일하게 주관적 다운에 동의하면, 해당 마스터는 객관적 다운 상태로 최종 판단된다. 이 다수결 원칙은 단일 센티넬의 오판단으로 인한 불필요한 장애 조치를 방지하는 핵심 장치이다.
자동 장애 조치는 레디스 센티넬의 핵심 기능으로, 마스터 레디스 서버에 장애가 발생했을 때 자동으로 새로운 마스터를 선출하고, 슬레이브 서버를 새로운 마스터로 승격시키는 과정을 말한다. 이 과정은 쿼럼 메커니즘을 통해 수행되며, 다수의 센티넬 인스턴스가 합의에 도달해야만 장애 조치가 실행된다.
장애 조치 절차는 크게 세 단계로 나뉜다. 첫째, 다운된 마스터 서버를 장애 감지 알고리즘을 통해 확인하고, '주관적 다운' 상태에서 '객관적 다운' 상태로 전환한다. 둘째, 센티넬 리더 선출을 통해 장애 조치를 주도할 단일 센티넬을 결정한다. 마지막으로, 선출된 센티넬 리더가 가장 적합한 슬레이브를 새로운 마스터로 선택하고, 나머지 슬레이브와 클라이언트들에게 새로운 구성 정보를 전파한다.
이 과정에서 새로운 마스터로 선택되는 슬레이브는 복제 오프셋, 서버 ID, 다운 타임 등 여러 요소를 고려하여 결정된다. 장애 조치가 완료되면, 기존의 장애 난 마스터 서버가 복구되어 재가동되더라도 자동으로 새로운 마스터의 슬레이브로 재편성되어 고가용성을 유지한다.
구성 관리는 레디스 센티넬이 장애 조치 후 새로운 마스터 서버 정보를 다른 센티넬 인스턴스와 클라이언트에게 자동으로 전파하는 핵심 기능이다. 이 과정은 시스템의 구성 정보가 일관되게 유지되도록 보장하여, 애플리케이션이 수동 개입 없이도 새로운 마스터에 정상적으로 연결할 수 있게 한다.
센티넬은 쿼럼과 과반수 원칙에 따라 새로운 마스터를 선출한 직후, 해당 결정을 자신의 내부 구성 에포크에 기록한다. 이 구성 에포크는 버전 관리 번호와 유사한 역할을 하여, 가장 최신의 구성 정보가 무엇인지를 판단하는 기준이 된다. 모든 센티넬 인스턴스는 지속적으로 서로 통신하며 자신의 구성을 브로드캐스트하고, 더 높은 구성 에포크를 가진 정보를 발견하면 자신의 구성을 그 정보로 갱신한다. 이를 통해 분산 시스템 전체에 걸쳐 구성 정보의 일관성이 유지된다.
클라이언트 측 구성 관리는 Pub/Sub 메커니즘을 통해 이루어진다. 센티넬은 특정 채널에 새로운 마스터의 IP 주소와 포트 정보를 메시지로 발행한다. 센티넬을 인지 모드로 연결한 클라이언트 애플리케이션은 이 채널을 구독하고 있으며, 메시지를 수신하면 자동으로 새로운 마스터 서버로의 연결을 재설정한다. 또한, 클라이언트는 센티넬에게 직접 질의를 보내 현재 마스터의 주소를 얻어올 수도 있다. 이러한 자동화된 구성 전파는 시스템 장애 복구 시간을 크게 단축시키고 운영 부담을 줄여준다.
레디스 센티넬은 레디스 서버의 고가용성을 보장하기 위한 솔루션으로, 여러 가지 장점을 제공한다. 가장 큰 장점은 자동화된 장애 감지와 장애 조치 기능이다. 센티넬은 마스터 서버를 지속적으로 모니터링하며, 서버가 다운되거나 응답하지 않는 상태가 되면 이를 감지한다. 이후 사전에 정의된 쿼럼 정책에 따라 자동으로 슬레이브 서버 중 하나를 새로운 마스터로 승격시키는 페일오버를 수행한다. 이 과정은 수동 개입 없이 이루어지므로 서비스 중단 시간을 최소화할 수 있다.
또 다른 중요한 장점은 중앙 집중식 구성 관리 기능이다. 센티넬은 현재 활성화된 마스터 서버의 주소 정보를 관리하며, 이 정보를 클라이언트에게 제공한다. 클라이언트는 처음에 센티넬에게 연결하여 현재 유효한 마스터 주소를 얻은 후 해당 레디스 인스턴스에 직접 연결하게 된다. 따라서 장애 조치 후 마스터의 IP 주소나 포트가 변경되더라도, 모든 클라이언트는 센티넬을 통해 새로운 주소를 자동으로 획득하므로 애플리케이션 측의 구성 변경이 필요 없다.
센티넬은 분산 시스템으로 설계되어 내결함성을 갖추고 있다는 점도 장점이다. 단일 센티넬 인스턴스에 장애가 발생하더라도, 다른 센티넬 인스턴스들이 합의 알고리즘을 통해 시스템 상태를 판단하고 의사 결정을 내릴 수 있다. 이는 단일 장애점을 제거하여 센티넬 시스템 자체의 가용성을 높인다. 또한, 모니터링과 알림 기능을 통해 관리자에게 시스템 상태 변화를 실시간으로 통지할 수 있어 운영 편의성을 제공한다.
레디스 센티넬은 강력한 고가용성 솔루션이지만 몇 가지 단점과 한계를 가지고 있다. 가장 큰 한계는 단일 마스터 노드에서만 쓰기 작업이 가능하다는 점이다. 이는 레디스 클러스터와 같은 분산 쓰기 솔루션과 비교했을 때 확장성에 제약이 있다. 또한, 장애 조치 과정에서 일시적인 데이터 유실이 발생할 수 있으며, 네트워크 분할 상황에서 잘못된 마스터 선출로 인한 스플릿 브레인 문제가 발생할 위험이 존재한다.
센티넬 자체의 고가용성을 보장하기 위해서는 최소 3개 이상의 센티넬 인스턴스를 분리된 물리적 또는 가상 서버에 배포해야 하는데, 이는 운영 복잡성과 자원 소모를 증가시킨다. 클라이언트 측에서는 센티넬을 지원하는 특별한 라이브러리를 사용하거나 센티넬로부터 최신 구성 정보를 수신할 수 있어야 하므로, 기존 레디스 클라이언트를 그대로 사용하기 어려운 경우가 있다.
마지막으로, 센티넬은 주로 장애 조치와 모니터링에 초점을 맞추고 있어, 데이터의 자동 샤딩이나 여러 마스터 노드 간의 데이터 분산과 같은 기능은 제공하지 않는다. 대규모 데이터셋이나 초고속 쓰기 처리량이 필요한 환경에서는 레디스 클러스터나 다른 분산 데이터베이스 시스템을 고려하는 것이 더 적합할 수 있다.
센티넬의 설정은 주로 sentinel.conf 파일을 통해 이루어진다. 이 파일은 각 센티넬 인스턴스가 모니터링할 마스터 레디스 서버, 장애 감지 임계값, 장애 조치 조건, 실행 옵션 등을 정의한다.
설정 파일의 주요 지시어(directive)는 다음과 같다. sentinel monitor <마스터-이름> <마스터-IP> <마스터-포트> <쿼럼>은 모니터링할 마스터 서버를 지정하는 핵심 설정이다. 여기서 <쿼럼>은 장애 감지를 위해 필요한 최소 동의 센티넬 인스턴스 수를 의미한다. sentinel down-after-milliseconds <마스터-이름> <밀리초>는 서버가 응답하지 않을 때 '주관적 다운' 상태로 판단하기까지의 대기 시간을 설정한다. sentinel failover-timeout <마스터-이름> <밀리초>는 장애 조치에 관련된 다양한 타임아웃을 정의하는 다목적 옵션이다. 또한 sentinel auth-pass <마스터-이름> <비밀번호>를 통해 패스워드가 설정된 레디스 서버의 인증 정보를 제공할 수 있다.
설정 파일은 실행 중에도 SENTINEL SET 명령어를 사용하여 동적으로 일부 파라미터를 변경할 수 있다. 그러나 sentinel monitor와 같이 핵심적인 설정은 재시작을 통해서만 적용된다. 모든 센티넬 인스턴스는 마스터의 구성 변경 사항을 지속적으로 감시하고, 장애 조치가 발생하면 새로운 구성 관리 정보를 자동으로 다른 센티넬과 클라이언트에 전파하여 일관성을 유지한다.
레디스 센티넬 시스템을 기동하고 운영하는 방법은 비교적 단순하다. 일반적으로 각 레디스 서버와 함께 또는 별도의 서버에 센티넬 인스턴스를 배포하여 실행한다. 기동은 redis-sentinel 실행 파일에 설정 파일 경로를 인자로 주어 수행한다. 예를 들어, sentinel.conf라는 설정 파일을 사용할 경우 redis-sentinel /path/to/sentinel.conf 명령어로 실행한다. 운영 중에는 로그를 통해 모니터링 상태, 쿼럼 달성 여부, 장애 감지 및 장애 조치 이벤트를 확인할 수 있다.
센티넬의 운영은 주로 설정 파일을 통해 관리된다. 이 파일에는 모니터링할 마스터 레디스의 정보, 쿼럼 수, 장애 조치 타임아웃 등 핵심 파라미터가 정의된다. 운영 중 실시간 상태 확인은 redis-cli를 통해 센티넬 포트에 연결하여 SENTINEL masters, SENTINEL slaves <master-name>, SENTINEL get-master-addr-by-name <master-name> 등의 명령어를 사용한다. 이를 통해 현재 마스터의 주소, 슬레이브 목록, 센티넬들의 상태를 조회할 수 있다.
장애 조치가 발생한 후 시스템은 새로운 토폴로지 정보를 모든 센티넬 인스턴스와 클라이언트 라이브러리에 자동으로 전파한다. 운영자는 새로 선출된 마스터와 그 슬레이브들의 상태가 정상인지, 애플리케이션 연결이 원활히 재설정되는지 모니터링해야 한다. 또한, 다운된 이전 마스터 서버가 복구되면 센티넬에 의해 자동으로 새로운 마스터의 슬레이브로 재편성되어 데이터 동기화를 시작한다.
고가용성을 위해 센티넬 인스턴스 자체도 홀수 개(보통 3개 또는 5개)로 분산 배치하는 것이 권장된다. 모든 센티넬 인스턴스는 동일한 설정 파일을 공유하거나, 최소한 모니터링 대상 마스터에 대한 설정은 일치시켜야 한다. 운영 중 설정의 일부 항목은 SENTINEL SET 명령어를 사용하여 동적으로 변경할 수도 있다.
레디스 센티넬은 레디스 서버의 고가용성을 보장하기 위한 장애 조치 및 모니터링 솔루션이다. 반면 레디스 클러스터는 데이터를 여러 노드에 분산하여 저장함으로써 수평적 확장성과 성능 향상을 목표로 하는 분산 데이터베이스 솔루션이다. 이 둘은 레디스 생태계 내에서 서로 다른 문제를 해결하기 위해 설계되었다.
주요 차이점은 다음과 같다.
비교 항목 | 레디넬 센티넬 | 레디스 클러스터 |
|---|---|---|
주요 목적 | 고가용성(HA) 및 자동 장애 조치 | 수평적 확장성(Scaling) 및 데이터 분산 |
데이터 모델 | 단일 마스터-슬레이브 복제 세트로, 모든 데이터가 마스터에 저장됨 | 데이터를 여러 샤드로 분할하여 여러 마스터 노드에 분산 저장 |
쓰기 확장성 | 제공하지 않음. 모든 쓰기는 단일 마스터 노드로만 가능 | 제공함. 여러 마스터 노드에 걸쳐 쓰기 부하를 분산 |
장애 조치 범위 | 마스터 노드 장애 시 슬레이브를 새 마스터로 승격 | 개별 마스터 노드 장애 시 해당 샤드의 슬레이브로 장애 조치 |
구성 복잡도 | 상대적으로 간단함 | 상대적으로 복잡함 |
센티넬은 기존의 마스터-슬레이브 아키텍처 위에서 동작하며, 주된 임무는 마스터의 상태를 감시하고 장애 시 자동으로 새로운 마스터를 선출하는 것이다. 따라서 애플리케이션의 읽기 부하를 슬레이브로 분산시킬 수는 있지만, 쓰기 처리량을 늘리기 위한 확장성은 제공하지 않는다. 클라이언트는 센티넬을 통해 현재의 마스터 주소를 조회하여 접속한다.
반면 레디스 클러스터는 데이터를 자동으로 샤딩하여 여러 마스터 노드에 분배한다. 이는 단일 데이터 세트의 크기가 너무 크거나 초당 쓰기 연산이 매우 많을 때 유용하다. 각 마스터 노드는 자신의 슬레이브를 가질 수 있어 고가용성도 함께 제공하지만, 그 구현 방식과 클라이언트 라이브러리의 지원 방식은 센티넬과 다르다. 요약하면, 고가용성만 필요하다면 센티넬을, 대용량 데이터와 높은 처리량을 위한 확장성이 필요하다면 클러스터를 선택하는 것이 일반적이다.