반응형
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 실행으로 가동
🔗 같이 보면 좋은 글
- MySQL 고가용성 비교: MHA vs Orchestrator vs Group Replication
- MHA 마스터 자동 장애조치 테스트 시나리오
- MySQL 복제 GTID 설정 완전 정복
반응형