-
[Vitess] VTGate 알아보기Database/Vitess 2023. 11. 24. 13:08728x90반응형
- 목차
들어가며.
VTGate 는 Vitess 생태계에서 중요한 구성 요소로, 클라이언트 애플리케이션이 Vitess 클러스터와 상호 작용할 수 있도록 하는 게이트웨이 역할을 합니다.
VTGate 의 역할은 다음과 같이 나열할 수 있습니다.
- 클라이언트의 요청 쿼리를 적절한 VTTablet 으로 라우팅합니다.
- 다중 VTGate 를 두어 로드 밸런서 & 리버스 프록시의 역할을 수행할 수 있습니다.
- Multi Shards 로부터 전달받은 데이터를 Join, Merge, Sorting 을 수행합니다.
추가적으로, 사용자와 권한(예: User 및 Grant) 설정도 지원하여 데이터베이스의 보안을 효과적으로 관리할 수 있습니다.
이 문서에서는 VTGate 의 주요 기능에 대한 설명과 실습을 진행하려고 합니다.
VTGate 란 ?
VTGate 는 Vitess 의 구성 요소 중에서 Client 와 가장 가까이에 위치한 구성 요소입니다.
Client 의 요청 쿼리를 직접적으로 전달받으며, 이를 처리하기 위해서 적절한 VTTablet 에게 요청 쿼리를 라우팅합니다.
VTGate 와 VTTablet 의 구조 및 관계는 아래와 같습니다.
그리고 MySQL 에서 조회된 데이터 혹은 수정된 결과를 다시 VTTablet 을 거쳐서 VTGate 로 전달됩니다.
VTGate 구현하기.
우선 VTGate 를 구현하기 위해서 관련된 Vitess 구성 요소들이 필요한데요.
아래의 링크의 내용을 통해서 VTTablet 의 생성이 필요합니다.
https://westlife0615.tistory.com/274
위 링크의 내용을 모두 진행하고나면 아래의 Docker Desktop 결과처럼 3개의 Docker Container 들이 생성됩니다.
Etcd, VTctld, VTTablet 이 각각 생성되며, VTTablet 은 PlannedReparentShard 를 통해서 Primary Tablet 으로 승격되어야 합니다.
이제 Vitess 구성 요소들이 준비되었기 때문에 VTGate 를 실행할 수 있게 됩니다.
VTGate 를 실행하는 명령어는 아래와 같습니다.
우선 VTGate 에서 사용한 User 데이터를 생성합니다.
이는 MySQL 에서 mysql.user 와 grant 와 유사합니다.
마치 MySQL 에서 user: default, password: 1234, plugin: mysql_native_password 등을 VTGate 에 적용하는 방식입니다.
VTGate 는 별도의 User 데이터를 가지며, 이는 Vitess 의 Client 가 사용하는 User Authentication 정보입니다.
cat <<'EOF'> /tmp/users.json { "default": [{ "UserData": "default", "MysqlNativePassword": "A4B6157319038724E3560894F7F932C8886EBFCF" }] } EOF
아래의 명령어는 VTGate 를 실행하는 도커 명령어입니다.
docker run --network vitess --platform linux/amd64 -d \ --name vtgate --hostname vtgate \ --mount type=bind,source=/tmp/users.json,target=/vt/users.json \ -p 3307:3306 \ -p 15990:15999 \ -p 15010:15000 \ vitess/lite:v17.0.7-mysql80 \ /vt/bin/vtgate \ --logtostderr=true \ --topo_global_root=/vitess/global \ --topo_global_server_address=etcd:2379 \ --topo_implementation=etcd2 \ --tablet_types_to_wait=PRIMARY,REPLICA \ --cell=zone1 \ --cells_to_watch=zone1 \ --grpc_port=15999 \ --port=15000 \ --mysql_server_port=3306 \ --mysql_server_version=8.0.23 \ --mysql_auth_server_impl=static \ --mysql_auth_server_static_file=/vt/users.json
- --topo_global_root=/vitess/global
- Etcd 에 저장할 Vitess 의 Root Path 입니다.
- --topo_global_server_address=etcd:2379
- Etcd 서버의 Host 와 Port 입니다.
- --tablet_types_to_wait=PRIMARY,REPLICA
- VTGate 와 연결할 VTTablet 의 타입이 Primary 또는 Replica 가 되도록 기다리는 설정입니다.
- --mysql_auth_server_static_file
- --mysql_auth_server_static_file 설정은 VTGate 가 사용할 사용자 정보를 기록한 파일의 위치를 지정하는 설정입니다.
- --cell=zone1
- --cell 은 VTGate 가 속하게된 Cell 의 정보입니다.
- --cells_to_watch=zone1,zone2
- 모니터링해야할 Cell 의 목록을 지정합니다.
VTGate 는 15000 Port 를 통해서 Web UI 에 접속할 수 있습니다.
그리고 VTGate 의 3306 Port 를 통해서 MySQL TCP 접속이 가능합니다.
아래의 이미지와 같이 MySQL Client 를 통해서 vtgate:3306 주소로 접속이 가능합니다.
반응형'Database > Vitess' 카테고리의 다른 글
[Vitess] Topology Service 알아보기 (0) 2023.12.30 [Vitess & Kubernetes] Cell 알아보기 (0) 2023.12.30 [Vitess] VTOrc Orchestration 알아보기 ( EmergencyReparentShard ) (0) 2023.10.30 [Vitess] Docker 환경에서 vttablet 실행하기: 단계별 가이드 (0) 2023.09.19 Vitess Multi Shards 구현하기 ( Sharded Keyspace ) (0) 2023.09.06