[MySQL] [MHA] 01. MHA 이론
- Databases/MySQL
- 2022. 10. 2.
■ MHA 소개
MHA는 MySQL High Available의 약자로 MySQL의 HA솔루션중에 하나입니다. 구글에서 오픈소스로제공되었으나 현제는 중단되고 다른 개발자가 업데이트를 해오다 2018년도부터 중단되었습니다. 하지만 지금도 MySQL에서 가장 많이 쓰이는 HA솔루션중에 하나입니다.
보통 DB의 HA솔루션은 Shared Disk를 이용하고 액티브 서버에 문제 발생시 HA솔루션이 문제를 감지하고 Shared Disk를 스탠바이 서버에 붙인 후 스탠바이 서버를 액티브로 기동하여 서비스를 정상화 시킵니다. 하지만 MHA는 특이하게 마스터 - 슬레이브 복제 구조에서 슬레이브중 하나를 마스터로 승격시키고 나머지 슬레이브들을 신규로 승격된 마스터에 모두 옮김으로서 HA를 완성시킵니다.
물론 Peace Maker나 다른 HA솔루션을 이용해서 할 수 있습니다. 하지만 마스터 - 슬레이브 복제환경을 그대로 이용하면서 HA기능까지 사용할 수 있기 때문에 많이 사용하는 솔루션중에 하나입니다.
■ MHA 구조
MHA는 MHA 매니저와 MHA 노드로 구성되어 있습니다. MHA 매니저는 마스터 서버를 모니터링 하며이상 유무를 판단하고 MHA노드는 각 서버들의 바이너리 로그를 확인하는 역활로 쓰입니다. 또한MHA서버는 여러 마스터-슬레이브로 구성된 복제 그룹 여러개를 모니터링 할 수 있습니다.
그림 1 : MHA 아키텍쳐
위의 그림에서 MHA Manager는 N개의 복제그룹을 모니터링 합니다. 모니터링중 특정 복제그룹에서마스터에 문제 발생시 슬레이브들중 하나를 마스터로 승격시키고 나머지 슬레이브들을 신규 마스터로승격된 서버로 붙게 됩니다. 이렇게 함으로써 지속적인 서비스가 가능하도록 합니다.
■ MHA 장애판단 기준 및 Failover 순서
▶ 장애 판단 기준
MHA 매니저 서버의 장애 판단 기준은
1. 마스터 통신불가(네트워크 단절, 혹은 MySQL 통신포트 이상)
2. MySQL 서버 프로세스 이상
3. 기타 마스터 서버의 응답 불가
등이 있습니다.
그림 2. 페일오버 방법
▶ 페일오버 순서
• 모든 슬레이브에서 Master_Log_File과 Read_Master_Log_Pos를 이용하여 놓친 이벤트를 체크합니다.
이때 마스터의 로그를 가장 많이 가지고 있는 슬레이브가 최신 이벤트를 가지고 있는 슬레이브이며 이 슬레이브가 새로운 마스터가 될 후보군이 됩니다. 이때 세미싱크 방식의 복제를 사용한다면 이 리스크를 줄일 수 있습니다.
• Slave DB중 가장 최신의 Slave DB를 선택하여 Master DB로 승격하게 됩니다.
슬레이브 로그파일인 relay log 파일이름과 포지션은 다릅니다. 그러나 mysqlbinlog 프로그램을 이용해서 릴레이 로그 내용을 확인해보면 end_log_pos라는 포지션 값이 있습니다. 이 포지션 값은 모든 슬레이브에서 같으며 동일한 유니크한 값입니다. 슬레이브에서 마스터 승격시 아래의 데이터를 참조하여 대상을 선정하게 됩니다.
1) show slave status\G 와 각 slave DB의 relay log를 확인
2) relay log 에서 end_log_pos 값 비교
• Slave DB중 데이터 복제가 가장 느린 Slave(i) DB에서 SQL 스레드가 릴레이로그에 기록된 모든 이벤트 실행(executes)을 하게 되고 이 과정이 끝날때까지 다음 과정은 대기 하게 됩니다.
• Slave(i) DB 가 적용한 마스터 DB의 로그 파일과 로그 포지션 정보를 최신의 Slave DB(마스터로 승격된)가 읽은 바이너리 로그 파일, 로그 포지션을 비교하여 차이가 발생하는 부분의 트랜잭션을 Slave(i)에 반영하게 됩니다.
• 마지막으로 최신의 Slave DB(마스터로 승격된)는 반영된 바이너리 로그 포지션 이후, 장애가 발생된 시점의 마지막 Master DB의 바이너리 로그 포지션 차이를 적용하면 장애시점의 Master DB의 데이터 시점까지 복구가 완료 되게 됩니다. 이때부터 장애가 발생한 Master DB의 바이너리 로그 포지션 차이를 적용하면 모든 슬레이브 DB는 장애시점의 Master DB 데이터까지는 복구가 완료가 됩니다.
■ MHA + 세미싱크(Semi - Sync)환경
MHA는 세미싱크 환경에서 최고의 조합으로 평가되고 있습니다. 세미싱크를 이용한 복제방식이 아닌일반 비동기 방식이라면 마스터와 슬레이브 사이에서 데이터가 일치하지 않을 수 있습니다. 예를 들어 마스터에서 트랜잭션이 큰 SQL이 수행되고 있을때 슬레이브에 모두 동기화시키지 못하고 장애가발생할 경우 생각보다 많이 데이터가 유실될 수 있습니다. MHA 매니저가 가능한 기존 마스터의 바이너리 로그를 최대한 신규 마스터에 적용한다고는 하지만 어쩔 수 없이 데이터가 유실될 수도 있습니다. 그러나 세미싱크를 이용하면 마스터와 슬레이브의 데이터 동기화를 최대한 맞추어주기 때문에장애 발생시 기존 마스터와 신규마스터의 로그 비교를 빠르게 끝낼 수 있으며 페일오버시에도 데이터 유실이 거의 발생하지 않습니다. 이런 이유로 MHA에서는 세미싱크를 적극 권고하고 있습니다.
■ 관련 링크
https://myinfrabox.tistory.com/268
https://myinfrabox.tistory.com/269
※ 도움이 되셨다면 광고클릭 한번 부탁드립니다. ※
'Databases > MySQL' 카테고리의 다른 글
[MySQL] [MHA] 03. MHA 테스트 및 Failover (0) | 2022.10.02 |
---|---|
[MySQL] [MHA] 02. MHA 환경설정 및 설치 (0) | 2022.10.02 |
[MySQL][Replication] Semi Sync 기능과 설정방법 (0) | 2022.08.07 |
[MySQL][Replication] MSR - Multi Source Replication 개념과 구성방법 (0) | 2022.07.09 |
[MySQL][Admin] timestamp 컬럼 속성과 timzone과의 관계 (0) | 2022.06.28 |