목표

  • MMM이 무엇인지 이해한다.
  • MMM의 동작 과정을 이해한다.

MMM

  • MMM은 MySQL에서 failover 및 모니터링을 수행해주는 스크립트다.

MMM 구조

  • monitor-agent 통신 방식
  • monitor: MMM 내에 있는 DB 노드들을 모니터링하고 관리한다.
  • agent: MMM 내의 DB 노드들에 설치해서 monitor에 의해 관리된다.
    • agent는 monitor에 의해 읽기, 쓰기 모드가 관리된다.

기본 구성

  • 2개의 마스터가 존재한다.
    • active master: read, write 가능
    • standby master: read만 가능
  • active master와 standby master가 양방향 복제된다.

slave 추가 구조

  • active master로부터 단방향 복제된다.
  • slave 또한 monitor에 의해 읽기 모드로 제한된다.

failover 과정

  1. active master의 역할을 뺏는다.
    1. active master의 데이터가 더이상 변경되지 않도록 읽기모드로 변경
    2. active master에 붙어있던 session을 모두 kill
    3. 신규 session이 들어오지 않도록 VIP 회수
  2. standby master로 복제 재구성한다.
    1. standby master나 slave 중에 복제지연이 있는지 확인
    2. 복제지연이 해소되거나 없는 경우 standby master 기준으로 복제 재구성
  3. standby master를 신규 master로 승격시키는 작업을 한다.
    1. standby master의 읽기 모드를 해제
    2. 신규 session이 들어오도록 VIP 할당
  4. failover 완료

failover에서 복제가 깨지는 경우

  • MMM 구조에서 미약하지면 복제 crash가 발생할 가능성이 존재한다.
  • 아래 그림과 같이 active master에서 새로운 데이터가 들어오고 slave에만 복제가 된 상태에서, failover가 일어나면 복제 crash 발생한다.
    • standby master가 active로 승격되고 새로운 데이터가 들어가면 복제로 인해 다시 slave에 데이터가 들어가게된다.
    • slave는 해당 데이터를 이미 추가했기 때문에 중복 키 오류가 발생할 가능성이 있다.

MySQL의 자동-failover

  • MMM은 위 예시와 같은 crash가 발생할 가능성도 있고, 오래된 툴이어서 최근에는 사용되지 않는 것으로 보인다.
  • MHA, ProxySQL, Galera Cluster 복제와 failover를 위한 다양한 방식을 제공하고 있다.

참고 자료