TiDB 아키텍처 - 프로덕트 구성 이해

TiDB 아키텍처

기존의 독립형 데이터베이스와 비교하여 TiDB는 다음과 같은 이점을 제공한다.

  • 유연하고 탄력적인 확장성을 갖춘 분산 아키텍처를 갖추고 있다.
  • MySQL 5.7 프로토콜, MySQL의 일반적인 기능 및 구문과 완전히 호환된다.
    • 애플리케이션을 TiDB로 마이그레이션하기 위해 한 줄의 코드도 변경할 필요가 없다.
  • 적은 복제본에 장애가 발생한 경우에는 자동 장애 조치로 고가용성을 지원한다. 애플리케이션에 투명하다.
  • 은행 송금과 같은 강력한 일관성이 필요한 시나리오에 적합한 ACID 트랜잭션를 지원한다.
  • 데이터 마이그레이션, 복제 또는 백업을 위한 다양한 데이터 마이그레이션 도구들를 제공한다.

TiDB는 분산 데이터베이스로서 여러 구성 요소로 구성되도록 설계되었다. 이러한 컴포넌트는 서로 통신하여 완전한 TiDB 시스템을 형성한다. 아키텍처는 다음과 같다.

TiDB Architecture

TiDB 서버 - 외부 노출 서버

TiDB 서버는 MySQL 프로토콜의 연결 엔드포인트를 외부에 노출하는 상태 Stateless SQL 계층이다.

TiDB 서버는 SQL 요청을 받고 SQL 구문 분석최적화를 수행하며 궁극적으로 분산 실행 계획을 생성한다. 수평 확장이 가능하며 LVS(Linux Virtual Server), HAProxy, F5와 같은 로드 밸런싱 구성 요소를 통해 외부에 통합 인터페이스를 제공한다. 데이터를 저장하지 않고 컴퓨팅 및 SQL 분석만 수행하고 실제 데이터 읽기 요청을 TiKV 노드(또는 TiFlash 노드)로 전송한다.

PD(Placement Driver) 서버 - 클러스터 관리

PD(Placement Driver) 서버는 전체 클러스터의 메타데이터 관리 구성 요소이다.

모든 단일 TiKV 노드의 실시간 데이터 분포 메타데이터와 전체 TiDB 클러스터 토폴로지 구조를 저장하고, TiDB 대시보드 관리 UI를 제공하고, 트랜잭션 ID를 분산 트랜잭션에 할당한다. PD 서버는 클러스터 메타데이터를 저장할 뿐만 아니라, TiKV 노드에서 실시간으로 보고되는 데이터 전달 상태에 따라 특정 TiKV 노드로 데이터 스케줄링 명령을 보내기 때문에 전체 TiDB 클러스터의 “두뇌” 혹은 “사령탑” 같은 역할을 한다. 또한 PD 서버는 최소 3개의 노드로 구성되며 고가용성을 제공하여, 홀수 개의 PD 노드를 배포하는 것이 좋다.

스토리지 서버 - 저장 클러스터

저장은 두 종류의 클러스터 서버가 존재한다.

TiKV 서버

TiKV 서버는 데이터 저장을 담당한다. TiKV는 분산 트랜잭션 키-값 스토리지 엔진이다.

리전은 데이터를 저장하는 기본 단위이다. 각 리전에는 StartKey에서 EndKey 까지의 왼쪽이 닫힘 및 오른쪽이 열림 간격인 특정 키 범위에 대한 데이터를 저장한다.

각 TiKV 노드에는 여러 개의 리전이 있다. TiKV API는 키-값 쌍으로 분산 트랜잭션을 기본적으로 지원하며 기본적으로 스냅샷 격리 수준 분리를 지원한다. 이것이 TiDB가 SQL 수준에서 분산 트랜잭션을 지원하는 방법의 핵심이다. SQL문을 처리한 후 TiDB 서버는 SQL 실행 계획을 TiKV API에 대한 실제 호출로 변환한다. 따라서 데이터는 TiKV에 저장된다. TiKV의 모든 데이터는 여러 복제본(기본적으로 3개의 복제본)에서 자동으로 유지되므로 TiKV는 기본 고가용성과 자동 장애 조치를 지원한다.

TiFlash 서버

TiFlash 서버는 특수한 유형의 스토리지 서버이다. 일반적인 TiKV 노드와 달리 TiFlash는 주로 분석 프로세스를 가속화하도록 설계된 각 열에 대해 데이터를 저장한다.

참고




최종 수정 : 2022-09-04