본문 바로가기
기술, 개발/Vitess

Vitess 기본 개념

by Jaejin Sim 2025. 8. 28.
반응형

Vitess ?

Vitess는 MySQL을 기반으로 한 분산 데이터베이스 관리 시스템으로, 대규모 데이터베이스 확장 및 관리를 지원합니다. Vitess는 기존 MySQL과 동일한 방식으로 연동하여 사용할 수 있습니다.

Vitess 아키텍처 흐름

  1. 앱에서 DB 요청: 앱에서 데이터베이스를 요청하면, 요청은 vtgate로 전송됩니다.
  2. vtgate: vtgate는 받은 요청을 적절한 vttablet로 전달하여 MySQL 인스턴스를 사용합니다.

초기 클러스터 설정 (101_initial_cluster.sh)

101_initial_cluster.sh 스크립트는 Vitess 클러스터를 설정하는 데 필요한 초기 작업을 자동화합니다. 이 스크립트는 다음과 같은 작업을 수행합니다:

  • etcd 실행
    • Vitess 클러스터의 분산 상태를 관리하는 etcd를 실행합니다.
    • etcd는 Vitess 클러스터의 메타데이터 및 상태를 관리하며, 모든 vttablet 및 vtgate가 이를 참조합니다.
  • Cell 생성
    • Vitess 클러스터 내의 "cell"을 생성하여 클러스터를 구성합니다.
  • vtctld 실행
    • vtctld 는 관리자가 vtctldclient 명령어를 사용 할 수 있게 합니다.
  • 키스페이스 생성
    • vtctldclient 명령어를 사용하여 키스페이스를 생성 합니다.
    • Vitess에서 키스페이스는 MySQL의 데이터베이스(Database와 유사한 개념입니다.
    • 다만, Vitess에서는 샤딩과 분산 처리와 관련된 논리적 구조로 키스페이스를 사용합니다.
  • MySQL 인스턴스 실행
    • MySQL 인스턴스를 실행합니다
  • vttablet 실행
    • MySQL 인스턴스에 연결될 vttablet를 실행합니다.
    • vttablet는 MySQL 서버 인스턴스의 관리자 입니다.
    • vttablet --init_keyspace 옵션을 통해 키스페이스가 없으면 자동으로 생성해줍니다.
  • vtotc 실행: 장애 복구 시 사용하는 vtotc를 실행합니다.
  • vtgate 실행: 각 샤드에 연결을 수행하는 vtgate를 실행합니다.
  • MySQL 스키마 등록
    • MySQL 스키마를 등록합니다.
    • 스키마 적용할때 mysql에 접속해서 create table 하면 안됩니다
    • 스키마가 단일 mysql 인스턴스가 아니라 여러 인스턴스에 걸쳐 적용되어야 하기 때문입니다.
  • Vitess 스키마 등록
    • Vitess 스키마를 등록합니다.
    • vitess 에서 사용하는 논리 스키마 입니다.
    • 샤딩에 대한 설정을 여기서 합니다
  • vtadmin 실행: Vitess 관리 도구인 vtadmin을 실행합니다.

참고 각 서버에서 mysqlctl 명령어를 사용하여 MySQL 인스턴스를 실행합니다. vttablet 명령어는 MySQL 인스턴스를 관리하는 데 사용되며, vttablet 명령어는 MySQL 인스턴스가 실행된 서버에서 실행해야 합니다.

vttablet의 역할

Vitess에서 vttablet는 MySQL 인스턴스를 관리하는 컴포넌트로, 각 인스턴스는 vttablet로 관리됩니다. vttablet는 MySQL 인스턴스와 1:1 관계를 유지합니다.

vttablet 종류

  • PRIMARY: 데이터베이스의 쓰기 작업을 처리하는 주 서버입니다.
  • RDONLY: 읽기 전용 서버로, 쓰기는 할 수 없고, 복제된 데이터를 읽기만 할 수 있습니다.
  • REPLICA: 주 서버에서 복제된 데이터를 갖고 있는 서버로, 보통 읽기 전용 작업을 처리합니다.

primary 설정

primary 설정은 vttablet 인스턴스 중 첫 번째 인스턴스(일반적으로 TABLET_UID=100)가 자동으로 primary로 설정됩니다. 나머지 인스턴스는 replicardonly로 설정됩니다.

참고: Vitess에서는 primary 설정을 자동으로 처리합니다. 스크립트에 명시적으로 설정할 필요는 없습니다.

vtgate 이해

  • vtgate는 애플리케이션에서 첫 번째로 접근하는 컴포넌트입니다. PHP 애플리케이션에서 직접 vtgate 정보를 사용하여 Vitess를 연동할 수 있습니다.
  • 운영 환경에서는 vtgate 인스턴스가 여러 대 실행되며, 각기 다른 서버에 위치할 수 있습니다. 이런 경우, 로드 밸런서를 사용하여 vtgate 연결을 분배합니다.
    • 로드 밸런서는 클라이언트의 요청을 여러 vtgate 인스턴스에 고르게 분배합니다.
    • Kubernetes 환경에서는 기본적으로 로드 밸런서를 지원하여, vtgate 인스턴스를 쉽게 확장하고 관리할 수 있습니다.

테스트된 내용 보기

mysql 접속 하기

mysql -h 127.0.0.1 -P 15306

 

키스페이스 정보 보기

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| commerce           |
| information_schema |
| mysql              |
| sys                |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)

 

테이블 보기

mysql> show tables;
+--------------------+
| Tables_in_commerce |
+--------------------+
| corder             |
| customer           |
| product            |
+--------------------+
3 rows in set (0.00 sec)

 

vitess_tablets 보기

mysql> show vitess_tablets;
+-------+----------+-------+------------+---------+------------------+---------------+----------------------+
| Cell  | Keyspace | Shard | TabletType | State   | Alias            | Hostname      | PrimaryTermStartTime |
+-------+----------+-------+------------+---------+------------------+---------------+----------------------+
| zone1 | commerce | 0     | PRIMARY    | SERVING | zone1-0000000100 | rocky-linux-8 | 2025-03-07T06:14:45Z |
| zone1 | commerce | 0     | REPLICA    | SERVING | zone1-0000000101 | rocky-linux-8 |                      |
| zone1 | commerce | 0     | RDONLY     | SERVING | zone1-0000000102 | rocky-linux-8 |                      |
+-------+----------+-------+------------+---------+------------------+---------------+----------------------+
3 rows in set (0.00 sec)
반응형

'기술, 개발 > Vitess' 카테고리의 다른 글

Vitess 수평샤딩 2 (리샤딩)  (2) 2025.08.28
Vitess 수평 샤딩 1 (시퀀스)  (0) 2025.08.28
Vitess MoveTables (수직샤딩)  (1) 2025.08.28
vtctld, vtgate, vttablet, vtorc  (0) 2025.08.28
로키리눅스 vitess 설치  (0) 2025.08.28