1. 소개

Consul은 서비스 검색, 구성 및 분할 기능을 갖춘 완벽한 기능의 컨트롤 플레인을 제공하는 서비스 메시 솔루션이다. 각 기능은 필요에 따라 개별적으로 사용하거나 함께 사용하여 전체 서비스 메쉬를 구성할 수 있다. Consul에는 Control Plane이 필요하며 프록시 및 기본 통합 모델을 모두 지원한다. Consul은 간단한 기본 제공 프록시를 제공하므로 모든 것이 기본적으로 작동하지만 Envoy와 같은 타 프록시 통합도 지원한다.

Spring Cloud Eureka나 Apache ZooKeeper와의 차별점은 DNS 방식이라는 것이다.


2. 특징

  • Service Discovery : Consul 클라이언트는 API나 MySQL 등의 서비스를 등록 할 수 있다. 또 다른 클라이언트가 디스커버링을 위해 Consul을 사용할 수 있다. 응용 프로그램은 DNS 또는 HTTP를 사용하여 의존성이 있는 서비스를 쉽게 찾을 수 있다.
  • Health Check : Consul 클라이언트는 주어진 서비스( = 200 OK를 반환하는 웹 서버) 또는 로컬 노드(=90% 미만의 메모리를 사용하는)와 관련된 여러 가지 헬스 체크를 제공한다. 이러한 정보들을 통해 운영자가 클러스터 상태를 모니터링할 수 있고, 있으며 서비스 디스커버리 컴포넌트가 비정상적인 호스트로 트래픽을 라우팅하지 않도록 한다.
  • KV 스토어 : 애플리케이션은 동적 구성, 플래그 기능, 조정, 리더 선출 등을 포함한 다양한 용도로 Consul의 계층 적 Key/Value 저장소를 사용할 수 있다. 간단한 HTTP API가 이를 가능케 한다.
  • 보안 서비스 통신 : Consul은 서비스의 상호 TLS 연결을 위한 TLS 인증서를 생성 및 배포한다. Intentions는 통신이 허용된 서비스를 정의하는 데 사용한다. 복잡한 네트워크 토폴로지와 정적 방화벽 규칙을 사용하는 대신, 실시간으로 변경 가능한 Intentions를 통해 쉽게 서비스를 세그멘테이션할 수 있다.
  • 다중 데이터 센터 : Consul은 여러 데이터 센터를 지원한다. 이는 Consul 사용자가 멀티 리전 확장을 위해 추가적인 추상화 계층을 구축 할 필요가 없음을 의미한다.

3. 기본 개념

Consul은 분산된 고 가용성 시스템이다.

Consul에 서비스를 제공하는 모든 노드는 Consul Agent를 실행한다. 다른 서비스를 디스커버하거나 Key/Value 데이터를 get/set 하는데는 에이전트를 실행하지 않아도 된다. Agent는 노드 자체 뿐만 아니라 노드상의 서비스 헬스 체크도 수행한다.

에이전트들은 하나 이상의 Consul 서버와 통신한다 . Consul 서버는 데이터가 저장되고 복제된다. 그리고 서버 자체가 리더를 선출합니다. Consul은 한 서버에서 동작하지만, 데이터 손실을 피하기 위해 3~5대의 서버가 권장된다. 각 데이터 센터마다 Consul 서버 클러스터가 권장된다.

다른 서비스 혹은 노드를 찾아야하는 인프라 구성 요소들은 Consul 서버 또는 Consul 에이전트 아무나에게 쿼리 할 수 ​​있다 . Consul Agent는 서버에 자동으로 쿼리를 전달한다.

각 데이터 센터는 Consul 서버 클러스터를 실행한다. 만약 데이터 센터 간 서비스 검색이나 구성에 대한 요청이 있으면, 로컬 Consul 서버는 리모트 데이터 센터로 요청을 전달한 후 결과를 리턴한다.


4. Member와 Agent

Consul Member는 여러 에이전트 및 Consul 클러스터가 배포되어 있는 서버 방식의 목록으로 정의할 수 있다. Consul은 Consul과 관련된 모든 Member를 쉽게 나열 할 수있는 커맨드 라인 기능을 제공한다.

Consul Member는은 Consul의 핵심적인 과정이다. Agent는 멤버쉽 정보를 관리하고, 서비스를 등록하고, 검사를 실행하고, 쿼리에 응답하는 등의 작업을 수행한다. 모든 Agent는 클라이언트 혹은 서버 모드로 실행된다. 이 두 가지 모드는 Consul을 사용할 때 결정된 역할에 따라 사용할 수 있다.

  • Node name : 호스트 이름이다.
  • Datacenter : Agent 실행을 위해 구성된 데이터 센터이다. 각 노드는 개별 데이터센터에 보고되도록 구성되어야 한다.
  • Server : Agent가 서버 모드인지클라이언트 모드로 실행 중인지 여부를 나타낸다. 서버 노드는 합의 쿼럼에 참여하고, 클러스터 상태를 저장하며, 쿼리를 처리한다.
  • Client Addr : Agent가 사용하는 클라이언트 인터페이스의 주소이다. H TTP, DNS, RPC 인터페이스의 포트를 포함한다.
  • Cluster Addr : 클러스터 내 Consul Agent 사이에 통신에 사용하는 주소와 포트 셋이다. 이 주소는 다른 모든 노드에 의해 접근 가능해야 한다.

5. Service Discovery (서비스 검색)

Service Discovery는 Consul의 가장 중요한 기능이다. 이것은 다른 서비스와 그 서비스가 사용하는 네트워크 프로토콜을 탐지하는 것으로 정의된다. Service Discovery 사용은 분산 시스템에 커다한 축복이다. 이것은 분산 시스템이 발전된 오늘날 대규모 산업이 직면한 주요 문제 중 하나이다.


6. 비교

이 영역의 다른 서비스 디스커버리 도구로 두 가지 인기있는 옵션이 있다. 과거부터 소프트웨어 업계의 주요 업체들은 이를 사용해왔다. 이 도구는 Etcd와 Zookeeper이다.