Orchestrator, MySQL High availability 구축하기

hansung.dev·2021년 3월 5일
1

MySQL 구축 및 운영

목록 보기
2/8
post-thumbnail

Orchestrator는 오픈소스 MySQL 복제 토폴로지 관리 및 장애 조치 솔루션입니다. 복잡한 복제 토폴로지를 감지, 쿼리, 리팩터링할 수 있으며 안정적인 장애 감지, 지능형 복구, 승격 기능을 제공합니다.

Orchestrator는 MySQL High Availability 및 복제 관리 도구이며, 서비스로 실행되며 명령 라인 액세스, HTTP API 및 웹 인터페이스를 제공합니다. - GitHub

목표

MySQL의 High Availability를 Orchestrator로 구축합니다.

TL;DR

  1. Docke-composer를 실행합니다. (MySQL, Orchestrator)
  2. MySQL Replication 구성을 합니다.
  3. Orchestrator 운영에 필요한 DB계정 및 권한을 부여 합니다.
  4. Orchestrator 웹에 접속 topology 구성을 합니다.

Getting Started

실습 환경은 아래와 같습니다.

Docker : 20.10.2
Docker Compose : 1.27.4, build 40524192
Orchestrator : 3.2.4
MySQL : 8.0.23

File Directory with Docker-Compose

Docker-Compose로 MySQL와 Orchestrator를 아래와 같이 구성 합니다.

mysql-orchestrator
├── docker-compose.yml
├── mysql-01
│   ├── conf
│   │   └── my.cnf
│   ├── data
│   └── log
├── mysql-02
│   ├── conf
│   │   └── my.cnf
│   ├── data
│   └── log
├── mysql-03
│   ├── conf
│   │   └── my.cnf
│   ├── data
│   └── log
├── orchestrator
│   ├── conf
│   │   └── orchestrator.conf.json
├── post_sql.sh

Docker 기반의 MySQL 구성은 이전 글을 참고합니다.

docker-compose.yml

version: "3.7"

services:
  mysql-01:
    image:  mysql:8.0.23
    container_name: mysql-01
    hostname: mysql-01
    ports:
      - "3306:3306"
    command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
    volumes:
      - "${PWD}/mysql-01/data:/var/lib/mysql"
      - "${PWD}/mysql-01/log:/var/log/mysql"
      - "${PWD}/mysql-01/conf/my.cnf:/etc/mysql/conf.d/my.cnf"
    networks:
      - mybridge

  mysql-02:
    image: mysql:8.0.23
    container_name: mysql-02
    hostname: mysql-02
    ports:
      - "13306:3306"
    command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
    volumes:
      - "${PWD}/mysql-02/data:/var/lib/mysql"
      - "${PWD}/mysql-02/log:/var/log/mysql"
      - "${PWD}/mysql-02/conf/my.cnf:/etc/mysql/conf.d/my.cnf"
    networks:
      - mybridge

  mysql-03:
    image: mysql:8.0.23
    container_name: mysql-03
    hostname: mysql-03
    ports:
      - "23306:3306"
    command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
    volumes:
      - "${PWD}/mysql-03/data:/var/lib/mysql"
      - "${PWD}/mysql-03/log:/var/log/mysql"
      - "${PWD}/mysql-03/conf/my.cnf:/etc/mysql/conf.d/my.cnf"
    networks:
      - mybridge

  orchestrator:
    image: openarkcode/orchestrator:3.2.4
    container_name: orchestrator
    hostname: orchestrator
    ports:
      - "3000:3000"
    networks:
      - mybridge

networks:
  mybridge:
    external: true

Setting up and running

Docker-Compos Run, Stop

docker-compose를 실행하여 MySQL 및 Orchestrator 서비스를 시작합니다.

#run
docker-compose up -d

#stop
docker-compose stop

MySQL Replication 구성 및 Orchestrator 설정을 위한 아래 스크립트를 실행합니다.

sh post_sql.sh

Using the Web interface

http://localhost:3000 접속합니다.

최초 접속시 클러스터가 구성되어있지 않습니다.
"Clusters > Discover"를 선택 후 클러스터를 등록합니다.

MySQL Master서버 "mysql-01"를 입력 후 "Submit"을 누룹니다.

"Clusters > Dashboard"를 선택하면 MySQL High Availability가 구성된 부분을 확인할수 있습니다. 사전에 MySQL Replication 구성안으로 토폴리지가 시각화 됩니다.

다음 글에서는 Orchestrator를 이용한 Failure detection & recovery를 살펴보도록 하겠습니다.

코드는 Github에서 확인 가능 합니다.

profile
Data Engineer

0개의 댓글