LYnLab

소개블로그취미로그

Consul 클러스터 설정하기 (1)

Linux에서 Consul 클러스터를 설정하는 방법에 대한 소개.

2018-10-31#프로그래밍

💡 이 글은 작성된지 1년 이상 지났습니다. 정보글의 경우 최신 내용이 아닐 수 있음에 유의해주세요.

Consul 설치

Consul은 패키지 설치를 지원하지 않습니다. Download Consul 페이지에서 자신의 OS 환경에 맞는 버전을 고른 후, 아래와 같은 과정으로 설치를 진행합니다.

# 바이너리를 내려받습니다.
$ wget https://releases.hashicorp.com/consul/1.3.0/consul_1.3.0_linux_amd64.zip

# 압축을 풀고, 바이너리를 옮깁니다.
$ unzip consul_1.3.0_linux_amd64.zip
$ sudo mv consul /usr/bin

# 설치가 잘 되었는지 확인합니다.
$ consul version

Cluster 구성

서버 노드에서

마스터 노드를 실행하는 명령어는 다음과 같습니다.

$ sudo mkdir /etc/consul.d
$ nohup consul agent -server -bootstrap-expect=1 \
    -datacenter=dc1 -node=master -bind=<ip_address_1> -recursor 1.1.1.1 \
    -data-dir=/tmp/consul -config-dir=/etc/consul.d -ui >> /var/log/consul.log &

현재 클러스터에는 마스터 노드만 존재합니다. 이는 다음 명령어로 확인할 수 있습니다.

$ consul members
Node    Address               Status  Type    Build  Protocol  DC   Segment
master  <ip_address_1>:8301   alive   server  1.3.0  2         dc1  <all>

클라이언트 노드에서

이번에는 다른 서버에서 노드를 추가한 후, 앞서 띄운 서버와 연결하여 클러스터를 구성합니다.

# 에이전트를 실행합니다.
$ sudo mkdir /etc/consul.d
$ consul agent -datacenter=dc1 -node=client01 -bind=<ip_address_2> -recursor 1.1.1.1 \
    -data-dir=/tmp/consul -config-dir=/etc/consul.d >> /var/log/consul.log &

# 서버 에이전트와 연결합니다.
$ consul join ip_address_1
Successfully joined cluster by contacting 1 nodes.

# 연결이 잘 되었는지 확인합니다.
$ consul members
Node      Address               Status  Type    Build  Protocol  DC   Segment
master    <ip_address_1>:8301   alive   server  1.3.0  2         dc1  <all>
client01  <ip_address_2>:8301   alive   client  1.3.0  2         dc1  <default>

다음 포스트 : DNS 포워딩

Consul은 자체 DNS를 이용한 각 노드, 또는 서비스 간의 접속을 지원합니다. 예를 들어 모든 consul 노드에서는 master.node.consul 도메인으로 마스터 노드에 접근할 수 있습니다.

Consul의 DNS Resolver는 8600번 포트로 실행됩니다.

$ dig @127.0.0.1 -p 8600 master.node.consul

...
;; QUESTION SECTION:
;master.node.consul.		IN	A

;; ANSWER SECTION:
master.node.consul.	0	IN	A	ip_address_1
...

그러나 대부분의 서비스는 53번 포트를 이용해 DNS를 쿼리합니다. 따라서 아래와 같이 기본 설정으로 DNS를 쿼리하면 IP 주소를 찾지 못합니다.

$ dig master.node.consul

...
;; QUESTION SECTION:
;master.node.consul.		IN	A

;; AUTHORITY SECTION:
.			60	IN	SOA      ...
...

다음 포스트에서는 DNS 포워딩 기능을 이용하여, 로컬호스트의 8600번 포트를 기본 DNS Resovler로 설정하는 방법에 대해 소개하겠습니다.

관련된 글

Rails와 GitHub Actions에 커버리지 레포트를 달아보자

이 블로그의 CMS이기도 한 Shiori를 대폭 리팩토링하면서 테스트가 얼마나 잘 작성되어있는지 궁금해졌습니다.

Rails Global ID로 전역 객체 식별하기

Global ID는 Rails의 모든 객체를 식별할 수 있는 URI(Uniform Resource Identifier)입니다.

Ruby on WebAssembly: 살짝 맛보기

Ruby 3.2에 추가된 WebAssembly 지원을 간단하게 테스트해봅시다.

작성한 댓글은 giscus를 통해 GitHub Discussion에 저장됩니다.

크리에이티브 커먼즈 라이선스크리에이티브 커먼즈 저작자표시크리에이티브 커먼즈 동일조건변경허락

본 사이트의 저작물은 별도의 언급이 없는 한 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

© 2011 - 2024 Hoerin Doh, All rights reserved.

LYnLab 로고About MeGitHubTwitterInstagram