Vitess는 MySQL을 기반으로 한 클라우드 네이티브 분산 데이터베이스 플랫폼이다.
YouTube에서 시작되어 CNCF에 소속되어 있으며, 수평 확장성, 고가용성, 운영 자동화를 지원한다.

vtgate를 통해 샤딩을 감춘 단일 진입점 제공 | 구성 요소 | 설명 | 리소스 유형 |
|---|---|---|
vtgate | SQL 요청을 받아 shard로 라우팅하는 프록시 | Deployment |
vttablet | MySQL 인스턴스를 감싸는 컨트롤러 | StatefulSet |
mysql | 실제 데이터 저장소 | StatefulSet |
vtctld | 클러스터 관리 UI/API | Deployment |
etcd / consul | Topology 저장소 | StatefulSet |
🧠
StatefulSet은 Shard 및 복제 구성을 안정적으로 유지하기 위해 필수
Vitess에서 샤딩을 구성하기 위해 vttablet과 mysql은 반드시 StatefulSet으로 배포된다.
반대로, vtgate는 Stateless하므로 Deployment로 충분하다.
| 애플리케이션 형태 | 연결 가능 여부 |
|---|---|
| Deployment | ✅ 가능 |
| StatefulSet | ✅ 가능 |
| Job/CronJob | ✅ 가능 |
애플리케이션은 MySQL 드라이버를 이용해 vtgate로만 접속하면 된다.
예: Node.js (mysql2 사용)
const mysql = require('mysql2');
const connection = mysql.createConnection({
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT),
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: 'your_keyspace',
});
환경 변수 주입 (Kubernetes Deployment 예시)
env:
- name: DB_HOST
value: "vtgate-svc.default.svc.cluster.local"
- name: DB_PORT
value: "15306"
- name: DB_USER
valueFrom:
secretKeyRef:
name: db-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password
✅ Node.js 등에서는
process.env로 접근
values.yaml 설정 예시
keyspace:
name: commerce
shards:
- name: "-80"
index: 0
- name: "80-"
index: 1
vttablet:
image: vitess/vttablet:v17.0.0
vtgate로만 연결하면 됨 📚 참고: Vitess 공식 문서