Consul 핵심 개념
Consul 핵심 개념 (Concepts)
이 문서는 Consul의 내부 동작을 이해하기 위한 개념적 모델을 소개해요. 카탈로그, 합의, 일관성, 가십, 신뢰성이라는 다섯 가지 핵심 개념으로 Consul이 어떻게 동작하는지 차근차근 설명할게요.
출처: 문서
본문
이 문서는 Consul의 내부 동작을 이해하기 위한 개념적 모델을 개괄합니다.
카탈로그 (Catalog)
Consul은 Catalog API를 통해 등록된 서비스에 대한 정보를 추적합니다. 이 API는 파티션과 필요한 헬스 체크 같은 외부 서비스에 대한 사용자 정의 정보를 기록합니다. 또한 각 서비스 인스턴스의 ID와 인스턴스가 등록·수정된 시점의 Raft 인덱스 같은 Consul이 자체 운영을 위해 할당한 정보도 기록합니다.
Consul 카탈로그와 카탈로그가 등록하는 정보에 대해 더 알아보려면 Catalog를 참조하세요.
합의 (Consensus)
서버 에이전트 간 카탈로그 정보의 불일치를 조정하기 위해 서버는 Raft 프로토콜을 사용해 "합의(consensus)"라는 과정에 참여합니다.
합의 과정에서 각 서버 에이전트는 "팔로워(follower)"로 시작합니다. 팔로워는 Raft 인덱스의 로그 항목으로 클러스터 이벤트의 권위 있는 기록을 유지하는 "리더(leader)"를 선출합니다. 서버 에이전트는 어느 노드가 현재 리더인지에 대한 쿼럼(quorum)을 유지합니다. 쿼럼 크기는 클러스터의 투표 서버 수에 따라 달라집니다.
클러스터는 특정 클러스터 이벤트에 대응하여 정기적으로 선거를 열어 새 리더를 선출합니다. 이 과정에 대해 자세히 알아보려면 Consensus를 참조하세요.
일관성 (Consistency)
Consul은 전역 서비스 카탈로그와 에이전트의 로컬 상태를 구분합니다. 에이전트는 서비스와 헬스 체크에 대한 정보를 클러스터의 리더에게 전달하고, 리더는 권위 있는 카탈로그를 다른 서버 노드에 복제합니다. 이로 인해 특정 시점에 노드마다 서로 다른 카탈로그 정보를 가질 수 있는데, 이것은 Consul 설계의 의도된 부분입니다. 결과를 일관되게 유지하기 위해 Consul의 안티 엔트로피(anti-entropy) 메커니즘이 주기적으로 로컬 에이전트 상태를 카탈로그와 동기화합니다.
자세한 내용은 일관성 (consistency)을 참조하세요.
일관성 모드 (Consistency modes)
Consul 카탈로그를 쿼리하면 에이전트는 기본적으로 요청을 클러스터의 리더에게 전달한 후 가장 최신의 권위 있는 결과를 반환합니다. 네트워킹 요구에 따라 정확성과 지연 시간의 균형을 맞추도록 Consul 에이전트의 일관성 모드를 변경할 수 있습니다. 강력하게 일관된 결과는 가장 높은 정확도를 주지만 지연 시간이 늘어날 수 있고, 로컬 에이전트에서 결과를 반환하면 지연 시간은 줄지만 오래된 데이터가 나올 수 있습니다.
자세한 내용은 일관성 모드 (consistency modes)를 참조하세요.
가십 (Gossip)
Consul은 데이터센터 운영을 위해 Serf라는 가십 프로토콜을 구현합니다. Consul은 기본적으로 LAN 가십 풀을 활성화하는데, 이를 통해 데이터센터의 모든 노드와 통신하여 멤버십 정보를 공유할 수 있습니다. 이 풀은 자동 서버 디스커버리, 장애 감지, 신뢰할 수 있는 이벤트 브로드캐스트를 지원하며 기본적으로 포트 8301에서 동작합니다. 서버 간 가십은 Consul의 HTTP API와 CLI를 사용해 주기적으로 교체해야 하는 암호화 키로 보호됩니다.
자세한 내용은 gossip을 참조하세요.
신뢰성 (Reliability)
내결함성(fault tolerance)은 일부 구성 요소가 실패해도 시스템이 계속 작동할 수 있게 해 줍니다. Consul에서 서버 에이전트 수가 클러스터의 쿼럼과 내결함성을 결정합니다. 최적의 내결함성과 성능을 위해 투표 서버 에이전트를 3개 또는 5개로 Consul 클러스터를 배포하는 것을 권장합니다. 서버 에이전트를 가용 영역에 분산 배포하는 전략은 내결함성을 더욱 향상시킬 수 있으며, Consul Enterprise는 대규모 자동화 운영을 위한 추가 기능을 제공합니다.
자세한 내용은 reliability를 참조하세요.