ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Vitess] vtctldclient AddCellInfo 명령어 알아보기
    Database/Vitess 2024. 2. 5. 07:39
    728x90
    반응형

    - 목차

     

    들어가며.

    이번 글에서는 vtctldclientAddCellInfo 명령어에 대해 알아보겠습니다.

    AddCellInfoVitess 클러스터Topology Server에 새로운 셀(Cell) 정보를 추가하는 명령어입니다.

    CellVitess 클러스터에서 논리적인 그룹을 나타내며, tablet 들이 위치할 수 있는 영역입니다.

    예를 들어, 총 8개의 vttablet 들이 존재할 때에 4개는 Cell1, 나머지 4개의 vttablet 은 Cell2 로 설정할 수 있습니다.

    아래의 이미지와 같이 물리적인 vttablet 을 4개씩 그룹지어 논리적 단위로 나눌 수 있게 됩니다.

     

     

    Topology Service ( Etcd ).

    일반적으로 Vitess 의 Topology ServiceEtcd 가 사용됩니다.

    Etcd 는 클러스터 메타데이터와 상태 정보를 관리하는 분산 Key-Value 저장소입니다.

    Topology Server셀, 샤드, 태블릿 등 Vitess의 모든 구성 요소 간의 관계를 정의하고 저장합니다.

    이를 통해 vtgate vttablet 과 같은 구성 요소는 필요한 정보를 실시간으로 조회하고 클러스터 상태를 동기화할 수 있습니다.

     

    AddCellInfo 명령어를 통해서 Vitess 내부에 Cell 을 생성할 수 있습니다.

    이는 Vitess 전역에서 생성된 Cell 을 활용할 수 있음을 의미합니다.

    예를 들어 vttablet, vtgate 등의 구성요소들이 특정 Cell 에 논리적으로 속하게 됩니다.

     

    AddCellInfo 명령어는 보통 아래와 같은 형식으로 구성됩니다.

    zone1 이라는 이름의 Cell 을 생성하는 명령이구요.

    zone1 이라는 CellEtcd 내부에 저장 및 기록되게 됩니다.

    vtctldclient AddCellInfo --cell=zone1 --server-address=etcd:2379

     

    그리고 Vitess 의 모든 구성요소들은 Topology Service 에 저장된 zone1 이라는 Cell 를 사용할 수 있게 됩니다.

    아래의 이미지처럼 vtctld 를 통해서 AddCellInfo 명령어를 수행하게 되면 특정 Cell 이 Etcd 에 생성되게 됩니다.

     

    vtctld.

    vtctld Vitess 클러스터를 관리하는 API 서버로, vtctldclient 명령어를 처리하는 역할을 합니다.

    사용자가 CLI에서 입력한 명령은 vtctldclient 를 통해 vtctld API 서버로 전달되며, vtctld 는 이를 실행하여 클러스터 상태를 업데이트하거나 필요한 작업을 수행합니다.

    vtctld Topology Server 와 통신하여 클러스터의 메타데이터를 관리하고, Vitess 클러스터 구성 요소 간의 조율을 담당합니다.

     

    vtctldclientvtctld 그리고 Etcd 의 요청의 흐름은 아래와 같습니다.

    AddCellInfo 와 같은 명령어를 vtctldclient 를 통해서 실행하고, 이는 내부적으로 vtctld 를 통해서 EtcdCell 의 정보를 기록합니다.

     

     

    AddInfoCell 명령어 알아보기.

    AddInfoCell 명령어를 통해서 Vitess Cluster 내부에 Cell 을 생성하는 방법에 대해서 알아보겠습니다.

     

    먼저 Etcd Topology Service 를 생성합니다.

    아래의 Docker 명령어를 통해서 Etcd Docker Container 를 실행할 수 있습니다.

    Vitess Component 들과의 통신을 위해서 "vitess" 라는 이름의 Docker Network 를 함께 생성합니다.

    docker network create vitess
    
    docker run --platform linux/amd64 -d --network vitess --name etcd \
    --hostname etcd quay.io/coreos/etcd:v3.5.17 \
    /usr/local/bin/etcd \
    --listen-client-urls=http://0.0.0.0:2379 \
    --advertise-client-urls=http://0.0.0.0:2379

     

    그리고 vtctld 를 실행합니다.

    vtctld 는 Vitess Client 들의 요청을 처리하는 Vitess 의 API 서버의 역할을 수행합니다.

    docker run --platform linux/amd64 -d --network vitess --name vtctld --hostname vtctld vitess/lite:v17.0.7-mysql80 \
    /vt/bin/vtctld \
      --topo_implementation=etcd2 \
      --topo_global_server_address=etcd:2379 \
      --topo_global_root=/vitess/global \
      --logtostderr=true \
      --service_map="grpc-vtctld" \
      --port=15000 \
      --grpc_port=15999

     

    1. topo_implementation
      1. EtcdTopology Service 로써 사용할 경우에 topo_implementation 을 etcd2 로 설정합니다.
    2. topo_global_server_address
      1. togo_global_server_address 는 Etcd 서버의 Host 와 Port 를 입력합니다.
      2. 반드시 grpc port 와 연결되어야 합니다.
    3. togo_global_root
      1. topo_global_root 는 Etcd 에서 사용할 상태 정보의 Root Directory 를 설정하는 옵션입니다.
      2. 일반적으로 /vitess/global 를 고정적으로 사용하는 것이 권장됩니다.
    4. service_map
      1. vtctld 는 Vitess Client 의 API Server 로써 동작합니다. service_map 은 어떤 기능들을 활성화할지 결정하는 옵션입니다.
      2. vtctldclient 를 통한 Topology Service 와의 정보 교환을 위해서 grpc-vtctld 를 활성화시킵니다.

     

     

     

    이제 Etcd 와 vtctld 가 각각 실행 중입니다.

    Docker Desktop 에서 아래와 같은 결과가 확인될 겁니다.

    EtcdVitess 의 상태들을 저장하는 저장소이며, vtctld 는 Vitess 의 구성을 위한 API Server 로써 동작합니다.

    이제 본격적으로 Vitess 의 구성요소들을 생성할 수 있게 됩니다.

     

     

    Cell 추가하기.

    먼저 아래의 명령어를 통해서 현재 Vitess Cell 의 목록을 조회할 수 있습니다. ( GetCellInfoNames )

    아래의 결과는 생성된 Cell 이 없기 때문에 빈 결과를 출력한 이미지입니다.

    docker run --platform linux/amd64 --rm --network vitess vitess/lite:v17.0.7-mysql80 \
    /vt/bin/vtctldclient GetCellInfoNames --server=vtctld:15999

     

    zone1 이라는 이름의 Cell 을 생성해보도록 하겠습니다.

    아래의 AddCellInfo 명령어를 통해서 zone1 이라는 Cell 을 생성합니다.

    docker run --platform linux/amd64 --rm --network vitess vitess/lite:v17.0.7-mysql80 \
    /vt/bin/vtctldclient AddCellInfo --root=/vitess/global --server=vtctld:15999 zone1

     

     

    • --root
      • --root 옵션은 Etcd 내부에서 사용할 zone1 Cell 의 위치정보를 설정합니다.
      • /vitess/global/cells/zone1 내부에 zone1 과 관련된 정보들이 저장됩니다.

     

     

    Etcd 에서 생성된 Cell 확인하기.

    etcdctl 명령어를 통해서 생성된 Cell 을 Etcd 내부에서 확인할 수 있습니다.

    아래의 Docker 명령어를 통해서 /vitess/global 로 시작하는 모든 Key - Value 데이터를 확인할 수 있습니다.

    docker exec etcd etcdctl --endpoints=http://localhost:2379 get /vitess/global --prefix

     

     

    아래의 명령어를 통해서 zone2 라는 새로운 Cell 을 추가하게 된다면, Etcd 내부에서 zone2 를 위한 데이터들이 추가됩니다.

    docker run --platform linux/amd64 --rm --network vitess vitess/lite:v17.0.7-mysql80 \
    /vt/bin/vtctldclient AddCellInfo --root=/vitess/global --server=vtctld:15999 zone2

     

     

     

     

    반응형
Designed by Tistory.