-
[Vitess] vtctldclient AddCellInfo 명령어 알아보기Database/Vitess 2024. 2. 5. 07:39728x90반응형
- 목차
들어가며.
이번 글에서는 vtctldclient 의 AddCellInfo 명령어에 대해 알아보겠습니다.
AddCellInfo 는 Vitess 클러스터의 Topology Server에 새로운 셀(Cell) 정보를 추가하는 명령어입니다.
Cell 은 Vitess 클러스터에서 논리적인 그룹을 나타내며, tablet 들이 위치할 수 있는 영역입니다.
예를 들어, 총 8개의 vttablet 들이 존재할 때에 4개는 Cell1, 나머지 4개의 vttablet 은 Cell2 로 설정할 수 있습니다.
아래의 이미지와 같이 물리적인 vttablet 을 4개씩 그룹지어 논리적 단위로 나눌 수 있게 됩니다.
Topology Service ( Etcd ).
일반적으로 Vitess 의 Topology Service 는 Etcd 가 사용됩니다.
Etcd 는 클러스터 메타데이터와 상태 정보를 관리하는 분산 Key-Value 저장소입니다.
Topology Server 는 셀, 샤드, 태블릿 등 Vitess의 모든 구성 요소 간의 관계를 정의하고 저장합니다.
이를 통해 vtgate 나 vttablet 과 같은 구성 요소는 필요한 정보를 실시간으로 조회하고 클러스터 상태를 동기화할 수 있습니다.
AddCellInfo 명령어를 통해서 Vitess 내부에 Cell 을 생성할 수 있습니다.
이는 Vitess 전역에서 생성된 Cell 을 활용할 수 있음을 의미합니다.
예를 들어 vttablet, vtgate 등의 구성요소들이 특정 Cell 에 논리적으로 속하게 됩니다.
AddCellInfo 명령어는 보통 아래와 같은 형식으로 구성됩니다.
zone1 이라는 이름의 Cell 을 생성하는 명령이구요.
zone1 이라는 Cell 은 Etcd 내부에 저장 및 기록되게 됩니다.
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 클러스터 구성 요소 간의 조율을 담당합니다.
vtctldclient 와 vtctld 그리고 Etcd 의 요청의 흐름은 아래와 같습니다.
AddCellInfo 와 같은 명령어를 vtctldclient 를 통해서 실행하고, 이는 내부적으로 vtctld 를 통해서 Etcd 에 Cell 의 정보를 기록합니다.
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
- topo_implementation
- Etcd 를 Topology Service 로써 사용할 경우에 topo_implementation 을 etcd2 로 설정합니다.
- topo_global_server_address
- togo_global_server_address 는 Etcd 서버의 Host 와 Port 를 입력합니다.
- 반드시 grpc port 와 연결되어야 합니다.
- togo_global_root
- topo_global_root 는 Etcd 에서 사용할 상태 정보의 Root Directory 를 설정하는 옵션입니다.
- 일반적으로 /vitess/global 를 고정적으로 사용하는 것이 권장됩니다.
- service_map
- vtctld 는 Vitess Client 의 API Server 로써 동작합니다. service_map 은 어떤 기능들을 활성화할지 결정하는 옵션입니다.
- vtctldclient 를 통한 Topology Service 와의 정보 교환을 위해서 grpc-vtctld 를 활성화시킵니다.
이제 Etcd 와 vtctld 가 각각 실행 중입니다.
Docker Desktop 에서 아래와 같은 결과가 확인될 겁니다.
Etcd 는 Vitess 의 상태들을 저장하는 저장소이며, 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
반응형'Database > Vitess' 카테고리의 다른 글
[Vitess] PlannedReparentShard 알아보기 ( PRS , Planned Reparent Shard ) (0) 2024.01.02 [Vitess] Etcd 알아보기 (0) 2023.12.30 [Vitess] Topology Service 알아보기 (0) 2023.12.30 [Vitess & Kubernetes] Cell 알아보기 (0) 2023.12.30 [Vitess] VTGate 알아보기 (0) 2023.11.24 - topo_implementation