한 줄 요약: Vitess는 MySQL/Percona Server 인스턴스 여러 대 앞에 VTGate(프록시)VTTablet(에이전트) 을 끼워, 애플리케이션이 단일 MySQL 처럼 보는 사이 클러스터가 샤딩·재샤딩·failover·온라인 스키마 변경·CDC 스트리밍 을 알아서 처리하도록 만든 오픈소스 시스템임. YouTube에서 출발해 2019-11 CNCF Graduated 프로젝트가 됐고, PlanetScale 등 상용 서비스의 백엔드로 쓰임.

개요

MySQL 단일 인스턴스의 한계가 보일 때 흔히 부딪히는 두 갈래는 (a) 샤딩 로직을 애플리케이션에 박는다, (b) NoSQL 로 옮긴다 임. Vitess 는 그 사이를 메우는 세 번째 길로 설계됨 — MySQL 그대로 두고 앞단에 게이트웨이·토폴로지 계층 을 얹어서 애플리케이션은 단일 DB 처럼 보면서도 뒤에서는 수십~수백 샤드가 돌아가게 함.

항목내용
라이선스Apache 2.0
출처YouTube 에서 2010년부터 사용, 2018-02 CNCF 인큐베이션, 2019-11 Graduated
지원 백엔드MySQL 8.0/8.4, Percona Server for MySQL 8.0/8.4 (이전 버전은 import 만)
프로토콜 호환MySQL wire protocol — 클라이언트는 일반 MySQL 드라이버로 VTGate 에 붙음
토폴로지 저장소etcd (기본) 또는 ZooKeeper
VTGate 가 광고하는 버전기본 8.4.<patch>-Vitess (@@version), --mysql-server-version 으로 변경 가능

결론

어떤 문제를 해결하나

문제Vitess 의 답
단일 MySQL 용량/IOPS 한계수평 샤딩 — 키스페이스를 N개 샤드로 쪼개고, 샤드 추가·삭제는 라이브 클러스터에서 진행 가능
애플리케이션 코드에 박힌 샤딩 라우팅VTGate 프록시 가 SQL 파싱 후 키 컬럼(vindex) 으로 대상 샤드 결정 — 앱은 단일 DB 처럼 질의
수천 커넥션이 만드는 MySQL 메모리·CPU 비용커넥션 풀링 — VTTablet 이 사용자 세션을 mysqld 커넥션 풀에 멀티플렉싱
primary 장애 → 수동 failover 절차토폴로지 + 리플리케이션 그래프 로 장애 감지·승격을 자동화
무중단 스키마 변경 (ALTER) 운영 부담Online DDLddl_strategy=vitess 등 빌트인 전략으로 백그라운드 마이그레이션
MySQL → MySQL 또는 외부 시스템으로의 데이터 이동VReplication / MoveTables / Reshard — binlog 구독 기반 실시간 복사 + Switch

운영자 관점에서 기억할 함정

  • 샤딩 키 결정이 가장 비쌈. Vindex 와 VSchema 가 잘못 설계되면 cross-shard 쿼리가 폭증해 VTGate 가 N개 샤드 fan-out 결과를 머지하는 비용이 모든 쿼리에 깔림. 도입 검토는 데이터 모델·접근 패턴 분석부터 들어감.
  • Vitess 는 active-active(다중 라이터) 를 지원하지 않음. 같은 샤드의 primary 는 한 대. 지리적 분산은 “샤드별로 primary 셀을 다르게 두는” 모델로 풂.
  • 샤드 간 트랜잭션은 기본 best-effort. 분산 ACID 가 필요하면 transaction_mode=TWOPC 로 올려야 하고, 이때 쓰기 비용이 약 50% 증가함. “한 트랜잭션 = 한 샤드” 가 되게 모델링하는 것이 원칙.
  • MySQL 변수 일부는 VTGate 가 가로챔. binlog_row_image, binlog_format, auto_increment_increment 등은 거절·무시됨. CDC 도구는 VTGate 가 아니라 mysqld 또는 VStream API 를 직접 구독해야 함.
  • 단일 노드를 작게 운영함. 공식 권장값은 mysqld 인스턴스당 약 250GB. 한 호스트에 여러 mysqld 를 띄우는 패턴이 일반적이며, 이 전제가 백업·복구·장애 격리 시간을 짧게 만드는 핵심임.

컴포넌트 한 페이지 그림

Vitess 컴포넌트 구성 — Vitess Runtime(Application·VTGate·Shard) 과 Control Plane(VTAdmin·vtctld·vtorc), 외부 Topology server

공식 다이어그램은 Architecture — Vitess docs 참조. 실서비스에서는 Application·VTGate·Shard 가 모두 N 인스턴스로 스택됨.

  • VTGate — MySQL 호환 무상태 프록시. SQL 을 파싱·계획해 적절한 샤드의 tablet 으로 라우팅함.
  • VTTablet — 각 mysqld 옆에 1:1 로 붙는 사이드카. 커넥션 풀링·쿼리 보호·백업/복구·VReplication 의 source/target 역할을 맡음.
  • vtctld — 키스페이스 생성·리샤딩·Online DDL 등 모든 관리 작업이 통과하는 평면. CLI 진입점은 vtctldclient.
  • VTAdmin — vtctld 위에 얹히는 웹 GUI. 키스페이스·샤드·tablet 상태 조회와 일부 관리 작업을 브라우저에서 처리.
  • vtorc — Vitess 전용 orchestrator. tablet 헬스체크·primary 장애 감지 후 자동 failover 를 수행. Topology server 의 상태와 실제 mysqld 토폴로지를 비교해 정정함.
  • Topology server — etcd/ZooKeeper 위에 “어느 샤드에 누가 살아 있고 누가 primary 인가” 를 보관. failover 는 이 포인터 한 번 바꾸는 것으로 끝남.
  • Cell — 같은 가용 영역 단위 묶음. 셀 단위로 장애 격리됨. 다이어그램에는 생략됨.

참고