Redis 분할 뇌 문제의 원인과 대응 전략

분할 뇌 현상이란?

분할 뇌(Split-Brain)는 분산 시스템에서 네트워크 장애나 노드 고장으로 인해 클러스터 내 여러 노드가 동시에 주노드(Master)로 판단하게 되는 상태를 말합니다. Redis와 같은 고가용성 아키텍처에서 이 현상이 발생하면 데이터 무결성에 심각한 위협이 될 수 있습니다. 각 파티션은 독립적으로 동작하며, 클라이언트의 요청을 처리하지만, 이로 인해 동일한 데이터에 대해 서로 다른 값을 유지하게 되어 일관성 손실이 발생합니다.

문제 발생 원인

1. 네트워크 분할 (Network Partition)

클러스터 구성 요소 간의 통신이 단절되면 일부 마스터-슬레이브 그룹이 분리된 상태로 작동하게 됩니다. 예를 들어, 마스터 서버가 포함된 서브넷과 나머지 센티넬(Sentinel)들이 물리적 네트워크 장애로 분리될 경우, 분리된 측에서는 마스터가 다운된 것으로 간주하고 새로운 마스터 선출을 시도할 수 있습니다. 이 과정에서 원래 마스터가 여전히 활성 상태라면 두 개의 마스터가 동시에 존재하게 되어 분할 뇌 문제가 발생합니다.

2. 마스터 노드 복구 지연

장애 복구 후 원 마스터가 재시작되지만, 센티넬 시스템이 이를 적절히 인식하지 못하거나 상태 갱신이 지연되면, 여전히 자신이 주체라고 판단하고 쓰기 작업을 허용할 수 있습니다. 이 경우 새 마스터와 구 마스터가 동시에 쓰기를 허용하여 데이터 충돌이 발생합니다.

3. 잘못된 고가용성 설정

센티넬의 감시 설정이나 투표 기준값(quorum)이 너무 낮게 설정된 경우, 짧은 네트워크 지연만으로도 불필요한 장애 조치(Failover)가 실행되어 의도치 않게 마스터 역할을 수행하는 노드가 증가할 수 있습니다.

영향 분석

  • 데이터 불일치: 두 마스터가 각각 다른 클라이언트로부터 쓰기 요청을 받으면 동일 키에 대해 서로 다른 값이 저장될 수 있습니다.
  • 데이터 유실: 네트워크가 복구된 후 슬레이브 역할로 강등된 노드의 변경 사항은 일반적으로 덮어씌워지므로, 해당 기간 동안의 업데이트는 영구적으로 소실될 수 있습니다.
  • 서비스 장애: 애플리케이션이 예측할 수 없는 응답을 받거나, 트랜잭션 일관성이 깨져 비즈니스 로직 오류를 유발할 수 있습니다.

해결 방안

1. 센티넬 구성 최적화

Redis Sentinel은 자동 장애 조치를 관리하는 핵심 컴포넌트입니다. 다음 설정을 통해 신뢰성을 높일 수 있습니다.

sentinel monitor mymaster 192.168.1.10 6379 3
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 15000

여기서 3은 다수결(majority) 투표를 위한 최소 유효 센티넬 수를 의미합니다. 전체 Sentinel 인스턴스는 홀수 개(예: 3, 5)로 배포하여 투표의 명확성을 확보해야 합니다.

2. 보호 모드 활성화

Redis 3.2 이상 버전에서는 protected-mode를 제공하여 외부 접근을 제한하고, 예기치 않은 마스터 승격 시 쓰기 요청을 차단할 수 있습니다.

protected-mode yes

이 설정은 외부 연결 시 인증 없이 쓰기가 발생하는 것을 막아주는 기본 방어선 역할을 합니다.

3. 분산 잠금 메커니즘 도입

다중 데이터센터 또는 강력한 일관성이 요구되는 환경에서는 Redlock 알고리즘과 같은 분산 잠금 기법을 사용해 단일 리더십을 보장할 수 있습니다. 이는 여러 리소스 사이에서 일시적인 중복 마스터 생성을 방지하는 논리적 제어 수단입니다.

4. 클라이언트 측 대책

클라이언트 라이브러리에 다음 전략을 적용하면 문제 영향을 완화할 수 있습니다.

  • 읽기 재시도: 일시적인 네트워크 장애 시 일정 횟수만큼 재시도 수행.
  • 연결 및 명령 타임아웃: 지나치게 긴 대기 시간을 방지하여 시스템 반응성을 확보.
  • 마스터 확인 절차: 쓰기 전 현재 마스터 정보를 Sentinel 또는 구성 관리자로부터 재확인.

예방 전략

네트워크 안정성 강화

고신뢰 링크를 사용하고, VLAN 분리, LACP 등 네트워크 계층에서 이중화를 적용합니다. 또한 지속적인 지연(ping, RTT) 및 패킷 손실률 모니터링을 통해 조기에 네트워크 이상을 탐지합니다.

정기 장애 시나리오 테스트

실제 운영 환경에서 네트워크 분할, 마스터 다운, 센티넬 장애 등을 시뮬레이션하여 장애 복구 프로세스와 데이터 일관성 유지 능력을 검증합니다. 이를 통해 구성 오류나 미비점을 사전에 발견할 수 있습니다.

모니터링 및 경보 체계 구축

다음 항목들을 실시간으로 감시하고, 이상 탐지 시 즉시 알림을 전달하는 시스템이 필요합니다.

  • 노드 가용성 및 역할 상태(Redis INFO role)
  • Sentinel 로그 및 failover 이벤트
  • 클러스터 내 레플리케이션 지연(replication lag)
  • 외부 접근 실패율 및 연결 타임아웃 증가

태그: Redis Split-Brain Sentinel high availability Distributed Systems

6월 5일 16:53에 게시됨