Backend/Relational Databases

[Relational Databases] MHA 개념

lakelight 2022. 8. 10. 12:02
728x90
반응형

MHA

Master High Availability의 약자로 Master DB의 고가용성을 위해 페이스북에 의해 개발되었으며 GPL v2 라이센스 기반의 오픈소스 입니다.

Master / Slave 구조의 Replication 환경에서 Master DB에 장애가 발생했을 때 사람이 직접 Master DB를 변경하면 서비스 중단 시간이 길어지므로 이를 자동화 할 수 있는 기능을 만든 것입니다.

MHA에 의해서 자동 Fail-Over(Master 승격)을 지원하고 Slave 중 가장 최신의 Slave DB를 Master DB로 승격시켜 고가용성을 유지 시키는 역할을 하게 됩니다.

이미지 출처: https://hoing.io/archives/9175

 

MHA의 기능

  1. Master DB의 네트워크 단절(통신불가 or 3306 포트 접속 불가) 시 Fail-Over을 진행합니다.
  2. Fail-Over 시 기존 Master DB 와 새로운 Master DB 간의 최대한의 데이터 적합성을 보장합니다.
    show slave status 명령어를 싱행하여 Slave에서 복제가 더 될 내용이 남아있다면 Master DB의 Binlog를 읽어서 새로운 Master DB에 반영합니다.
  3. Slave DB 사이의 적용된 Binlog 차이를 확인하여 복제 접합성을 확인합니다.
  4. 복제에 대한 모니터링

 

Master DB 장애 발생 시 조치

MHA는 몇 초에서 몇십초 만에 장애 조치를 수행할 수 있습니다.

Master DB의 오류를 감지하는데 9-12초 정도 소요되고, 선택적으로 스플릿 브레인을 방지하기 위해 마스터 시스템의 전원을 끄는데 7-10초, 새로운 Master DB에 차이가 발생한 릴레이 로그를 적용하는데 몇 초가 소요되므로 총 다운 타임은 일반적으로 10-30초 정도 소요됩니다.

이미지 출처: https://hoing.io/archives/9175

 

Failover 절차

  1.  Master DB의 장애가 발생되고 MHA가 감지합니다.
  2. Slave DB 중 가장 최신의 Slave DB를 선택하여 Master DB 로 승격하게 됩니다.
    show slave status와 relay log.end_log_pos 값을 비교하여 대상을 선정합니다.
  3. Slave DB 중 데이터 복제가 가장 느린 Slave DB에서 SQL 스레드가 릴레이로그에 기록된 모든 이벤트를 실행하고 이 과정이 끝날때까지 다음 과정은 대기하게 됩니다. 
  4. Slave DB 가 적용된 마스터 DB의 로그 파일과 로그 포지션 정보를 최신의 Slave DB(마스터로 승격된 DB)가 읽은 바이너리 로그 파일, 로그 포지션을 비교하여 차이가 발생하는 부분의 트랜잭션을 Slave에 반영하게 됩니다.
  5. 최신의 Slave DB는 반영된 바이너리 로그 포지션 이후 장애가 발생한 시점의 마지막 Master DB의 바이너리 로그 포지션 차이를 적용하면 장애 시점의 Master DB의 데이터 시점까지 복구가 완료 되게 됩니다.

 

MHA Component

MHA manager와 MHA node로 구성되어 있습니다.

이미지 출처: https://hoing.io/archives/9175

  • 매니저 패키지
    Master와 Slave DB 쌍을 이루어 같이 관리할 수 있습니다.
    masterha_manager: 자동화 된 Master DB 모니터링 및 장애 조치 명령을 수행합니다.
    other helper scripts: 수동으로 Master DB Failover, 온라인 Master DB 스위치, Connection 체크 등 기타 작업을 수행합니다.
  • 노드 패키지
    모든 MySQL 서버에 배포합니다.
    save_binary_logs: Access 가능한 경우 Master의 바이너리 로그(Binlog)를 복사합니다.
    Apply_diff_relay_logs: 최신의 Slave DB에서 차이가 나는 relay log를 생성하고 모든 차이 나는 binlog 이벤트를 적용합니다.
    purge_relay_logs: SQL 스레드를 중지하지 않고 릴레이 로그를 삭제합니다.

 

[참고]

1. MySQL MHA 1 - MHA 기능 설명 및 아키텍처 설명

 

728x90
반응형