분산 시스템의 Split Brain 현상이란? 원인과 대응 방법 정리

Split Brain이란 무엇인가

분산 시스템에서 여러 대의 서버가 하나의 클러스터를 이루어 동작할 때, 네트워크 장애 등의 이유로 클러스터가 두 개 이상의 그룹으로 쪼개지는 상황을 ‘Split Brain’이라고 부릅니다. 문제는 이때 각 그룹이 서로의 존재를 인지하지 못한 채 자신이 유일한 정상 그룹이라고 착각하고 독립적으로 리더를 선출해 동작을 계속한다는 점입니다. 결과적으로 하나의 시스템에 두 개의 ‘머리(Brain)’가 동시에 존재하게 되어 데이터 불일치나 중복 처리 같은 심각한 문제가 발생합니다.

비유하자면, 한 회사의 본사와 지사가 통신망 장애로 서로 연락이 끊겼는데, 지사가 ‘본사가 사라졌으니 내가 대표다’라고 판단하고 독자적으로 계약을 체결하는 상황과 비슷합니다. 나중에 통신이 복구되면 두 곳에서 각각 처리한 계약 내용이 서로 충돌하게 되는 것이죠.

왜 발생하고 어떤 문제를 일으키나

Split Brain은 주로 클러스터를 구성하는 노드 간 네트워크 파티션(Network Partition)이 원인입니다. 예를 들어 5대의 노드로 구성된 클러스터가 스위치 장애로 2대와 3대 그룹으로 나뉘면, 각 그룹은 상대 그룹이 죽었다고 판단할 수 있습니다. 만약 리더 선출 로직에 안전장치가 없다면 두 그룹 모두 리더(Master)를 새로 뽑아버립니다.

  • 같은 데이터에 대해 서로 다른 값을 쓰는 데이터 불일치(Inconsistency)
  • 동일 작업이 중복 실행되는 문제
  • 장애 복구 후 어느 쪽 데이터가 맞는지 판단하기 어려운 병합(Merge) 이슈

대표적으로 MySQL의 Master-Slave 복제 구조나 Kubernetes의 etcd 클러스터, 분산 캐시 시스템 등에서 이런 문제가 생길 수 있습니다.

실무에서의 대응 방법

이를 막기 위해 대부분의 분산 시스템은 ‘과반수(Quorum)’ 개념을 사용합니다. 전체 노드 중 절반을 초과하는 수의 노드가 살아있어야만 리더 선출이나 쓰기 작업을 허용하는 방식입니다. 예를 들어 5대 중 2대와 3대로 나뉘면, 3대 그룹만 과반수를 만족하므로 이 그룹만 정상 동작하고 2대 그룹은 스스로 서비스를 중단합니다.

또한 Fencing이라는 기법을 통해 이전 리더가 다시 활동하지 못하도록 강제로 격리시키기도 합니다. Zookeeper, etcd, Raft 알고리즘 기반 시스템들이 이런 Quorum 기반 합의를 기본 원리로 채택하고 있습니다. 분산 시스템을 설계하거나 운영할 때는 단순히 ‘노드를 여러 대 두면 안전하다’는 생각보다, 네트워크 단절 상황까지 고려한 합의 알고리즘 설계가 필수적이라는 점을 기억해야 합니다.

댓글 남기기