본문 바로가기

DevOps/DOIK (Database Operator in Kubernetes)

MySQL Operator for Kubernetes

MySQL 데이터베이스를 Kubernetes 환경에서 Operator로 관리하는 방법은 크게 2가지 종류로 지원하고 있다.

  1. Oracle에서 지원하는 MySQL Operator
  2. Vitess 플랫폼을 통해 구현된 MySQL Operator

기본적으로 Oracle에서 지원하는 MySQL Operator는 앞선 포스팅에서 설명한 InnoDB Cluster를 기반으로 동작한다.
(MySQL Operator + MySQL InnoDB Cluster 배포 필요)

InnoDB Cluster에서 Group Replication을 지원함에 따라 HA 구성을 할 수 있지만, 단일 서버(Primary)에서 Write 요청을 받아 트래픽을 처리하는 한계가 있다. (Multi Primary Mode가 있지만, write 요청과 sync 처리를 고려하면 서버가 받는 부하는 크게 다르지 않다.)

그에 따라 해결 방법으로 나온 것이 Sharding 전략을 채택한 Vitess MySQL Operator이다.


Oracle MySQL Operator

Architecture

 

 

 

 

  • MySQL Operator: 1개 이상의 MySQL InnoDB Cluster 관리
  • MySQL InnoDB Cluster: 쿠버네티스 API 서버를 통해 관련 리소스 배포
  • MySQL Server Insatnce(StatefulSet)
  • MySQL Router(Deployment):
    proxy 역할로 애플리케이션의 쿼리를 서버에 전달 RW/RO
  • MySQL Shell: (Router & Server에 포함)
    MySQL Clinet 보다 확장 기능을 제공하며 클러스터 관리가 가능(AdminAPI)

 

 

 

Install MySQL Operator

MySQL Operator

# Helm Repo 추가
helm repo add mysql-operator https://mysql.github.io/mysql-operator/

# 설치
helm install mysql-operator mysql-operator/mysql-operator --namespace mysql-operator --create-namespace --version 2.1.0

MySQL InnoDB Cluster

# 사용자 설정 파라미터 파일 생성
cat <EOT> override-values.yaml
credentials:
  root:
    password: sakila
serverConfig:
  mycnf: |
    [mysqld]
     max_connections=300
     default_authentication_plugin=mysql_native_password
tls:
  useSelfSigned: true
EOT

# 설치
helm install mycluster mysql-operator/mysql-innodbcluster --namespace mysql-cluster --version 2.1.0 -f override-values.yaml --create-namespace

 

 


Vitess MySQL Operator

https://vitess.io/docs/17.0/

 

Vitess | v17.0 (Stable)

Latest stable release. Everything you need to know about scaling MySQL with Vitess.

vitess.io

Architecture

  • VTGate: VTTablet 서버로 라우팅하는 경량 proxy 서버이다. (MySQL Protocol & Vitess gRPC 지원)
    VTGate가 VTTablet으로 쿼리를 라우팅할 때, VTGate는 샤딩 방식, 지연시간, 테이블 및 인스턴스의 가용성을 고려한다.
  • Tablet: Tablet은 mysqld 프로세스와 vttablet 프로세스의 조합으로, 일반적으로 동일 머신에 실행된다. 각각의 Tablet은 tpye을 할당되며 그에 따른 역할을 수행한다.
    - primary(master) : 현재 샤드의 MySQL의 primary(master)가 되는 복제본 tablet
    - replica : master로 승격할 수 있는 MySQL 복제본. (일반적으로 웹사이트 프런트엔드와 같은 실시간 사용자 요청 처리 위해 사용)
    - rdonly : master로 승격할 수 없는 MySQL 복제본. (일반적으로 백업, 덤프, 쿼리 분석, MapReduce, Resharding 등의 백그라운드 프로세싱 작업에 사용)
    - backup : 스냅샷 생성을 위한 tablet. 스냅샷 생성을 위해 replication을 중지하고 완료 시 원래 타입으로 돌아간다.
    - restore : 아무런 데이터 없는 상태로 시작하여 최근 백업 데이터를 restore하는 tablet. 완료 시 GTID 시점에서 다시 replicate를 시작하고, type이 replica 또는 rdonly로 바뀐다.
    - drained : Vitess 백그라운드 프로세스를 위한 tablet.(rdonly tablet 리샤딩과 같은 작업)
  • Topology: 다른 서버에서 실행되는 백엔드 프로세스의 집합. 토폴리지 데이터를 저장하고 분산된 Locking 서비스를 제공한다.
    토폴로지 서비스는 다음과 같은 이유로 존재한다.
      1. Tablet이 클러스터에서 서로 조정할 수 있게 해준다.
      2. Vitess가 Tablet을 발견할 수 있도록 하여, 쿼리를 어디로 라우팅해야 할지 알 수 있게 해 준다.
      3. Vitess 구성을 저장하며, 서버 재시작 시에도 지속될 수 있도록 해준다.
    Vitess 클러스터에는 하나의 Global Topology 서비스와 각 Cell에 Local Topology 서비스가 있다.
    - Global Topology Serive : 글로벌 토폴로지 서비스에는 자주 변경되지 않는 전역 Vitess 데이터를 저장한다. 복원 및 리샤딩과 같은 작업을 수행할 때 사용된다.
    - Local Topology Service : 각 로컬 토폴로지는 해당되는 Cell과 관련된 정보를 저장한다.
  • vtctld: 토폴로지 서버에 저장된 정보를 검색할 수 있는 HTTP 서버
  • VStream: VTGate를 통해 변경 알림을 받을 수 있다. VStream을 통해 클러스터의 MySQL Shard들의 binlog 정보를 동등하게 제공할 수 있다. VStream은 하나 또는  그 이상의 VStreamer(VTTablet 인스턴스 안에 있는)로부터 이벤트를 pulling한다.

 

'DevOps > DOIK (Database Operator in Kubernetes)' 카테고리의 다른 글

MongoDB Architecture & Replication  (1) 2023.11.12
PostgreSQL Operator for Kubernetes  (0) 2023.10.31
MySQL Architecture & Replication  (0) 2023.10.24
Kubernetes Basic  (0) 2023.10.21