MHA(Master High Availability)는 MySQL Replication 환경에서 Master 서버 장애 발생 시 자동으로 Failover(장애 조치)를 수행하는 고가용성(HA) 관리 도구입니다.
MySQL Replication을 사용하는 환경에서는 Master 서버가 장애 발생 시 Slave 서버로 전환하는 과정이 필요한데, MHA는 이 작업을 자동으로 수행하여 다운타임을 최소화하고 데이터 손실을 방지할 수 있도록 합니다.
✅ MHA의 주요 기능
1️⃣ 자동 Failover (Master 장애 감지 및 복구)
- Master 서버가 장애 발생 시, 가장 적절한 Slave 서버를 새로운 Master로 승격(Promotion)함.
- Slave 서버 중 최신 데이터가 반영된 서버를 자동으로 선택하여 새로운 Master로 설정.
- 기존의 Slave 서버들은 새로운 Master에 자동으로 연결되도록 조정.
2️⃣ 최소한의 데이터 손실 (Zero-Loss 또는 최소 데이터 손실)
- MySQL Replication 로그를 분석하여 데이터 손실을 방지.
- 장애 발생 직전까지 Master의 Relay Log를 복구하여 최대한 데이터를 보호.
3️⃣ 읽기 전용(READ-ONLY) 모드 설정
- Master 장애 시, 일시적으로 모든 Slave를 READ-ONLY 모드로 설정하여 데이터 정합성을 유지.
- 새로운 Master가 설정된 후, 슬레이브들을 새로운 Master에 자동으로 연결.
4️⃣ 자동 복구 및 클러스터 재구성
- 장애 복구 후 새로운 Master로 클러스터를 다시 정리하고, 기존 Master를 Slave로 설정하는 기능 제공.
🔹 MHA 아키텍처
MHA는 Manager Node와 Data(Node) Server로 구성됩니다.
📌 1. MHA Manager
- MHA를 관리하는 서버로, Master 장애 감지 및 자동 Failover 수행.
- Master 장애 발생 시 가장 최신 데이터를 가진 Slave를 새로운 Master로 승격.
- 기존 Master 복구 시 이를 Slave로 전환하여 클러스터를 재구성.
📌 2. MHA Node (MySQL 서버)
- MySQL Replication을 구성하는 Master 및 Slave 서버.
- 각 노드는 MySQL Replication을 실행하며 MHA Manager의 명령을 받아 장애 조치.
📌 구성 예시:
+---------------------+
| MHA Manager |
+---------------------+
|
----------------------------
| | | |
Master Slave1 Slave2 Slave3
(장애 발생 시) (새 Master) (Slave 유지) (Slave 유지)
🚀 MHA vs 다른 MySQL HA 솔루션 비교
기능MHAMySQL Group ReplicationMySQL InnoDB ClusterMySQL NDB Cluster
Failover 자동화 | ✅ 지원 | ✅ 지원 | ✅ 지원 | ✅ 지원 |
데이터 손실 최소화 | ✅ 가능 (Relay Log 복구) | ✅ 가능 | ✅ 가능 | ✅ 가능 |
읽기 성능 확장성 | ✅ Slave 활용 | ✅ Multi-Primary 가능 | ✅ Multi-Primary 가능 | ✅ 가능 |
쓰기 성능 확장성 | ❌ 제한적 | ✅ Multi-Primary 가능 | ✅ Multi-Primary 가능 | ✅ 가능 |
설치 및 운영 난이도 | 중간 | 어려움 | 어려움 | 매우 어려움 |
💡 MHA는 기존 MySQL Replication 환경을 그대로 사용하면서 Failover를 자동화하는 데 최적화된 솔루션입니다.
✅ MHA의 장점
✔ 기존 MySQL Replication 환경을 유지하면서 자동 Failover 적용 가능
✔ Zero-Loss(최소 데이터 손실) Failover 가능
✔ 읽기 전용 모드 설정을 통해 데이터 정합성 유지
✔ 구성이 비교적 간단하고 운영이 용이함
✔ MySQL과 완벽 호환 (추가적인 MySQL 설정 변경 불필요)
🚨 MHA의 단점
❌ Multi-Primary(다중 Master) 구조 미지원 → 오직 1개의 Master만 가능
❌ Master 장애 시 Failover 과정에서 짧은 다운타임이 발생할 수 있음 (약 10~30초 내외)
❌ Slave 서버의 Binlog 차이에 따라 데이터 손실 가능성이 존재 (하지만 Relay Log를 복구하여 최소화 가능)
❌ 쓰기 작업은 반드시 Master에서만 가능
🔹 MHA 설치 및 구성 방법
📌 1. 사전 준비
- MySQL Replication이 이미 구성되어 있어야 함.
- SSH를 통해 각 MySQL 노드 간 비밀번호 없는 접속이 가능해야 함.
- Perl 모듈 및 MHA 관련 패키지 설치 필요.
📌 2. MHA 패키지 설치
# MHA Manager 설치 (관리 서버)
yum install mha4mysql-manager
# MHA Node 설치 (MySQL 서버)
yum install mha4mysql-node
📌 3. MHA 설정 파일 작성
MHA Manager의 app1.cnf 파일을 작성하여 Replication 구성 정보 설정:
[server default]
user=root
password=your_password
ssh_user=root
repl_user=repl
repl_password=repl_password
[server1]
hostname=master_db
candidate_master=1
[server2]
hostname=slave_db1
candidate_master=1
[server3]
hostname=slave_db2
📌 4. MHA Failover 테스트
# MHA 자동 장애 조치 실행
masterha_manager --conf=/etc/mha/app1.cnf
📌 장애 발생 시 자동으로 새로운 Master로 Failover 진행!
🚀 결론
MHA는 MySQL Replication을 활용하는 환경에서 Master 장애 발생 시 자동으로 Failover를 수행하는 고가용성 솔루션입니다.
✅ 자동 Failover 지원
✅ 기존 MySQL Replication과 완벽 호환
✅ 최소한의 데이터 손실 (Relay Log 복구 기능 지원)
✅ 비교적 간단한 설정과 운영 가능
💡 고가용성이 중요한 MySQL 운영 환경에서는 MHA를 활용하면 안정적인 서비스 운영이 가능합니다! 🚀