카테고리 없음

✅ MySQL MHA 구성 방법 완벽 정리 (마스터 자동 장애 조치 솔루션)

idea9329 2025. 4. 2. 09:37
반응형

 

MySQL은 기본적으로 마스터-슬레이브 복제를 통해 고가용성을 구성할 수 있지만, 마스터 장애 시 자동으로 복구해주는 기능은 기본 제공하지 않습니다.
이때 필요한 도구가 바로 MHA(MySQL Master High Availability Manager)입니다.

이 글에서는 MHA 구성 방법, 환경 구성도, 설정 파일, 그리고 운영 팁까지 빠짐없이 알려드립니다.


🔧 MHA란?

MHA (Master High Availability)
마스터 서버가 다운될 경우, 슬레이브 중 하나를 마스터로 자동 승격(promote)하고
다른 슬레이브를 새로운 마스터에 맞춰 자동 복제 재설정까지 해주는 오픈소스 도구입니다.

주요 기능:

  • 마스터 장애 시 자동 장애 조치(Failover)
  • 온라인 마스터 스위칭 (무중단 마스터 교체)
  • 바이너리 로그 위치 기반 복제 재설정
  • 자동 로그 수집 및 적용

🧱 MHA 구성도

  [Manager Node]
        |
  +-----+------+     
  |            |
[Master]   [Slave1]
                |
             [Slave2]
  • Manager Node: MHA를 실행하고 장애 감지, 조치를 하는 노드 (MySQL이 없어도 됨)
  • Master/Slave: 실제 MySQL 복제 서버

📋 사전 준비

✅ 환경 구성 예시

역할호스트명IP

Manager mha-manager 192.168.0.10
Master mysql-master 192.168.0.11
Slave1 mysql-slave1 192.168.0.12
Slave2 mysql-slave2 192.168.0.13

🔐 1. SSH 무비밀번호 접속 설정

Manager Node에서 모든 MySQL 노드로 비밀번호 없이 SSH 접속이 가능해야 합니다.

# Manager Node에서 실행
ssh-keygen -t rsa
ssh-copy-id root@mysql-master
ssh-copy-id root@mysql-slave1
ssh-copy-id root@mysql-slave2

🧩 2. MySQL 복제 설정

  • 마스터 서버에서 바이너리 로그 활성화
  • 슬레이브 서버에서 복제 설정 완료
  • server_id는 각 노드마다 고유하게 설정
# my.cnf 공통 설정 예시
server_id = 1          # 각각 다르게
log_bin = mysql-bin
relay_log = mysql-relay-bin
read_only = 1          # 슬레이브는 read_only

🧰 3. MHA 설치

CentOS/RHEL 기준

# 공통 패키지 설치
yum install -y perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager

# MHA 관련 패키지 설치
rpm -ivh mha4mysql-node-0.58-0.el7.noarch.rpm      # 모든 MySQL 서버에 설치
rpm -ivh mha4mysql-manager-0.58-0.el7.noarch.rpm   # Manager Node에만 설치

🛠️ 4. 설정 파일 구성

📁 디렉토리 생성

mkdir -p /etc/mha/app1
cd /etc/mha/app1

📄 app1.cnf

[server default]
user=mha
password=yourpassword
ssh_user=root
repl_user=repl
repl_password=replpassword
manager_log=/var/log/mha/manager.log
remote_workdir=/var/log/mha
master_binlog_dir=/var/lib/mysql
ping_interval=1
secondary_check_script=masterha_secondary_check -s 192.168.0.11 -s 192.168.0.12
master_ip_failover_script=/usr/local/bin/master_ip_failover
report_script=/usr/local/bin/send_report

[server1]
hostname=192.168.0.11
port=3306

[server2]
hostname=192.168.0.12
port=3306

[server3]
hostname=192.168.0.13
port=3306

필요 시, master_ip_failover 스크립트는 수동으로 작성해 줘야 합니다 (VIP 설정 포함 가능).


🚦 5. MHA 동작 확인

복제 상태 체크

masterha_check_repl --conf=/etc/mha/app1/app1.cnf

자동 장애 조치 확인 (테스트 시 마스터 강제 종료)

masterha_manager --conf=/etc/mha/app1/app1.cnf

현재 상태 확인

masterha_check_status --conf=/etc/mha/app1/app1.cnf

📬 MHA 운영 팁

  • send_report 스크립트를 통해 장애 발생 시 이메일로 알림 설정 가능
  • master_ip_failover에 가상 IP(VIP) 이동 스크립트를 추가하여 외부 서비스에 영향 최소화 가능
  • 시스템 모니터링 도구와 연계하면 SLA 수준 운영 가능

✅ 마무리 요약

MySQL MHA는 마스터 장애 시 자동으로 슬레이브를 마스터로 승격하고, 복제를 재구성해주는 고가용성 도구입니다.

  • SSH 무비밀번호 설정
  • MySQL 복제 설정 완료
  • MHA 매니저 설정 및 테스트
  • masterha_manager 실행으로 가동

🔗 같이 보면 좋은 글



반응형