ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Etcd] --initial-cluster 설정 알아보기
    Etcd 2024. 6. 16. 08:12
    728x90
    반응형

    - 목차

     

    들어가며.

    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

     

    [Etcd] --listen-peer-urls 설정 알아보기 (--initial-advertise-peer-urls)

    - 목차 들어가며.Etcd 는 최소 3개의 Etcd Server 들로 하나의 클러스터를 구성합니다.일반적으로 Etcd 는 중앙 저장소로써 Distributed Application 들의 적절한 실행을 위해서 Key-Value 타입의 데이터들을 저

    westlife0615.tistory.com

     

    --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"
          ]
        }
      ]
    }
    반응형
Designed by Tistory.