[MySQL] MMM, MHA
DB

[MySQL] MMM, MHA

728x90

MMM (Multi-Master Replication Manager)

MMM은 DB에 장애가 발생했을때 자동으로 Failover 프로세스를 실행해주는 Perl 스크립트 기반의 Auto Failover 오픈소스 입니다. DB서버를 모니터링하는 MMM 모니터가 존재하고, DB서버는 Agent실행 후 MMM모니터와 통신합니다. 따라서 모니터 <-> Agent 통신 방식입니다.

 

MMM 구조

Multi-Master 라는 이름에 맞게 MMM은 Master DB를 두 개를 두고 양방향 복제를 합니다.

Master(Active)는 읽기/쓰기가 가능하고, Master(Standby)는 읽기전용 모드 (readonly)로 모니터에서 제어됩니다.

 

만약 Slave가 추가된다면 Master(Active)로 부터 단방향 복제 Slave가 하나씩 추가되는 구조입니다.


MMM Failover 과정

 

만약 Master(Active)에 장애가 발생해서 DB 접근이 불가능할 경우 MMM 모니터는 Master(Active)에게서 다음과 같이 Master의 역할을 뺏습니다.

1. 읽기모드로 변경

2. 세션 킬

3. VIP 회수

Master 역할 박탈

 

그리고 Master(Standby) 기준으로 복제를 재구성합니다 (이때 복제를 재구성하기 전에 복제지연이 있는지 확인합니다)

이 후 Master(Standby)에 대한 읽기 모드를 해제하고 회수한 VIP를 할당합니다. 나중에 장애가 났던 Master(Active)가 복구된다면, Master(Standby)로 변경하여 역할만 변경됩니다.


MMM Failover 과정에서 복제가 깨지는 경우*

 

예를 들어 INSERT INTO TABLE VALUES(101, 'B') 라는 쿼리를 실행한 경우,

Master(Active)에 먼저 저장이되고, Slave가 101에 대한 복제를 진행완료 후 Master(Active)에게 ACK를 보냅니다. (이때 아직 Master(Standby)는 복제를 못한 상태입니다)

이때, Master(Active)에서 문제가 발생했다면, 101을 가지지 못한 Master(Standby)가 Active로 승격이 되고, 자신에게 101을 insert후 이미 101을 가진 Slave에게 복제를 시키려는 시도를 해서 PK duplication 오류가 발생할 수 있습니다.


MHA (Master High Availability)

이번엔 다른방식의 Auto Failover 오픈소스인 MHA 에 대해서 알아보겠습니다. MMM과 제일 크게 다른점은 MHA 는 Agentless 방식이라는 것입니다.

 

MHA 구조

MHA 는 하나의 마스터와 여러 Slave의 구조로 이루어져있습니다. 그리고 모두 단방향 복제입니다.

 

MHA Failover 처리

Master DB에 장애가 발생한 경우 더이상 정상적인 데이터를 갖을 수 없다고 판단하여 마스터와 기존 Slave 와의 복제를 끊습니다. 이후 하나의 Slave (가장 최신의 데이터를 가지고있는 Slave)가 MasterDB로 승격됩니다.

 

MMM과 다르게 복제 crush 현상을 방지하기 위해서 바이너리 로그, 릴레이 로그 파일을 비교하여 차이나는 데이터를 추출합니다. 따라서 가장 최신의 데이터로 최신 데이터로 업데이트가 안된 DB를 업데이트 합니다.

 

 

출처:
- [2018] MySQL 이중화 진화기 (NHN Cloud)
- (MySQL) MMM, MHA
728x90

'DB' 카테고리의 다른 글

[Elastic Stack] Elasticsearch 란?  (0) 2022.10.31
[Redis] Redis Serializer 종류 (대표 3가지)  (0) 2022.10.27
[Redis] Redis란?  (0) 2022.10.12