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

Vitess 아키텍처 흐름
- 앱에서 DB 요청: 앱에서 데이터베이스를 요청하면, 요청은 vtgate로 전송됩니다.
- 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로 설정됩니다. 나머지 인스턴스는 replica나 rdonly로 설정됩니다.
참고: 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 |