Leader Election의 정의
Leader Election(리더 선출)은 여러 대의 서버(노드)로 구성된 분산 시스템에서, 특정 작업을 총괄할 대표 노드 하나를 자동으로 선정하는 알고리즘을 말합니다. 분산 시스템은 서버가 여러 대이기 때문에 ‘누가 최종 결정을 내릴 것인가’를 명확히 하지 않으면 데이터 불일치나 충돌이 발생할 수 있습니다. 이때 여러 노드 중 하나를 리더로 뽑아, 리더가 쓰기 작업이나 스케줄링, 트랜잭션 조율 등 중요한 역할을 전담하게 만드는 것이 Leader Election의 핵심 목적입니다. 쉽게 비유하면, 여러 명이 모여 회의를 진행할 때 사회자 한 명을 정해서 발언 순서를 정리하는 것과 비슷합니다. 사회자가 없으면 모두가 동시에 말해서 혼란이 생기듯, 분산 시스템도 리더가 없으면 노드마다 서로 다른 결정을 내려 데이터 정합성이 깨질 수 있습니다.
동작 원리와 대표적인 방식
Leader Election은 보통 노드 간 합의(consensus) 알고리즘을 기반으로 동작합니다. 대표적으로 다음과 같은 방식이 있습니다.
Bully Algorithm: 노드마다 고유 ID를 부여하고, 가장 높은 ID를 가진 노드가 리더가 되는 방식입니다. 리더가 죽으면 살아있는 노드 중 가장 ID가 높은 노드가 다시 리더로 선출됩니다.Raft: 노드들이 일정 시간 동안 리더의 신호(heartbeat)가 없으면 스스로 후보(candidate)가 되어 투표를 요청하고, 과반수 표를 얻은 노드가 리더가 됩니다. Kubernetes, etcd 등에서 널리 사용됩니다.ZAB(ZooKeeper Atomic Broadcast): Apache ZooKeeper에서 사용하는 방식으로, 리더 선출과 함께 데이터 복제 순서도 함께 보장합니다.
예를 들어 3대의 서버로 구성된 클러스터에서 리더 서버가 갑자기 다운되면, 나머지 두 서버는 일정 시간(타임아웃) 동안 리더의 응답이 없음을 감지하고 새로운 투표를 시작합니다. 과반수인 2표 이상을 얻은 노드가 새 리더가 되어 서비스를 계속 이어갑니다.
실무에서 왜 중요한가
Leader Election은 고가용성(HA)이 필요한 시스템에서 필수적인 개념입니다. 리더가 없으면 여러 노드가 동시에 같은 작업을 처리하려다 데이터가 꼬이거나, 반대로 아무도 작업을 처리하지 않는 상황이 생길 수 있습니다. 대표적으로 Kubernetes의 컨트롤러 매니저는 여러 인스턴스가 실행되더라도 오직 하나만 실제 작업을 수행하도록 Leader Election을 사용하며, Kafka는 파티션마다 리더 브로커를 선출해 읽기/쓰기 요청을 처리합니다. 이처럼 Leader Election은 장애 발생 시에도 서비스가 중단 없이 자동으로 복구되도록 돕는 핵심 메커니즘이며, 분산 시스템을 설계할 때 반드시 이해하고 넘어가야 할 개념입니다.