Consul 컨트롤 플레인 아키텍처
Consul 컨트롤 플레인 아키텍처
이 주제에서는 Consul 아키텍처에 대한 개요를 다루고 있어요. HashiCorp 용어에 익숙해지는 데 도움이 되도록 Consul 용어집을 함께 보는 걸 추천해요.
출처: 문서
본문
이 주제에서는 Consul 아키텍처에 대한 개요를 제공합니다. HashiCorp 용어에 익숙해지는 데 도움이 되도록 이 주제와 함께 Consul 용어집을 검토하는 것을 권장합니다.
프로덕션 환경에서 Consul 배포에 대한 실습 가이드는 Reference Architecture 튜토리얼을 참조하세요.
소개 (Introduction)
Consul은 네트워크 전반에 배포된 서비스를 등록하고, 접근하고, 보호할 수 있게 해주는 컨트롤 플레인을 제공합니다. 컨트롤 플레인 은 서비스와 각각의 IP 주소를 추적하는 중앙 레지스트리를 유지하는 네트워크 인프라의 일부입니다.
Consul의 서비스 메시 기능을 사용하면 Consul이 요청 경로의 사이드카 및 게이트웨이 프록시를 동적으로 구성합니다. 이를 통해 서비스 코드를 수정하지 않고도 서비스 간 연결을 인가하고, 요청을 정상 서비스 인스턴스로 라우팅하며, mTLS 암호화를 적용할 수 있습니다. 이렇게 하면 통신이 성능 있고 신뢰할 수 있게 유지됩니다. 사이드카 프록시에 대한 개요는 Service Mesh Proxy Overview를 참조하세요.
데이터센터 (Datacenters)
Consul 컨트롤 플레인에는 하나 이상의 데이터센터 가 포함됩니다. 데이터센터는 기본적인 Consul 작업을 수행할 수 있는 Consul 인프라의 가장 작은 단위입니다. 데이터센터에는 최소 하나의 Consul 서버 에이전트가 포함되지만, 실제 배포에서는 서버 에이전트 3~5개와 여러 Consul 클라이언트 에이전트가 포함됩니다. 여러 데이터센터를 만들고 서로 다른 데이터센터의 노드가 상호 작용하도록 허용할 수 있습니다. 데이터센터를 만드는 방법에 대한 정보는 Bootstrap a Datacenter를 참조하세요.
클러스터 (Clusters)
서로를 인식하는 Consul 에이전트의 모임을 클러스터 라고 합니다. 데이터센터 와 클러스터 용어는 종종 같은 의미로 사용됩니다. 일부 맥락에서는 Consul Enterprise에 포함된 admin partitions 기능과 같은 경우 클러스터가 클라이언트 에이전트의 모임을 가리킬 수도 있습니다.
에이전트 (Agents)
Consul 바이너리를 실행하면 Consul 컨트롤 플레인 기능을 구현하는 데몬인 Consul 에이전트 를 시작할 수 있습니다. 에이전트는 서버 또는 클라이언트로 시작할 수 있습니다. 자세한 내용은 Consul agent를 참조하세요.
서버 에이전트 (Server agents)
Consul 서버 에이전트는 서비스 및 노드 IP 주소, 상태 검사, 구성을 포함한 모든 상태 정보를 저장합니다. 클러스터에 서버 3개 또는 5개를 배포하는 것을 권장합니다. 더 많은 서버를 배포할수록 장애 발생 시 복원력과 가용성이 높아집니다. 그러나 서버가 많을수록 클러스터 합의(consensus) 속도가 느려집니다. 합의는 Consul이 정보를 효율적이고 효과적으로 처리할 수 있게 하는 중요한 서버 기능입니다.
합의 프로토콜 (Consensus protocol)
Consul 클러스터는 합의 라는 프로세스를 통해 단일 서버를 리더 로 선출합니다. 리더는 모든 쿼리와 트랜잭션을 처리하여 여러 서버가 포함된 클러스터에서 충돌하는 업데이트를 방지합니다.
현재 클러스터 리더로 활동하지 않는 서버를 팔로워 라고 합니다. 팔로워는 클라이언트 에이전트의 요청을 클러스터 리더에게 전달합니다. 리더는 요청을 클러스터의 다른 모든 서버에 복제합니다. 복제를 통해 리더를 사용할 수 없게 되더라도 클러스터의 다른 서버가 데이터 손실 없이 새 리더를 선출할 수 있습니다.
Consul 서버는 포트 8300에서 Raft 알고리즘을 사용하여 합의를 수립합니다. 자세한 내용은 Consensus Protocol을 참조하세요.
클라이언트 에이전트 (Client agents)
Consul 클라이언트는 노드 및 서비스 상태를 Consul 클러스터에 보고합니다. 일반적인 배포에서는 데이터센터의 모든 컴퓨팅 노드에서 클라이언트 에이전트를 실행해야 합니다. 클라이언트는 원격 프로시저 호출(RPC)을 사용하여 서버와 상호 작용합니다. 기본적으로 클라이언트는 포트 8300에서 서버로 RPC 요청을 보냅니다.
Consul에서 사용할 수 있는 클라이언트 에이전트 또는 서비스 수에는 제한이 없지만, 프로덕션 배포에서는 서비스를 여러 Consul 데이터센터에 분산해야 합니다. 다중 데이터센터 배포를 사용하면 인프라 복원력이 향상되고 컨트롤 플레인 문제가 제한됩니다. 데이터센터당 클라이언트 에이전트를 최대 5,000개까지 배포하는 것을 권장합니다. 일부 대규모 조직은 다중 데이터센터 배포에 걸쳐 수만 개의 클라이언트 에이전트와 수십만 개의 서비스 인스턴스를 배포했습니다. 자세한 내용은 Cross-datacenter requests를 참조하세요.
클라이언트 에이전트 없이 Envoy 프록시를 배포하는 대체 서비스 메시 구성으로 Consul을 실행할 수도 있습니다. 자세한 내용은 Simplified Service Mesh with Consul Dataplanes을 참조하세요.
LAN gossip 풀 (LAN gossip pool)
클라이언트 및 서버 에이전트는 LAN gossip 풀에 참여하여 노드 상태 검사를 분산하고 수행합니다. 풀의 에이전트는 클러스터 전반에 상태 검사 정보를 전파합니다. 에이전트 gossip 통신은 UDP를 사용하여 포트 8301에서 발생합니다. UDP를 사용할 수 없으면 에이전트 gossip은 TCP로 대체됩니다. 자세한 내용은 gossip을 참조하세요.
다음 단순화된 다이어그램은 서버와 클라이언트 간의 상호 작용을 보여줍니다.
LAN gossip poolRPC
데이터센터 간 요청 (Cross-datacenter requests)
각 Consul 데이터센터는 자체 서비스 카탈로그와 상태를 유지합니다. 기본적으로 이 정보는 데이터센터 간에 복제되지 않습니다. WAN 페더레이션과 클러스터 피어링은 데이터센터 간 서비스 연결을 가능하게 하는 두 가지 다중 데이터센터 배포 모델입니다.
WAN 페더레이션 (WAN federation)
WAN 페더레이션은 여러 Consul 데이터센터를 연결하는 방법입니다. 서비스 메시 구성과 ACL(액세스 제어 목록) 리소스를 포함한 모든 데이터센터에 대한 권위 있는 정보가 포함된 기본 데이터센터(primary datacenter) 를 지정해야 합니다.
이 모델에서 클라이언트 에이전트가 원격 보조 데이터센터의 리소스를 요청하면 로컬 Consul 서버가 리소스에 액세스할 수 있는 원격 Consul 서버로 RPC 요청을 전달합니다. 원격 서버는 결과를 로컬 서버로 보냅니다. 원격 데이터센터를 사용할 수 없으면 해당 리소스도 사용할 수 없습니다. 기본적으로 WAN 페더레이션 서버는 포트 8300에서 TCP를 통해 데이터센터 간 요청을 보냅니다.
메시 게이트웨이를 통해 컨트롤 플레인 및 데이터 플레인 트래픽을 전송하도록 구성할 수 있으며, 이렇게 하면 네트워킹 요구 사항이 간소화됩니다.
Hands-on: ACL 시스템이 활성화된 상태에서 서비스가 데이터센터 간에 통신할 수 있게 하려면 ACL Replication for Multiple Datacenters 튜토리얼을 참조하세요.
WAN gossip 풀 (WAN gossip pool)
서버는 인터넷이 부과하는 더 큰 대기 시간에 최적화된 WAN gossip 풀에도 참여할 수 있습니다. 이 풀을 통해 서버는 주소와 상태 같은 정보를 교환하고, 장애 발생 시 연결 손실을 원활하게 처리할 수 있습니다.
다음 다이어그램에서 각 데이터센터의 서버는 포트 8302에서 TCP/UDP를 통해 데이터를 전송하여 WAN gossip 풀에 참여합니다. 자세한 내용은 Gossip Protocol을 참조하세요.
WAN gossip poolRemote datacenter forwarding
클러스터 피어링 (Cluster peering)
두 개 이상의 독립적인 클러스터 간에 피어링 연결을 만들어 서로 다른 데이터센터 또는 admin 파티션에 배포된 서비스가 통신할 수 있게 할 수 있습니다. admin partition은 동일한 Consul 서버를 사용하는 격리된 네트워크 영역을 정의할 수 있게 해주는 Consul Enterprise의 기능입니다. 클러스터 피어링 모델에서는 한 데이터센터 또는 파티션에서 토큰을 만들고, 다른 데이터센터 또는 파티션이 연결을 수립하기 위해 해당 토큰을 제시하도록 구성합니다.
자세한 내용은 cluster peering overview을 참조하세요.