본문 바로가기

리눅스

[draft] Consul 클러스터를 구성하는 방법

728x90

Consul 클러스터를 구성하는 방법

테스트 환경

호스트 이름 서버 아이피 Type 비고
node211 192.168.0.211 server  
node212 192.168.0.212 server  
node213 192.168.0.213 server  
node214 192.168.0.214 client  

1. 각 서버 노드에 Consul 설치

2. Consul 클러스터를 구성

호스트 파일 설정

sudo tee -a /etc/hosts > /dev/null <<EOF

# Consul Cluster
192.168.0.211 node211
192.168.0.212 node212
192.168.0.213 node213
EOF

Consul 설정 파일 작성

consul.hcl 설정(/etc/consul.d/consul.hcl)

  • 각 서버 노드에 대해 설정 파일을 작성합니다.
vim /etc/consul.d/consul.hcl
  • node211
sudo tee /etc/consul.d/consul.hcl > /dev/null <<EOF
datacenter = "my-dc-1"
data_dir = "/opt/consul"
client_addr = "0.0.0.0"
ui_config{
  enabled = true
}
server = true
bind_addr = "0.0.0.0"
advertise_addr = "192.168.0.211"
bootstrap_expect=3
retry_join = ["node211", "node212", "node213"]
EOF
  • node212
sudo tee /etc/consul.d/consul.hcl > /dev/null <<EOF
datacenter = "my-dc-1"
data_dir = "/opt/consul"
client_addr = "0.0.0.0"
ui_config{
  enabled = true
}
server = true
bind_addr = "0.0.0.0"
advertise_addr = "192.168.0.212"
bootstrap_expect=3
retry_join = ["node211", "node212", "node213"]
EOF
  • node213
sudo tee /etc/consul.d/consul.hcl > /dev/null <<EOF
datacenter = "my-dc-1"
data_dir = "/opt/consul"
client_addr = "0.0.0.0"
ui_config{
  enabled = true
}
server = true
bind_addr = "0.0.0.0"
advertise_addr = "192.168.0.213"
bootstrap_expect=3
retry_join = ["node211", "node212", "node213"]
EOF

시스템 데몬 리로드

sudo systemctl daemon-reload

Consul 서비스 재시작

sudo systemctl restart consul

Consul 서비스 상태 확인

sudo systemctl status consul --no-pager

Consul 클러스터의 모든 노드의 목록을 확인

consul members
$ consul members               
Node     Address             Status  Type    Build   Protocol  DC       Partition  Segment
node211  192.168.0.211:8301  alive   server  1.19.1  2         my-dc-1  default    <all>
node212  192.168.0.212:8301  alive   server  1.19.1  2         my-dc-1  default    <all>
node213  192.168.0.213:8301  alive   server  1.19.1  2         my-dc-1  default    <all>

Consul 서버 클러스터의 Raft 피어 목록을 확인

consul operator raft list-peers
$ consul operator raft list-peers
Node     ID                                    Address             State     Voter  RaftProtocol  Commit Index  Trails Leader By
node212  3567b6c0-2626-a6c2-f469-45590bcdc505  192.168.0.212:8300  leader    true   3             896           -
node211  c806c762-67ef-a229-d369-d970520e7f01  192.168.0.211:8300  follower  true   3             896           0 commits
node213  e07dea70-aca9-0821-14f0-6b5725526044  192.168.0.213:8300  follower  true   3             896           0 commits

Consul 웹 UI 접속

웹 브라우저에서 http://<서버_IP>:8500으로 접속하여 Consul 웹 UI에 접속할 수 있습니다.

http://192.168.0.211:8500
728x90

Consul 클라이언트를 Consul 서버 클러스터에 조인(join)

1. Consul 클라이언트 설치

필요한 패키지 설치

sudo apt-get install -y unzip

Consul 사용자 및 디렉토리 생성

sudo useradd --system --home /etc/consul.d --shell /bin/false consul
sudo mkdir -p /etc/consul.d /opt/consul
sudo chown -R consul:consul /etc/consul.d
sudo chown -R consul:consul /opt/consul

Consul 바이너리 파일 다운로드 및 설치

cd /usr/local/src
latest_version=$(curl -fsSL https://api.releases.hashicorp.com/v1/releases/consul/latest | grep -oP '"version":\s*"\K[^"]+')
curl -fsSL https://releases.hashicorp.com/consul/${latest_version}/consul_${latest_version}_linux_amd64.zip -o consul.zip
unzip consul.zip
sudo mv consul /usr/local/bin/
sudo chmod +x /usr/local/bin/consul

다운로드된 파일 제거

rm consul.zip

Consul 버전 정보 확인

consul -v

시스템 서비스 파일 작성

sudo tee /usr/lib/systemd/system/consul.service > /dev/null <<EOF
[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target
ConditionFileNotEmpty=/etc/consul.d/consul.hcl

[Service]
Type=notify
EnvironmentFile=-/etc/consul.d/consul.env
User=consul
Group=consul
ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/
ExecReload=/bin/kill --signal HUP $MAINPID
KillMode=process
KillSignal=SIGTERM
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

Consul 클라이언트 서비스 시작 및 활성화

sudo systemctl daemon-reload
sudo systemctl --now enable consul

2. Consul 클라이언트 설정 파일

Consul 클라이언트를 설정하기 위해 /etc/consul.d/consul.hcl 파일을 작성합니다.

vim /etc/consul.d/consul.hcl
sudo tee /etc/consul.d/consul.hcl > /dev/null <<EOF
datacenter = "my-dc-1"
data_dir = "/opt/consul"
client_addr = "0.0.0.0"
bind_addr = "0.0.0.0"
retry_join = ["node211", "node212", "node213"]
EOF

설정 파일 권한 설정

sudo chown consul:consul /etc/consul.d/consul.hcl
sudo chmod 640 /etc/consul.d/consul.hcl

Consul 설정 파일 유효성 검사

sudo consul validate /etc/consul.d/

Consul 서비스 재시작

systemctl restart consul.service

Consul 서비스 상태 확인

systemctl status consul --no-pager

Consul 클러스터의 모든 노드의 목록을 확인

consul members
$ consul members
Node     Address             Status  Type    Build   Protocol  DC       Partition  Segment
node211  192.168.0.211:8301  alive   server  1.19.1  2         my-dc-1  default    <all>
node212  192.168.0.212:8301  alive   server  1.19.1  2         my-dc-1  default    <all>
node213  192.168.0.213:8301  alive   server  1.19.1  2         my-dc-1  default    <all>
node214  192.168.0.214:8301  alive   client  1.19.1  2         my-dc-1  default    <default>

Consul 웹 UI 접속

http://192.168.0.211:8500

Consul_Cluster
Consul_Cluster

dns 질의 테스트

도메인 : {Node}.node.consul

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

; <<>> DiG 9.18.18-0ubuntu0.22.04.2-Ubuntu <<>> @127.0.0.1 -p 8600 node214.node.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63301
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 3
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;node214.node.consul.           IN      A

;; ANSWER SECTION:
node214.node.consul.    0       IN      A       192.168.0.214

;; ADDITIONAL SECTION:
node214.node.consul.    0       IN      TXT     "consul-version=1.19.1"
node214.node.consul.    0       IN      TXT     "consul-network-segment="

;; Query time: 3 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1) (UDP)
;; WHEN: Thu Jul 25 13:18:26 KST 2024
;; MSG SIZE  rcvd: 134

 

참고URL

- Vault HA Cluster with Integrated Storage : https://developer.hashicorp.com/vault/tutorials/raft/raft-storage

 

728x90