본문 바로가기

리눅스

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

반응형

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

테스트 환경

호스트 이름 서버 아이피 Type 비고
node111 192.168.10.111 server  
node112 192.168.10.112 server  
node113 192.168.10.113 server  
haproxy100 192.168.10.110 client  

1. 각 서버 노드에 Consul 설치

2. Consul 클러스터를 구성

호스트 파일 설정

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

# Consul Cluster
192.168.10.111 node111
192.168.10.112 node112
192.168.10.113 node113
EOF

Consul 설정 파일 작성

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

  • 각 서버 노드에 대해 설정 파일을 작성합니다.
vim /etc/consul.d/consul.hcl
  • node111
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.10.111"
bootstrap_expect=3
retry_join = ["node111", "node112", "node113"]
EOF
  • node112
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.10.112"
bootstrap_expect=3
retry_join = ["node111", "node112", "node113"]
EOF
  • node113
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.10.113"
bootstrap_expect=3
retry_join = ["node111", "node112", "node113"]
EOF

시스템 데몬 리로드

sudo systemctl daemon-reload

Consul 서비스 재시작

sudo systemctl restart consul

Consul 서비스 상태 확인

sudo systemctl status consul --no-pager -l

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

consul members
$ consul members
Node     Address              Status  Type    Build   Protocol  DC       Partition  Segment
node111  192.168.10.111:8301  alive   server  1.19.1  2         my-dc-1  default    <all>
node112  192.168.10.112:8301  alive   server  1.19.1  2         my-dc-1  default    <all>
node113  192.168.10.113: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
node111  ac6915fb-fa1c-3dc9-961f-286d234bd49e  192.168.10.111:8300  leader    true   3             30            -
node112  f994b473-29a1-5458-386b-2b1aa932717e  192.168.10.112:8300  follower  true   3             30            0 commits
node113  91cce854-64eb-3540-3774-bf3ffebe003e  192.168.10.113:8300  follower  true   3             30            0 commits

Consul 웹 UI 접속

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

http://192.168.10.111: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
$ consul -v
Consul v1.19.1
Revision 9f62fb41
Build Date 2024-07-11T14:47:27Z
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

시스템 서비스 파일 작성

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 = "192.168.10.110"
retry_join = ["node111", "node112", "node113"]
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
node111     192.168.10.111:8301  alive   server  1.19.1  2         my-dc-1  default    <all>
node112     192.168.10.112:8301  alive   server  1.19.1  2         my-dc-1  default    <all>
node113     192.168.10.113:8301  alive   server  1.19.1  2         my-dc-1  default    <all>
haproxy100  192.168.10.110:8301  alive   client  1.19.1  2         my-dc-1  default    <default>

Consul 웹 UI 접속

http://192.168.10.111:8500

Consul_Cluster
Consul_Cluster

dns 질의 테스트

도메인 : {Node}.node.consul

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

; <<>> DiG 9.18.18-0ubuntu0.22.04.2-Ubuntu <<>> @127.0.0.1 -p 8600 haproxy100.node.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47732
;; 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:
;haproxy100.node.consul.		IN	A

;; ANSWER SECTION:
haproxy100.node.consul.	0	IN	A	192.168.10.110

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

;; Query time: 4 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1) (UDP)
;; WHEN: Thu Jul 25 20:07:33 KST 2024
;; MSG SIZE  rcvd: 137

 

참고URL

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

 

728x90
반응형