-
[Etcd] --initial-cluster 설정 알아보기Etcd 2024. 6. 16. 08:12728x90반응형
- 목차
들어가며.
Etcd 는 데이터 저장소로써 동작합니다.
이는 Key-Value 타입의 데이터를 저장하며, 일반적으로 Client 의 상태값을 저장하는 용도로 사용됩니다.
그리고 Etcd 는 여러개의 Etcd 서버들이 모여서 하나의 클러스터를 형성합니다.
흔히 고가용성 ( High Availability ) 를 구현하기 위해서 최소한 3개의 Etcd 서버들이 하나의 클러스터를 구성하죠.
--initial-cluster 는 서로 떨어져 있는 Etcd 서버들끼리 서로의 위치를 공유하기 위해서 사용됩니다.
각 Etcd 서버의 Host 와 Port 를 작성해서 서로가 서로의 네트워크 위치 정보를 식별할 수 있습니다.
--initial-cluster 란 ?
Etcd 는 여타 프로그램과 같이 etcd 실행파일을 통해서 실행됩니다.
그리고 etcd 실행파일은 --initial-cluster 라는 Flag 를 가집니다.
아래의 etcd 명령어의 예시는 --initial-cluster Flag 의 사용법을 설명하는 간단한 예시입니다.
/usr/local/bin/etcd \ --initial-advertise-peer-urls=http://192.168.1.100:2380 \ --initial-cluster="node1=http://192.168.1.100:2380,node2=http://192.168.1.101:2380" \ --name=node1
먼저 --name Flag 를 통해서 자신의 식별값을 지정합니다.
저는 단순히 node1 이라는 식별값을 사용하였습니다.
그리고 --initial-advertise-peer-urls 설정을 통해서 node1 Etcd 서버가 네트워크 트래픽을 수용할 수 있는 Host 와 Port 를 지정합니다.
( --initial-advertise-peer-urls 설정은 아래의 링크를 통해 확인하실 수 있습니다. )
https://westlife0615.tistory.com/900
--initial-advertise-peer-urls 과 --name 설정은 통해서 개별 Etcd 서버의 이름과 Network 주소를 설정할 수 있습니다.
그리고 --initial-cluster 설정을 통해서 함께 클러스터를 구축할 다른 Etcd 서버의 이름과 Network 주소를 지정합니다.
이번 예시의 경우에는 node1 과 node2 를 하나의 클러스터로써 사용합니다.
node2 Etcd 서버는 Peer to Peer 통신을 위해 192.168.1.101:2380 주소를 사용합니다.
위의 설정이 적용된 node1, node2 Etcd 서버가 실행되면 하나의 클러스터를 구성할 수 있습니다.
한번 구체적인 예시를 작성해보도록 하겠습니다.
3개의 Node 로 구성된 Etcd Cluster 생성하기.
아래의 Docker 명령어는 3개의 Etcd Docker Container 를 실행하는 명령어입니다.
3개의 Etcd Container 는 서로 동일한 Network 상에 존재합니다.
따라서 Private IP 나 Domain 이름을 통해서 통신할 수 있습니다.
각 Node 들은 etcd1, etcd2, etcd3 이는 Hostname 을 가지며, 이를 통해서 통신할 수 있습니다.
그래서 모든 Etcd 서버는 --initial-cluster="node1=http://etcd1:2380,node2=http://etcd2:2380,node3=http://etcd3:2380" 설정을 가집니다.
docker network create etcd docker run --platform linux/amd64 -d --network etcd \ --name etcd1 --hostname etcd1 \ -p 12380:2380 \ -p 12379:2379 \ quay.io/coreos/etcd:v3.5.17 \ /usr/local/bin/etcd \ --data-dir=/var/etcd \ --listen-client-urls=http://0.0.0.0:2379 \ --advertise-client-urls="http://host.docker.internal:12379" \ --listen-peer-urls=http://0.0.0.0:2380 \ --initial-advertise-peer-urls=http://etcd1:2380 \ --initial-cluster="node1=http://etcd1:2380,node2=http://etcd2:2380,node3=http://etcd3:2380" \ --initial-cluster-state=new \ --initial-cluster-token=etcd \ --name=node1 docker run --platform linux/amd64 -d --network etcd \ --name etcd2 --hostname etcd2 \ -p 22380:2380 \ -p 22379:2379 \ quay.io/coreos/etcd:v3.5.17 \ /usr/local/bin/etcd \ --data-dir=/var/etcd \ --listen-client-urls=http://0.0.0.0:2379 \ --advertise-client-urls="http://host.docker.internal:22379" \ --listen-peer-urls=http://0.0.0.0:2380 \ --initial-advertise-peer-urls=http://etcd2:2380 \ --initial-cluster="node1=http://etcd1:2380,node2=http://etcd2:2380,node3=http://etcd3:2380" \ --initial-cluster-state=new \ --initial-cluster-token=etcd \ --name=node2 docker run --platform linux/amd64 -d --network etcd \ --name etcd3 --hostname etcd3 \ -p 32380:2380 \ -p 32379:2379 \ quay.io/coreos/etcd:v3.5.17 \ /usr/local/bin/etcd \ --data-dir=/var/etcd \ --listen-client-urls=http://0.0.0.0:2379 \ --advertise-client-urls="http://host.docker.internal:32379" \ --listen-peer-urls=http://0.0.0.0:2380 \ --initial-advertise-peer-urls=http://etcd3:2380 \ --initial-cluster="node1=http://etcd1:2380,node2=http://etcd2:2380,node3=http://etcd3:2380" \ --initial-cluster-state=new \ --initial-cluster-token=etcd \ --name=node3
아래의 etcdctl 명령어를 통해서 Etcd Cluster 의 member 들을 확인할 수 있습니다.
클러스터가 정상 실행된다면, 아래와 같이 3개의 members 를 가지게 될 것입니다.
docker run --platform linux/amd64 --rm quay.io/coreos/etcd:v3.5.17 etcdctl \ --endpoints=http://host.docker.internal:12379 member list -w json
{ "header": { "cluster_id": 13328660768658586000, "member_id": 7017707596910148000, "raft_term": 2 }, "members": [ { "ID": 5038481772072643000, "name": "node3", "peerURLs": [ "http://etcd3:2380" ], "clientURLs": [ "http://host.docker.internal:32379" ] }, { "ID": 7017707596910148000, "name": "node1", "peerURLs": [ "http://etcd1:2380" ], "clientURLs": [ "http://host.docker.internal:12379" ] }, { "ID": 13740487479065119000, "name": "node2", "peerURLs": [ "http://etcd2:2380" ], "clientURLs": [ "http://host.docker.internal:22379" ] } ] }
반응형'Etcd' 카테고리의 다른 글
[Etcd] Watch 기능 알아보기 ( HTTP2, WatchCreateRequest ) (0) 2024.06.17 [Etcd] WAL Log (Write Ahead Log) 알아보기 (0) 2024.06.17 [Etcd] --listen-peer-urls 설정 알아보기 (--initial-advertise-peer-urls) (0) 2024.06.17