Vitess

YYY·2025년 5월 11일

Vitess란? Kubernetes 기반 분산 MySQL 시스템 이해하기

✅ Vitess란?

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


💡 주요 특징

  • MySQL 호환성: 기존 MySQL 드라이버 그대로 사용 가능
  • 샤딩 지원: 데이터 자동 분할 및 라우팅
  • 고가용성: Primary/Replica 구성, 장애 감지 및 복구
  • SQL 프록시 제공: vtgate를 통해 샤딩을 감춘 단일 진입점 제공
  • Kubernetes 친화적: Helm 배포, StatefulSet 기반 shard 구성 가능

🧱 Kubernetes 구성 요소

구성 요소설명리소스 유형
vtgateSQL 요청을 받아 shard로 라우팅하는 프록시Deployment
vttabletMySQL 인스턴스를 감싸는 컨트롤러StatefulSet
mysql실제 데이터 저장소StatefulSet
vtctld클러스터 관리 UI/APIDeployment
etcd / consulTopology 저장소StatefulSet

🧠 StatefulSet은 Shard 및 복제 구성을 안정적으로 유지하기 위해 필수


⚙️ 샤딩과 StatefulSet

Vitess에서 샤딩을 구성하기 위해 vttabletmysql은 반드시 StatefulSet으로 배포된다.

✅ 이유

  • Pod 이름 고정 필요 (예: shard-0, shard-1)
  • PVC 연결 유지 필요 (데이터 보존)
  • Primary/Replica 역할 분리

반대로, vtgate는 Stateless하므로 Deployment로 충분하다.


📌 애플리케이션과의 연결

✔ 애플리케이션은 어떤 배포 방식이든 OK

애플리케이션 형태연결 가능 여부
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로 접근


📦 Helm Chart 구성 예시

values.yaml 설정 예시

keyspace:
  name: commerce

shards:
  - name: "-80"
    index: 0
  - name: "80-"
    index: 1

vttablet:
  image: vitess/vttablet:v17.0.0

🎯 요약

  • Vitess는 MySQL을 수평 확장 가능한 분산 DB로 변환해줌
  • 샤딩/복제를 위해 StatefulSet 기반 구조 필요
  • 애플리케이션은 어떤 형태든 vtgate로만 연결하면 됨
  • Kubernetes + Helm으로 쉽게 배포 가능

📚 참고: Vitess 공식 문서

profile
무지렁이 탈출기

0개의 댓글