3개 노드의 합의 클러스터에서 2개 노드와 통신할 수 없습니다. 남은 노드가 데이터를 갖고 있어도 왜 쓰기를 계속 확정하면 안 되나요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
3개 노드의 고정 구성에서 2개와 통신할 수 없다면 남은 1개가 살아 있고 최신 데이터를 가져도 일반 쓰기를 확정해서는 안 됩니다. 과반은 노드 수만 세는 것이 아니라 서로 다른 두 결정 집합이 참여자를 공유하게 해 충돌을 막는 규칙입니다. 한 노드가 과거 결정을 모두 안다고 추정하는 것만으로 새 결정을 안전하게 만들 수 없습니다.
생존과 쿼럼 참여
A·B·C 중 A만 남으면 A는 최신처럼 보이는 로그를 가질 수 있어도 B·C가 이미 다른 리더의 엔트리를 과반에 저장했는지 모릅니다. A가 단독으로 새 쓰기를 성공시킨 뒤 연결이 회복되면 두 시퀀스가 모두 확정된 것처럼 보일 수 있습니다. 프로세스 생존과 현재 구성의 통신·저장·프로토콜 참여 가능성을 구분하겠습니다.
3개 중 하나 장애는 2개가 통신할 때 진행할 수 있지만, 2개가 사라지면 안전성을 위해 쓰기를 거부합니다. 읽기는 제품 계약에 따라 마지막 커밋 또는 잠정 로컬 값을 반환할 수 있어도 최신 확정값이라고 부르지 않겠습니다. 노드를 늘리면 허용 장애 수가 커질 수 있지만 복제 트래픽과 지역 왕복이 늘고 장애 영역 배치가 중요합니다.
강제 복구의 비용
영구 쿼럼 손실 뒤 단일 노드를 새 클러스터로 강제 시작하면 기존 클러스터에서 확정됐을 수 있는 기록을 버릴 수 있습니다. 이는 정상 재시작이 아니라 데이터 손실과 대사·복원 정책의 승인이 필요한 절차입니다. 구성 변경 중에는 이전·새 구성의 별도 규칙을 적용합니다.
검증은 통신 단절, 디스크 지연, 고립 리더를 나눠 주입해 성공 응답 조건, commit index, 복구 후 확정값 충돌을 확인합니다. 단일 노드가 최신처럼 보인다는 인상보다 현재 구성의 겹치는 쿼럼과 프로토콜 약속을 우선합니다.
교집합이 안전성으로 이어지는 조건
고정 5개 구성의 과반은 3개이므로 서로 통신 가능한 세 노드가 남으면 두 노드 장애를 견딜 수 있습니다. 4개 구성도 과반이 3개라 장애 하나까지만 견디므로 노드 하나를 늘릴 때마다 장애 허용 수가 하나씩 늘지는 않습니다. 같은 랙에 세 노드를 두면 랙 장애로 과반을 잃을 수 있어 논리 노드 수와 독립 장애 영역 수를 함께 봅니다.
과반 집합이 겹쳐도 참여자가 이전 투표와 로그를 잊으면 충돌을 막을 수 없습니다. 투표·수락 기록을 안정적으로 보존하고 새 리더가 기존 확정값을 이어받는 프로토콜을 지켜야 합니다. 프로세스는 살아 있지만 디스크가 쓰기를 완료하지 못하거나 네트워크가 한 방향으로만 통하는 경우도 실질적인 쿼럼 참여 실패입니다. 단순 ping 성공을 합의 가능성으로 보지 않겠습니다.
정상 복구에서는 노드의 원래 ID와 저장 기록을 유지해 재참여시키고 뒤처진 로그를 따라잡게 합니다. 강제 복구는 옛 클러스터를 차단한 뒤 새 권위 지점을 선언해야 split-brain을 막습니다. 읽기 전용 서비스를 잠시 허용한다면 마지막 적용 위치와 오래됨을 표시하고, 그 값을 이용한 결제·예약 확정은 허용하지 않겠습니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 쿼럼 교집합과 프로토콜 약속을 함께 설명한다.
- 생존 노드와 참여 가능 노드를 구분한다.
- 읽기·쓰기·강제 복구 계약을 나눈다.
- 노드 수와 장애 영역·복제 비용을 함께 본다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- 한 노드가 살아 있으면 안전한 쓰기가 가능하다.
- 과반 숫자만으로 모든 구현을 단정한다.
- 강제 복구의 데이터 손실을 숨긴다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.