목차
Consul 클러스터 설정하기 (1)
Linux에서 Consul 클러스터를 설정하는 방법에 대한 소개.
2018-10-31#프로그래밍
💡 이 글은 작성된지 1년 이상 지났습니다. 정보글의 경우 최신 내용이 아닐 수 있음에 유의해주세요.
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
마스터 노드를 실행하는 명령어는 다음과 같습니다.
$ 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>
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 지원을 간단하게 테스트해봅시다.
본 사이트의 저작물은 별도의 언급이 없는 한 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.
LYnLab, 2011 - 2025.
작성한 댓글은 giscus를 통해 GitHub Discussion에 저장됩니다.