ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Vitess] VTGate 알아보기
    Database/Vitess 2023. 11. 24. 13:08
    728x90
    반응형

    - 목차

     

    들어가며.

    VTGate 는 Vitess 생태계에서 중요한 구성 요소로, 클라이언트 애플리케이션이 Vitess 클러스터와 상호 작용할 수 있도록 하는 게이트웨이 역할을 합니다.

    VTGate 의 역할은 다음과 같이 나열할 수 있습니다.

     

    1. 클라이언트의 요청 쿼리를 적절한 VTTablet 으로 라우팅합니다.
    2. 다중 VTGate 를 두어 로드 밸런서 & 리버스 프록시의 역할을 수행할 수 있습니다.
    3. Multi Shards 로부터 전달받은 데이터를 Join, Merge, Sorting 을 수행합니다.

     

    추가적으로, 사용자와 권한(예: User 및 Grant) 설정도 지원하여 데이터베이스의 보안을 효과적으로 관리할 수 있습니다.

    이 문서에서는 VTGate 의 주요 기능에 대한 설명과 실습을 진행하려고 합니다.

     

    VTGate 란 ?

    VTGateVitess 의 구성 요소 중에서 Client 와 가장 가까이에 위치한 구성 요소입니다.

    Client 의 요청 쿼리를 직접적으로 전달받으며, 이를 처리하기 위해서 적절한 VTTablet 에게 요청 쿼리를 라우팅합니다.

     

    VTGateVTTablet 의 구조 및 관계는 아래와 같습니다.

     

    출처 : https://planetscale.com/blog/faster-backups-with-sharding

     

     

    그리고 MySQL 에서 조회된 데이터 혹은 수정된 결과를 다시 VTTablet 을 거쳐서 VTGate 로 전달됩니다.

     

    VTGate 구현하기.

    우선 VTGate 를 구현하기 위해서 관련된 Vitess 구성 요소들이 필요한데요.

    아래의 링크의 내용을 통해서 VTTablet 의 생성이 필요합니다.

     

    https://westlife0615.tistory.com/274

     

    [Vitess] Docker 환경에서 vttablet 실행하기: 단계별 가이드

    - 목차 들어가며.이번 글에서는 1개의 vttablet 을 Docker 를 통해서 실행하는 방법에 대해서 알아보려고 합니다.vttablet 을 실행시키기 위해서 다양한 Vitess 구성 요소가 필요합니다.아래는 필수적으

    westlife0615.tistory.com

     

    위 링크의 내용을 모두 진행하고나면 아래의 Docker Desktop 결과처럼 3개의 Docker Container 들이 생성됩니다.

    Etcd, VTctld, VTTablet 이 각각 생성되며, VTTabletPlannedReparentShard 를 통해서 Primary Tablet 으로 승격되어야 합니다.

     

     

     

    이제 Vitess 구성 요소들이 준비되었기 때문에 VTGate 를 실행할 수 있게 됩니다.

    VTGate 를 실행하는 명령어는 아래와 같습니다.

     

    우선 VTGate 에서 사용한 User 데이터를 생성합니다.

    이는 MySQL 에서 mysql.usergrant 와 유사합니다.

    마치 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
      1. Etcd 에 저장할 Vitess 의 Root Path 입니다.
    • --topo_global_server_address=etcd:2379
      1. Etcd 서버의 Host 와 Port 입니다.
    • --tablet_types_to_wait=PRIMARY,REPLICA
      1. VTGate 와 연결할 VTTablet 의 타입이 Primary 또는 Replica 가 되도록 기다리는 설정입니다.
    • --mysql_auth_server_static_file
      1. --mysql_auth_server_static_file 설정은 VTGate 가 사용할 사용자 정보를 기록한 파일의 위치를 지정하는 설정입니다.
    • --cell=zone1
      1. --cell 은 VTGate 가 속하게된 Cell 의 정보입니다.
    • --cells_to_watch=zone1,zone2
      1. 모니터링해야할 Cell 의 목록을 지정합니다.

     

    VTGate15000 Port 를 통해서 Web UI 에 접속할 수 있습니다.

     

     

     

    그리고 VTGate 의 3306 Port 를 통해서 MySQL TCP 접속이 가능합니다.

    아래의 이미지와 같이 MySQL Client 를 통해서 vtgate:3306 주소로 접속이 가능합니다.

     

     

     

     

    반응형
Designed by Tistory.