본문 바로가기

리눅스

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

반응형

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

etcd 클러스터를 구성하는 것은 여러 대의 etcd 인스턴스를 설정하여 고가용성 및 데이터 일관성을 확보하는 중요한 작업입니다. 이 과정에서는 각 etcd 노드가 서로 통신할 수 있도록 설정하고 클러스터를 구성하는 모든 노드가 올바르게 상호작용하도록 해야 합니다.

전제 조건

  • 3개 이상의 서버 준비 : etcd 클러스터는 홀수 개의 노드로 구성하는 것이 좋습니다. 일반적으로 3개 이상의 서버에서 etcd 인스턴스를 실행합니다.
  • 서버 간 네트워크 통신 : 모든 etcd 노드가 서로 통신할 수 있어야 합니다.
  • 서버에 etcd 설치 : 각 노드에 etcd가 설치되어 있어야 합니다.

기본 설정

각 etcd 노드는 설정 파일 또는 명령줄 인자를 통해 클러스터 구성을 지정합니다. 설정 파일을 사용하거나 명령줄에서 직접 인자를 제공할 수 있습니다.

 

설정 파일 예제

vim /etc/etcd/etcd.conf
ETCD_NAME=<NODE_NAME>
ETCD_DATA_DIR=/var/lib/etcd
ETCD_LISTEN_PEER_URLS=https://<NODE_IP>:2380
ETCD_LISTEN_CLIENT_URLS=https://<NODE_IP>:2379
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://<NODE_IP>:2380
ETCD_ADVERTISE_CLIENT_URLS=https://<NODE_IP>:2379
ETCD_INITIAL_CLUSTER=<NODE_NAME>=https://<NODE_IP>:2380,<ANOTHER_NODE_NAME>=https://<ANOTHER_NODE_IP>:2380,<ETC>
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
ETCD_CORS=""
ETCD_CERT_FILE=/path/to/etcd-server.crt
ETCD_KEY_FILE=/path/to/etcd-server.key
ETCD_TRUSTED_CA_FILE=/path/to/ca.crt

변수 역할

  • ETCD_NAME : 노드의 이름 (고유하게 설정)
  • ETCD_LISTEN_PEER_URLS : 다른 etcd 노드와 통신할 URL
  • ETCD_LISTEN_CLIENT_URLS : 클라이언트가 접속할 URL
  • ETCD_INITIAL_ADVERTISE_PEER_URLS : 이 노드의 광고 URL
  • ETCD_ADVERTISE_CLIENT_URLS : 클라이언트에게 광고할 URL
  • ETCD_INITIAL_CLUSTER : 클러스터의 모든 노드 정보 (각 노드의 이름과 URL)
  • ETCD_INITIAL_CLUSTER_STATE : 클러스터의 초기 상태 (새 클러스터의 경우 new)
  • ETCD_INITIAL_CLUSTER_TOKEN : 클러스터의 고유 토큰 (모든 노드에서 동일해야 함)
  • ETCD_CERT_FILE, ETCD_KEY_FILE, ETCD_TRUSTED_CA_FILE : TLS/SSL 인증서 및 키 파일

etcd 클러스터 구성

3개의 노드로 구성된 etcd 클러스터의 예제

Hostname IP Address 비고
node1 10.0.0.1  
node2 10.0.0.2  
node3 10.0.0.3  
더보기

---

etcd 사용자 및 그룹 생성

sudo useradd -r etcd

etcd 설정 디렉토리 및 데이터 디렉토리 생성

sudo mkdir -p /etc/etcd
sudo mkdir -p /var/lib/etcd

데이터 디렉토리 권한 설정

sudo chown -R etcd:etcd /var/lib/etcd

etcd 서비스 설정

vim /etc/systemd/system/etcd.service
[Unit]
Description=etcd
Documentation=https://etcd.io
After=network.target

[Service]
User=etcd
ExecStart=/usr/local/bin/etcd --config-file=/etc/etcd/etcd.conf
Restart=always
RestartSec=5
LimitNOFILE=65536
LimitNPROC=4096
LimitCORE=infinity

