MySQL HA(High Availability) Orchestrator

Mugeon Kim·3일 전
0
post-thumbnail

서론


  • 이전 글에서는 Replication에 대해서 작성했습니다. 이번에는 orchestrator를 이용한 HA 구성에 대해서 작성을 하려고 합니다.

  • 이전에 작성된 글을 보면 단순히 Master-Slave 구조로만 이루어져 있습니다. 하지만 서비스를 운영을 하다보면 트래픽으로 DB부화, 다운등 다양한 이슈를 처리하게 됩니다. 마스터 DB가 죽으면 어떻게 해야될까요?

  • 바로 Slave를 Master로 승격하여 바로 대체하는 작업을 통해서 Fail Over를 최소화를 하는 것이 적절하다고 생각합니다.

  • 이때 Orchestrator를 주로 사용합니다. Orchestrator란 MySQL용 복제 토폴로지 관리자로서 고가용성 및 복제 관리 툴이라고 Google에 나와있지만 간단하게 이야기하면 GUI환경에서 드래그 앱 드롭, Dashboard를 통해 Replication구조를 빠르게 확인할 수 있고 사용자의 설정에 따른 마스터 승격 프로세스에 따라 장애 복구를 하는 관리 툴 입니다.

본론


Orchestrator 설치하기

  • Orchestrator도 docker를 이용해서 설치를 하겠습니다.
docker run -i -t --name orchestrator -h orchestrator \
--net mybridge --net-alias=orchestrator \
-p 3000:3000 \
--platform linux/amd64 \
openarkcode/orchestrator:latest
  • 이전에 작성했던 network인 mybridge를 사용합니다. 그래야지 bridge에 있는 모든 db를 탐색하여 처리할 수 있기 때문입니다. 이후에는 mybridge에 총 4개의 node가 있는지 확인합니다. (db -3개 / Orchestrator 1개 )
➜  ~ docker network inspect mybridge 

  .... 생략
  
  "Containers": {
            "028f3d2bc77893e242250cf5663385049896ebec22de6d1a5320cc43a42becd3": {
                "Name": "orchestrator",
                "EndpointID": "6504b4e8b7d03514835465b579a89b0f30f626c06695767be582486e86ad63a7",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            },
            "4a4aa3717f8390d60e424f192c5c98a3bc4c153719c10e3a839706f5f828b2ce": {
                "Name": "db002",
                "EndpointID": "e1a35d925d417b5d581a961a5ae73fbf56ed49d87fcb0384d4ed7b2ce6e22793",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            },
            "64b1d6e1bfe58378d048b3cee5b8b36a681c0e78b06d4d8de38c01dd0b808b19": {
                "Name": "db003",
                "EndpointID": "d30589c82f613938907c749b89650c87eee777a2b4ede7f662c4a960dd09f1d4",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            },
            {
                "Name": "db001",
                "EndpointID": "d30589c82f613938907c749b89650c87eee777a2b4ede7f662c4a960dd09f1d4",
                "MacAddress": "",
                "IPv4Address": "",
                "IPv6Address": ""
            }
  • 정상적으로 4개의 node가 있다면 http://localhost:3000/web/clusters를 통하여 Orchestrator에 접근합니다.

  • 이후 Discovoer에 Master Node인 db001:3306을 입력하고 Cluster > Dashboard를 들어가면 다음과 같이 GUI 환경에서 Replication 구조를 한눈에 확인할 수 있습니다.

Orchestrator Master 위임 설정


docker exec -it orchestrator /bin/bash

cd etc/

vi orchestrator.conf.json

  "RecoverMasterClusterFilters": [
    "*"
  ],
  "PromotionIgnoreHostnameFilters": ["db003"],

RecoverMasterClusterFilters

목적: 마스터 복구 시 적용되는 클러스터 필터링 설정
"*" 사용 시: 모든 클러스터에 복구 작업 적용
특정 패턴 지정 가능

jsonCopy"RecoverMasterClusterFilters": [
  "db00*", 
  "db001*"
]

PromotionIgnoreHostnameFilters

목적: 특정 호스트 제외하여 마스터 승격 방지
예시 설정: ["db003"]
복수 호스트 제외 가능

jsonCopy"PromotionIgnoreHostnameFilters": [
  "db003", 
  "backup_node", 
  "dr_replica"
]

추가적으로 장애 복구 설정이나, 보안 접근제어에 대한 부분은 AutoPseudoGTID, DetectClusterAliasQuery, ApplyConfig, PreventCrossDataCenterReplication, HTTPAuthUser, AuthenticationMethod등 다양한 메서드를 제공하기 때문에 관련 자료를 살펴보면 도움이 될 것이다.

  • 해당 설정이 끝나면 재시작이 필요하기 때문에 docker restart를 하고 Dashboard를 살펴보면 다음과 같은 하트가 생성된 것을 확인할 수 있다.

  • 해당 하트는 Auto Recover가 설정이 되었음을 확인할 수 있다. 이제 db001를 docker stop을 통해서 처리하게 되면 db002가 자동으로 승격되고 db001은 별도 node로 분리되는 것을 확인할 수 있다.

결론


참고


https://www.inflearn.com/course/mysql-docker/dashboard

profile
빠르게 실패하고 자세하게 학습하기

0개의 댓글