가시다님이 이끄는 Database Operator 스터디에 참여하여 공부하고 있다. DB에서 장애를 예상하고 대처하는 것이 아주 중요한데, 이 글에서 MySQL의 HA 구성요소인 innoDB 클러스터를 정리했다.
innoDB 클러스터
MySQL을 위한 완전한 통합 HA 솔루션을 배포 및 관리할 수 있도록 MySQL 기술을 결합한 클러스터
- MySQL 서버에 장애가 발생했을 때 Failover 처리하는 기능을 제공하지 않아 수동으로 처리해야한다. 이 과정은 수동으로 처리되고 완료하기 까지 시간이 크게 소요된다.
- 이를 개선하기 위해 빌트인 형태의 HA 솔루션, innoDB 클러스터가 도입되었다.
- InnoDB 클러스터는 최소 3개의 MySQL Server 인스턴스로 구성
innoDB 아키텍처
아키텍처는 3가지로 구성된다.
MySQL Router
- Client가 쿼리를 실행할 때 라우터를 통해 서버로 전달된다.
- 이 라우터가 InnoDB 클러스터의 메타데이터 정보를 지니고 주기적으로 갱신, 클라이언트는 서버 구성을 알고 있을 필요없다.
MySQL Shell
- 관리 시에 사용자가 쉽게 관리 할 수 있도록 API를 제공한다.
- InnoDB 클러스터 생성, 상태 확인, 서버 설정 변경 등을 할 수 있다.
Group Replication
- Group Replication를 통해 MySQL 인스턴스 집합이 고가용성을 제공할 수 있다.
- 그룹 내의 MySQL 서버 동기화 뿐 아니라 MySQL 서버 추가 및 제거 등의 멤버십 관리를 담당한다.
- General Replication에서는 Source → Replica 로의 단방향 복제가 되었다. Group Replication에서는 Primary ⇄ Secondary 양방향의 복제가 되고, 심지어 Secondary끼리의 복제도 이뤄진다.
복제 처리 방식
합의 Consensus
그룹 복제에서 트랜잭션 커밋을 처리할 때 그룹의 다른 멤버들에 대한 응답을 확인하는 과정을 “합의 Consensus” 라고 하는데 이 과정을 거쳐 데이터를 변경하는 트랜잭션을 처리한다.
인증 certification
다른 서버에서 동시 실행되는 트랜잭션 간의 충돌이 있을 수 있는데 “인증 certification"이라는 프로세스로 감지된다. 다른 서버에서 실행된 두 개의 트랜잭션이 동일 행을 업데이트 하면 충돌이 발생되고 첫번째 트랜잭션이 커밋되고, 두번째 트랜잭션은 롤백된다.
마치며
고객사에서 도입 검토하는 서비스에서 관련내용을 보게됐다. 퍼블릭 클라우드 환경에서 DB회사들이 제공하는 서비스였는데 옵션 중에 innoDB 선택하도록 구성되어 있었다. HA구성을 이해하고 나면 다른 DB를 검토할 때도 큰 도움이 될 수 있다.
참고:
https://dev.mysql.com/doc/refman/8.0/en/group-replication-summary.html
DOIK 2주차 내용 (비공개)
'스터디' 카테고리의 다른 글
[DOIK] Cloud Native PostgreSQL Operator (0) | 2022.06.26 |
---|---|
[DOIK] MySQL Operator for k8s - 장애상황 테스트 (0) | 2022.06.25 |
[DOIK] MySQL Operator for k8s 이해하고 설치하기 (0) | 2022.06.12 |