[Install]
WantedBy=multi-user.target

etcd 시작 및 활성화

sudo systemctl daemon-reload
sudo systemctl start etcd
sudo systemctl enable etcd

---

728x90

etcd 설정 파일 생성

node1

cat <<EOF | sudo tee /etc/etcd/etcd.conf
ETCD_NAME=node1
ETCD_DATA_DIR=/var/lib/etcd
ETCD_LISTEN_PEER_URLS=https://192.168.10.111:2380
ETCD_LISTEN_CLIENT_URLS=https://192.168.10.111:2379
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.10.111:2380
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.10.111:2379
ETCD_INITIAL_CLUSTER=node1=https://192.168.10.111:2380,node2=https://192.168.10.112:2380,node3=https://192.168.10.1113:2380
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
ETCD_CERT_FILE=/path/to/etcd-server.crt
ETCD_KEY_FILE=/path/to/etcd-server.key
ETCD_TRUSTED_CA_FILE=/path/to/ca.crt
EOF

node2

cat <<EOF | sudo tee /etc/etcd/etcd.conf
ETCD_NAME=node2
ETCD_DATA_DIR=/var/lib/etcd
ETCD_LISTEN_PEER_URLS=https://192.168.10.112:2380
ETCD_LISTEN_CLIENT_URLS=https://192.168.10.112:2379
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.10.112:2380
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.10.112:2379
ETCD_INITIAL_CLUSTER=node1=https://192.168.10.111:2380,node2=https://192.168.10.112:2380,node3=https://192.168.10.1113:2380
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
ETCD_CERT_FILE=/path/to/etcd-server.crt
ETCD_KEY_FILE=/path/to/etcd-server.key
ETCD_TRUSTED_CA_FILE=/path/to/ca.crt
EOF

node3

cat <<EOF | sudo tee /etc/etcd/etcd.conf
ETCD_NAME=node3
ETCD_DATA_DIR=/var/lib/etcd
ETCD_LISTEN_PEER_URLS=https://192.168.10.113:2380
ETCD_LISTEN_CLIENT_URLS=https://192.168.10.113:2379
ETCD_INITIAL_ADVERTISE_PEER_URLS=https://192.168.10.113:2380
ETCD_ADVERTISE_CLIENT_URLS=https://192.168.10.113:2379
ETCD_INITIAL_CLUSTER=node1=https://192.168.10.111:2380,node2=https://192.168.10.112:2380,node3=https://192.168.10.1113:2380
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_INITIAL_CLUSTER_TOKEN=etcd-cluster
ETCD_CERT_FILE=/path/to/etcd-server.crt
ETCD_KEY_FILE=/path/to/etcd-server.key
ETCD_TRUSTED_CA_FILE=/path/to/ca.crt
EOF

각 노드에서 etcd를 재시작

서비스 재시작

sudo systemctl restart etcd

서비스 상태 확인

sudo systemctl status etcd

클러스터가 정상적으로 작동하는지 확인

etcdctl member list

이 명령어는 클러스터의 모든 멤버를 나열하고 상태를 확인할 수 있습니다.

TLS/SSL 설정

보안을 강화하기 위해 TLS/SSL 인증서를 설정하는 것이 좋습니다. 설정 파일에서 ETCD_CERT_FILE, ETCD_KEY_FILE, ETCD_TRUSTED_CA_FILE을 지정하여 인증서와 키를 설정합니다. 인증서와 키 파일을 생성하려면 cfssl 또는 OpenSSL을 사용할 수 있습니다.

클러스터의 헬스 체크 및 관리

클러스터 상태를 확인하려면 다음 명령어를 사용할 수 있습니다.

etcdctl endpoint health --cluster

이 명령어는 클러스터의 각 노드 상태를 점검합니다.

 

etcd 클러스터를 성공적으로 구성할 수 있습니다. 클러스터가 정상적으로 작동하고 데이터를 일관되게 유지하는지 정기적으로 확인하는 것도 중요합니다.

 

728x90
반응형