DB

스플릿 브레인의 정의와 발생 시나리오 정리

Joonfluence 2025. 8. 2.

스플릿 브레인(Split Brain)이란?

스플릿 브레인은 분산 시스템에서 네트워크 분할이나 노드 장애로 인해 두 개 이상의 노드가 각각 자신이 리더라고 인식하는 상황을 말합니다.

발생 시나리오

1. 네트워크 분할(Network Partition) 시나리오

[데이터센터 A] ←→ [데이터센터 B]
     ↑                    ↑
  리더 A               팔로워 B

시나리오 1: 네트워크 연결 끊김

[데이터센터 A]   X   [데이터센터 B]
     ↑                    ↑
  리더 A               팔로워 B

발생 과정:

  1. 초기 상태: A가 리더, B가 팔로워
  2. 네트워크 분할: A와 B 간 통신 불가
  3. 타임아웃 발생:
    • A는 B의 응답을 받지 못해 B가 죽었다고 판단
    • B는 A의 하트비트를 받지 못해 A가 죽었다고 판단
  4. 리더 선출:
    • A는 자신이 여전히 리더라고 생각
    • B는 A가 죽었다고 판단하고 자신을 새로운 리더로 승격
  5. 결과: 두 노드 모두 리더로 동작

2. 노드 장애 감지 실패 시나리오

시나리오 2: 일시적 네트워크 지연

시간 T1: [A] ←→ [B] (정상)
시간 T2: [A] ←→ [B] (네트워크 지연)
시간 T3: [A] ←→ [B] (복구)

발생 과정:

  1. 일시적 네트워크 지연: A와 B 간 통신이 느려짐
  2. 타임아웃 설정 문제:
    • 타임아웃이 너무 짧게 설정됨
    • 지연 시간이 타임아웃을 초과
  3. 잘못된 장애 판단:
    • A는 B가 죽었다고 판단
    • B는 A가 죽었다고 판단
  4. 리더 선출: 각각 자신을 리더로 승격

3. 복잡한 토폴로지에서의 시나리오

시나리오 3: 3개 노드 시스템

    [A] ←→ [B] ←→ [C]
     ↑              ↑
   리더          팔로워

네트워크 분할 발생:

    [A]   X   [B]   X   [C]
     ↑              ↑
   리더          팔로워

발생 과정:

  1. A-C 연결만 유지: A와 C는 통신 가능, B는 격리
  2. B의 판단: A와 C가 모두 죽었다고 판단 → B가 리더 승격
  3. A의 판단: B가 죽었지만 C는 살아있음 → A가 리더 유지
  4. C의 판단: B가 죽었지만 A는 살아있음 → C가 A를 팔로우
  5. 결과: A(리더)와 B(리더)가 동시에 존재

스플릿 브레인의 위험성

1. 데이터 불일치

리더 A: 사용자 ID 1001에 "Alice" 저장
리더 B: 사용자 ID 1001에 "Bob" 저장
→ 동일한 키에 서로 다른 값 저장

2. 데이터 손실

리더 A: 레코드 삭제
리더 B: 레코드 수정
→ 네트워크 복구 후 충돌 해결 과정에서 데이터 손실 가능

3. 시스템 혼란

  • 클라이언트가 어떤 리더에 요청해야 할지 불분명
  • 일관성 없는 응답으로 인한 애플리케이션 오류

방지 및 해결 방법

1. 타임아웃 설정 최적화

  • 너무 짧지도, 너무 길지도 않은 적절한 타임아웃 설정
  • 네트워크 상황을 고려한 동적 타임아웃 조정

2. 쿼럼(Quorum) 기반 의사결정

  • 과반수 이상의 노드 동의가 필요
  • 홀수 개 노드로 구성하여 투표 시 항상 승자 결정

3. 펜싱(Fencing) 메커니즘

  • 이전 리더를 강제로 종료하는 메커니즘
  • 공유 리소스에 대한 접근 제어

4. 네트워크 모니터링

  • 지속적인 네트워크 상태 모니터링
  • 사전 경고 시스템 구축

스플릿 브레인은 분산 시스템에서 가장 위험한 상황 중 하나로, 철저한 설계와 모니터링이 필요합니다.

반응형

댓글