[IT 잡썰] Split Brain 이란?

    서버 이중화 구성 시 발생할 수 있는 Split Brain(스플릿 브레인) 현상은, 서버 클러스터 내에서 네트워크가 단절되거나 통신 장애가 발생했을 때 두 개 이상의 노드가 서로를 마스터(혹은 리더)로 인식하지 못하고 각각 독립적으로 운영되는 상황을 말합니다. 이로 인해 데이터 일관성 문제와 장애 복구 실패 등의 문제가 발생할 수 있습니다.

    Split Brain 현상의 원인

    • 네트워크 분리 (Network Partition): 클러스터 내의 노드 간 통신이 끊어져서 각 노드가 서로를 감지하지 못하고, 둘 다 마스터로 동작하거나 서로 다른 리더를 선출하는 상황입니다.
    • 노드 장애: 특정 노드가 일시적으로 응답하지 않거나, 재부팅 후 복구되었을 때 네트워크 격리 상태가 발생할 수 있습니다.
    • 관리자 실수: 서버나 네트워크 설정 변경 시 노드 간 통신이 끊기거나, 잘못된 재구성으로 인해 Split Brain 현상이 발생할 수 있습니다.

    Split Brain의 문제점

    • 데이터 일관성 문제: 두 개 이상의 노드가 동시에 마스터로 동작하면서 동일한 데이터를 다르게 업데이트하거나 서로 충돌하는 데이터를 생성하여 데이터의 일관성이 깨집니다.
    • 데이터 손실: 네트워크가 복구될 때 각 노드가 서로 다른 상태를 반영하면서 일부 데이터가 유실될 수 있습니다.
    • 서비스 중단: Split Brain 상황에서 각 노드가 서로 충돌하여 시스템 전체가 복구되지 못하거나 혼란스러운 상태에 빠질 수 있습니다.

    Split Brain 방지 방안 설계

    Split Brain 문제를 해결하기 위해 다양한 기법들이 존재하며, 주로 네트워크 파티션 감지와 리더 선출 메커니즘을 통해 문제를 방지합니다. 아래는 주요 방지 방안입니다:

    쿼럼 기반 리더 선출 (Quorum-based Leader Election)

    • 쿼럼(Quorum)은 클러스터 내에서 의사 결정을 내리기 위해 필요한 최소한의 동의 노드 수를 말합니다. Split Brain을 방지하기 위해, 클러스터의 노드들 중 과반수 이상의 노드가 동의해야만 리더가 선출됩니다. 이렇게 되면 네트워크가 분리되더라도 과반수를 확보한 쪽만이 리더로 활동할 수 있습니다.
    • 쿼럼 예시: 3개의 노드로 이루어진 클러스터에서는 2개의 노드 이상이 응답할 때만 리더를 선출합니다. 만약 2개의 노드가 같은 네트워크 파티션에 속하지 않으면, Split Brain 현상을 방지할 수 있습니다.
    방안:
    • 3개 이상의 노드로 클러스터를 구성하여 네트워크 파티션이 발생하더라도 쿼럼을 만족하는 그룹에서만 리더가 선출되도록 설정합니다.
    • 이를 위해 RaftPaxos와 같은 분산 합의 알고리즘을 사용하여 쿼럼 기반 리더 선출을 구현합니다.

    STONITH (Shoot The Other Node In The Head)

    • STONITH는 Split Brain 상황을 해결하기 위한 방법 중 하나로, 클러스터 노드 중에서 문제가 발생한 노드를 강제로 종료하거나 재시작하는 방식입니다. 이를 통해 한 쪽 노드만이 마스터로 활동하도록 보장합니다.
    • STONITH 실행 방식: 클러스터 내에서 일정 시간이 지나도 응답이 없는 노드를 네트워크나 하드웨어 레벨에서 강제적으로 종료하여 Split Brain이 발생하지 않도록 합니다.
    방안:
    • Pacemaker와 같은 클러스터 관리 도구를 사용하여 STONITH를 설정하고, 장애가 발생한 노드를 자동으로 제거하거나 재부팅합니다.
    • 하드웨어나 네트워크 장비가 지원하는 IPMI(인텔리전트 플랫폼 관리 인터페이스)와 같은 기능을 통해 특정 노드의 전원을 끄거나 다시 켤 수 있도록 구성합니다.

    타임아웃 및 재시도 메커니즘

    • 타임아웃 설정: 네트워크가 일시적으로 끊기거나 장애가 발생했을 때 즉각 리더를 선출하지 않고, 일정 시간 동안 응답을 기다린 후 리더 선출 절차를 시작합니다. 이를 통해 잠시 동안 발생한 네트워크 장애로 인한 Split Brain을 방지할 수 있습니다.
    • 재시도: 응답이 지연된 노드를 여러 번 재시도하여 네트워크가 일시적으로 불안정한 상황에서 Split Brain을 방지할 수 있습니다.
    방안:
    • 클러스터 관리 시스템에서 노드 간 통신 타임아웃을 적절히 설정하여 일시적인 네트워크 장애로 인한 잘못된 리더 선출을 방지합니다.
    • 일정 시간 내에 응답이 없으면 자동으로 재시도하거나, 다른 노드와 재연결을 시도하는 로직을 구성합니다.

            종합 방안

            1. 쿼럼 기반 리더 선출을 통해 네트워크 분리가 발생해도 과반수를 차지한 노드만 리더로 동작할 수 있도록 설정.
            2. STONITH 설정을 통해 네트워크가 복구되지 않는 상황에서 Split Brain을 방지하기 위해 문제 노드를 강제로 종료.
            3. Heartbeat 감시 및 타임아웃 설정을 통해 일시적인 네트워크 장애를 감지하고, 잘못된 리더 선출을 방지.

            이러한 설계를 통해 Split Brain 현상을 방지하고, 고가용성을 유지하면서 데이터 일관성과 안정성을 보장할 수 있습니다.

            댓글 달기

            이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다