[CKA] etcd 고가용성과 쿼럼

etcd의 리더 선출, 쓰기 합의, 쿼럼과 노드 수 선택 원칙을 정리합니다.

etcd는 Kubernetes의 클러스터 상태를 저장하는 분산 키 값 저장소입니다. 여러 멤버가 데이터 복제본을 유지하며, Raft 합의를 사용해 변경 순서와 일관성을 맞춥니다.

리더와 쓰기 합의

클러스터는 멤버 가운데 리더를 선출합니다. 팔로워가 받은 쓰기 요청은 리더에게 전달되고, 리더는 로그 항목을 복제합니다. 과반수 멤버가 항목을 받아들여야 변경이 커밋됩니다. 리더와의 통신이 끊기면 새 선거가 시작됩니다.

쿼럼은 단순히 N/2 + 1을 계산한 실수가 아니라 과반수인 floor(N/2) + 1입니다. 3개 멤버의 쿼럼은 2, 5개 멤버의 쿼럼은 3입니다. 견딜 수 있는 동시 멤버 장애 수는 N - quorum입니다.

멤버 수 선택

HA를 목표로 하면 보통 3개 이상의 홀수 멤버를 사용합니다. 2개에서 3개로 늘리면 허용 가능한 장애 수가 0에서 1로 늘지만, 3개에서 4개로 늘려도 쿼럼이 3이 되어 허용 장애 수는 여전히 1입니다. 그래서 같은 장애 허용 수준에서 짝수 멤버를 추가하는 이점이 작습니다.

etcd의 기본 클라이언트 통신은 2379, 멤버 간 피어 통신은 2380 포트를 사용합니다. 실제 구성에는 멤버별 이름과 피어 URL, 클라이언트 URL, TLS 인증서, 데이터 디렉터리, 초기 클러스터 상태가 함께 필요합니다.

export ETCDCTL_API=3
etcdctl put example value
etcdctl get example
etcdctl get --keys-only --prefix ""

Kubernetes와 etcd의 버전 호환 범위를 확인하고, 정기 백업과 복원 절차도 함께 준비합니다.

참고: kubeadm으로 외부 etcd HA 구성