프로토콜 — 서버 ↔ 서버 (클러스터)
클러스터 모드에서만 사용되는 피어 RPC 프로토콜입니다. 노드들은 Raft 합의로 하나의 락 상태를 공유합니다 — 모든 락 상태 변경(획득·반납·만료)이 리더의 제안 → 과반 복제 → 커밋을 거친 뒤에만 적용되므로, 분단·장애조치 중에도 상호배제가 유지됩니다. 개념 설명은 동작 원리를 참고하세요.
흐름 — 획득 한 건이 커밋되기까지
클라이언트
리더
팔로워 1
팔로워 2
A · 획득 (key)
AppendEntries (Grant)
AppendEntries (Grant)
OK
과반 도달 → 커밋, 모든 노드가 적용
A · 획득됨 (token)
요청응답합의 RPC (Raft)
리더는 락 명령을 복제 명령으로 만들어 AppendEntries에 실어 보내고, 자신을 포함한 과반이 받아 적으면 커밋합니다(3노드면 리더 + 팔로워 1로 충분 — 나머지 응답은 기다리지 않습니다). 클라이언트 응답은 커밋 이후에만 나가므로, 응답을 받았다면 그 락은 과반에 새겨진 상태입니다.
포트·주소 규칙
- 클라이언트 주소(
cluster_self)와 Raft 주소(cluster_raft_self)는 서로 다른 명시적 주소입니다. 임의의 외부 포트 매핑에서도 정확한 피어 identity를 검증해야 하므로+1000자동 파생은 사용하지 않습니다. cluster_peers의 항목은NodeId@incarnation@client_addr@peer_addr형식입니다.M리다이렉트에는client_addr만 실려 나가며, Raft RPC는peer_addr로 접속합니다.- 방화벽에서는 클라이언트 포트와 Raft 포트를 구분하고, Raft 포트는 인증된 피어만 접근하는 private network에 제한합니다.
- listener 역할은 포트로 구분하지만, 인증 뒤 peer hello에서
cluster_id, wire version, source/target NodeId와 process incarnation을 다시 검증합니다. 접속 수립 순서와 인증·TLS 규칙은 접속 수립 · 인증을 참고하세요.
목차
참고
- 리더 선출·과반 커밋·장애 시나리오의 쉬운 설명 — 동작 원리
- 클라이언트가 리더를 찾아가는 규칙 —
M· 이동, 응답 매칭 규칙 - Docker · Kubernetes 등 실제 배포 구성 — Ticketing 서버 배포