MySQL Operator

snooby·2022년 8월 8일
1

🐳 Docker & K8S

목록 보기
26/51
post-thumbnail

쿠버네티스를 통한 애플리케이션 서비스 배포가 활성화 되면서 다양한 오픈소스와 tool도 쿠버네티스 위에서 설치되고 실행되며 편리해지고 있다.

DB 또한 쿠버네티스 내에서 설치하고 배포하려는 자동화 기미가 보인다.
쿠버네티스 위에 DB 설치는 아직 안정적이지 않다 등의 의견들이 많았지만 요즘은 DB를 올려서 운영 중인 곳들도 점점 보인다.

이를 가능하게 해주는 툴 중 하나를 공부해보면서 포스팅해보고자 한다.

Operator

오퍼레이터(Operator)는 사용자 정의 리소스를 사용하여 애플리케이션 및 해당 컴포넌트를 관리하는 쿠버네티스의 소프트웨어 익스텐션이다. 오퍼레이터는 쿠버네티스 원칙, 특히 컨트롤 루프를 따른다.

Kubernetes 공식문서에서는 Operator에 대해서 다음처럼 설명합니다.
즉, Operator는 쿠버네티스의 핵심인 "선언적 정의"를 진행해주는 요소입니다.
사용자가 원하는 상태를 선언해두면 그 상태로 요소들이 관리되는 것입니다.

실제 쿠버네티스는 이러한 오퍼레이터를 사용하여 다음의 장점을 사용할 수 있는 것입니다.

Kubernetes Operator

  • 배포 편리
  • 유지보수 자동화
  • 문제가 생길 시 자동으로 스스로 복구 (replica)
  • 백업과 복구가 가능
  • 관측하며 자원을 살필 수 있음
  • 자원을 선언적으로 구성할 수 있음

MySQL Operator

MySQL Operator for Kubernetes와 MySQL InnoDB Cluster도 쉬운 배포, 자동화, 서비스 관리라는 쿠버네티스 operator와 공통 목표를 지향하고 있다.

MySQL Operator는 MySQL 서버와 MySQL 라우터의 그룹으로 구성된 하나의 MySQL InnoDB 클러스터를 관리하는 데 초점을 맞춘 운영 시스템이다.
MySQL Operator 자체는 쿠버네티스 클러스터에서 실행되며 MySQL 오퍼레이터가 사용 가능하고 실행되도록 쿠버네티스 배포에 의해 제어된다.

MySQL Operator는 기본적으로 'mysql-operator' Kubernetes 네임스페이스에 배포되며, Kubernetes 클러스터의 모든 InnoDB 클러스터와 관련 리소스를 감시한다.
그래서 Operator는 Kubernetes API 서버에 가입하여 이벤트를 업데이트하고 필요에 따라 관리되는 MySQL Server 인스턴스에 연결합니다.

MySQL Operator for Kubernetes Architecture

MySQL Operator 구성요소

위의 아키텍처를 보면서 이해하시면 좋습니다.

1. MySQL InnoDB Cluster

InnoDB Cluster(InnoDB Cluster) 리소스가 Kubernetes API Server에 배포되면 MySQL Operator for Kubernetes는 필요한 리소스를 생성합니다.
이를 아래에서 설명하겠습니다.

2. StatefulSet

MySQL Server instances 를 위한 것이다.
StatefuleSet은 Pods를 관리하고 해당 스토리지 볼륨을 할당합니다.
각 pod는 이 StatefulSet에의해 관리되고 여러 컨테이너를 실행합니다.

3. MySQL Routers

Mysql 라우터는 Mysql 서버들 중 작업을 실행할 서버를 고르는상태비저장(Statless) 애플리케이션입니다. DB 인스턴스를 캐시하여 라우팅할 인스턴스를 관리합니다. Mysql 라우터는 클러스터의 스케일에 따라 Deployment의 레플리카 개수를 조절하는 것으로 수평적 확장(Horizontal scaling)할 수 있습니다.
Mysql 서버는 실제 DB역할을 하게 되는 서버 인스턴스의 그룹입니다.

4. Mysql Server instances

replicaset으로 관리되며, Mysql 서버는 실제 DB역할을 하게 되는 서버 인스턴스의 그룹입니다. 클러스터의 복제 방식은 Single-Primary mode와 Multi-Primary mode라는 2가지 Replication 모드 중 하나를 선택할 수 있습니다. Single-Primary mode는 전통적인 Master-Slave(이제 이런 표현은 사용하면 안되지만..) 구조의 복제 방식이며, Multi-Primary mode는 Mysql 8.0 버전에 등장한 Group Replication 복제 방식을 사용해 단방향 복제가 아닌 양방향 복제를 수행할 수 있습니다.

클러스터의 복제 방식

1.Single-Primary mode
전통적인 Master-Slave


2.Multi-Primary mode
Group Replication 복제 방식을 사용해 단방향 복제가 아닌 양방향 복제를 수행할 수 있습니다.

이러한 Mysql Operator는 Deployment로 관리됩니다.
Mysql Operator는 즉, Mysql 서버와 Mysql 라우터들을 관리하는 Operator입니다.
Deployment를 통해 InnoDBCluster, Mysqlbackup 등의 사용자 정의 리소스를 통해 각각 서버 클러스터와 서버 백업을 추상화해 관리해줍니다.

즉 Mysql operator는 InnoDB 클러스터라는 추상화된 사용자 정의 리소스로 Mysql 서버와 라우터들의 관리를 자동화하고 간편하게 만들어주는 역할을 합니다.

MySQL 기능

  1. mysql-operator를 사용하여 Mysql shell에 접속 가능
    sql shell을 통해 db 쿼리 실행이 가능하다.

  2. port-forward local 접속
    local 환경에서 db 인스턴스로 접속

  3. Mysql 라우터의 부하분산 규칙
    Mysql operator를 이용해서 설치한 InnoDBCluster는 여러 개의 DB 인스턴스로 이루어져 있기 때문에 하나의 인스턴스에 연결을 몰아주는 것이 아닌 연결의 부하 분산(Load Balancing)이 가능합니다.
    이 부하 분산의 역할을 하는 것이 Mysql 라우터인데요. Mysql 라우터의 부하 분산 규칙은 접속 포트 별로 다르며 configuration 파일에 자세히 명시되어 있습니다.
    configuration은 mysql 라우터 Pod에 접속 후 /tmp/mysqlrouter/mysqlrouter.conf 파일에서 확인 가능

  4. Single-Primary mode vs Multi-Primary mode

  5. Mysql Operator Failover

다음 포스팅에서 설치부터 확인까지 진행해봅시다.

MySQL Operator 리소스 관리

1) ConfigMap

mycluster-initconf를 사용하여 MySql server 구성정보를 커스텀할 수 있습니다.

2) MySQL 서버 개수 조정


Mysql 라우터는 클러스터의 스케일에 따라 Deployment의 레플리카 개수를 조절하는 것으로 수평적 확장(Horizontal scaling)할 수 있습니다.

mysql은 알아본 것과 같이 Operator를 공식으로 운영되는 DB를 지원하고 있습니다.
mysql-operator가 Cluster와 Backup의 관리에 Operator의 역할을 기대할 수 있습니다.

참조 : MySQL Operator 공식 깃헙
MySQL Operator 안내문서
MySQL 공식 안내영상

profile
데이터를 가치있게 다루고 싶은 개발자 🐥

0개의 댓글