MySQL

CH17 Innodb 클러스터

my-log 2023. 8. 26. 01:03
  • mysql5.7버전에서 나온 빌트인 형태의 HA 솔루션
  • 구성 요소
    • 그룹 복제
      • 소스 서버의 데이터를 레플리카 서버로 동기화하는 기본적인 복제 역할뿐만 아니라 복제에 참여하는 MySQL들에 대한 자동화된 멤버십 관리 역할 담당
    • MySQL 라우터
      • 애플리케이션 서버와 MySQL 서버 사이에서 동작하는 미들웨어 프로그램. 애플리케이션이 실행한 쿼리를 적절한 MySQL서버로 전달하는 Proxy 역할 담당
    • MySQL shell
      • 기존 MySQL 클라이언트보다 좀 더 확장된 기능. SQL뿐 아니라 자바스크립트 및 파이썬 작성 가능. 클러스터 구성등의 어드민 기능 가능
  • 구성 형태
    • 그룹 복제에 설정된 모드에 따라서 복제 그룹 내에서 프라이머리는 하나만 존재할 수도 있고 여러대가 존재할 수도 있다.

그룹 복제

  • row포멧 바이너리 로그,릴레이로그, GTID를 사용한다.
  • 기존 복제의 경우 일반적으로 소스-레플리카 형태로 구성되어 단방향으로 복제
  • 그룹 복제에서는 복제에 참여하는 MySQL 서버들이 하나의 복제 그룹으로 묶인 클러스터 형태를 가지며 그룹 내 서버들은 서로 통신하면서 양방향 복제 가능
  • 트랜잭션에 대해 그룹 내 다른 멤버들의 응답을 확인하는 단계가 있다.
  • 한 서버에서 트랜잭션이 커밋될 준비가 되면 트랜잭션 정보를 그룹의 다른 멤버들에게 전송하고 과반수 이상의 멤버로부터 응답을 전달받으면 그때 해당 트랜잭션을 인증하고 최종적으로 커밋 처리 완료

그룹 복제 모드

  • 쓰기를 처리할 수 있는 프라이머리 서버 수에 따라 싱글 프라이머리 모드와 멀티 프라이머리 모드 두가지 동작 모드 존재
  • 싱글 프라이머리 모드
    • 쓰기를 처리할 수 있는 프라이머리 서버가 한대만 존재
  • 멀티 프라이머리 모드
    • 그룹 복제에서 그룹 멤버들이 전부 프라이머리로 동작하는 형태

그룹 복제에서의 트랜잭션 처리

  • 그룹 복제에서 트랜잭션은 다음의 단계들을 거친 후 최종적으로 그룹의 각 서버들에 적용된다.
    • 합의
    • 인증
  • 합의 :
    • 그룹 내 일관된 트랜잭션 적용을 위해 그룹 멤버들에게 트랜잭션 적용을 제안하고 승낙을 받는 과정
    • 그룹의 과반수 이상에 해당하는 멤버들로부터 ACK를 받으면 그 다음 프로세스로 진행
  • 인증
    • 다수의 그룹 멤버들에서 실행된 트랜잭션들은 합의 단계를 거친 후 글로벌하게 정렬되어 각 멤버들에게 모두 동일한 순서로 인증 단계를 거치게된다.
    • 해당 트랜잭션이 이미 인증 단계를 거친 선행 트랜잭션과 동시점에 동일한 데이터를 변경한 것인지를 검사해서 트랜잭션 충돌여부 확인

트랜잭션 일관성 수준

  • EVENTUAL 일관성 수준
    • 최종적으로는 그룹 멤버들이 일관된 데이터를 가지게 됨을 의미
    • 트랜잭션이 직접 실행된 멤버가 아닌 다른 그룹 멤버들에서는 일시적으로 변경 직전 상태의 데이터가 읽혀질 수 있다.
  • BEFORE_ON_PRIMARY_FAILOVER 일관성 수준
    • 새로운 프라이머리로 유입된 읽기 전용 및 일기-쓰기 트랜잭션은 새로운 프라이머리에서 이전 프라이머리의 트랜잭션이 모두 적용될때까지 처리되지 못하고 대기
  • BEFORE일관성 수준
    • 일기 전용 및 읽기-쓰기 트랜잭션은 모든 선행 트랜잭션이 완료될 때까지 대기 후 처리
  • AFTER 일관성 수준
    • 트랜잭션이 적용되면 해당 시점에 그룹 멤버들이 모두 동기화된 데이터를 갖게 한다.
  • BEFORE_AND_AFTER 일관성 수준
    • BEFORE과 AFTER수준이 결합된 형태
    • 읽기-쓰기 트랜잭션은 모든 선행 트랜잭션이 적용될 떄까지 기다린 후 실행되며, 트랜잭션이 다른 모든 멤버들에서도 커밋이 준비되어 응답을 보내면 그때 최종적으로 커밋된다.

그룹 복제의 자동 장애 감지 및 대응

  • 그룹 복제에서는 그룹의 일부 멤버에 장애가 발생해 응답 불능 상태에 빠졌다 하더라도 그룹이 정상적으로 동작할 수 있게 하는 장애 감지 메커니즘이 구현되어 있다.
  • 문제 상태에 있는 멤버를 식별하고 해당 멤버를 그룹복제에서 제외

그룹 복제의 분산 복구

  • 멤버가 그룹에 새로 가입하거나 혹은 탈퇴 후 다시 가입할 때 가입하지 전 또는 잠시 그룹을 떠나있는 동안 그룹에 적용된 트랜잭션들이 있을 수 있다. 멤버는 이러한 트랜잭션들을 모두 적용해야 다른 그룹 멤버들이 가진 데이터와 동일한 데이터를 갖게 되며, 그때 그룹에 정상적인 상태로 참여할 수 있게 된다.
  • 가입 멤버에서 누락된 트랜잭션들을 다른 그룹 멤버에서 가져와 적용하는 복구 프로세스를 자동으로 수행하는데 이를 분산 복구라 한다.
  • 분산 복구 방식
    • 바이너리 로그 복제 방식
      • 바이너리 로그에서 가입한 멤버에 적용되지 않은 트랜잭션들을 복제해서 가져와 적용
    • 원격 클론 방식
      • InnoDB 스토리지 엔진에 저장된 모든 데이터와 메타데이터를 일관된 스냅샷으로 가져와 가입 멤버를 재구축 하는 방식
  • 분산 복구 프로세스
    • 로컬 복구
      • 가입 멤버가 이전에 그룹에 가입한 적이 있는 경우 릴레이 로그에 미처 적용하지 못한 트랜잭션이 존재할 수 있다. 따라서 이 트랜잭션들을 먼저 적용한 후 본격적인 복구 작업을 진행한다.
    • 글로벌 복구
      • 가입 멤버는 그룹의 기존 멤버들에서 기증자 역할을 할 멤버를 선택해서 데이터 또는 누락된 트랜잭션들을 가져와 자신에게 적용 이 작업을 진행하는 동안 현재 그룹에서 처리되는 트랜잭션들을 내부적으로 캐싱
    • 캐시 트랜잭션 적용
      • 글로벌 복구 단계가 완료되면 캐싱해서 보관하고 있던 트랜잭션들을 적용해 최종적으로 그룹에 참여
  • 분산 복구 오류 처리
    • 복구 작업 도중 문제가 발생하더라도 가능한 경우 자동으로 다시 작업을 시도하는 장애 감지 매커니즘 구현되어 있음

그룹 복제 요구 사항

  • 그룹 복제를 사용하려는 MySQL 서버는 다음 요구사항을 충족해야 한다.
    • InnoDB 스토리지 엔진 사용
    • 프라이머리 키 사용
    • 바이너리 로그 활성화
    • ROW형태 포멧 사용
    • 바이너리 로그 체크섬 설정
    • GTID사용
    • 멀티 스레드 복제 설정
    • 등등

그룹 복제 제약 사항

  • 갭락은 갭락을 발생시킨 트랜잭션이 실행된 멤버에서만 유효, 그룹 복제의 트랜잭션 인증 단계에서 해당 락 정보는 공유되지 않는다.
  • 테이블 락 및 네임드 락도 그룹 단위로 락 정보가 공유되지 않음
  • 멀티 프라이머리 모드로 동작중인 그룹에서 동일한 테이블에 대해 서로 다른 멤버에서 동시에 실행되는 DDL 및 DML문은 지원하지 않음
  • 멀티 프라이머리 모드로 동작 중인 그룹에서 외래키가 존재하는 테이블 특히 CAACADE 제약 조건이 사용된 테이블은 지원하지 않음
  • 멀티 프라이머리 모드에서 SELECT .. FOR UPDATE 구문을 사용할 때 데드락이 발생할 수 있다.
  • 최대 9대까지 구성 가능

MySQL 쉘

  • MySQL을 위한 고급 클라이언트 툴
  • SQL뿐 아니라 자바스크립트,파이썬 언어 모드 지원

MySQL 라우터

  • InnoDB 클러스터에서 애플리케이션 서버로부터 유입된 쿼리 요청을 클러스터 내 적절한 MySQL 서버로 전달하고 MySQL서버에서 반환된 쿼리 결과를 다시 애플리케이션 서버로 전달하는 프락시 역할을 수행
  • 중요 기능
    • InnoDB 클러스터의 MySQL 구성 변경 자동 감지
    • 쿼리 부하 분산
    • 자동 페일오버

'MySQL' 카테고리의 다른 글

Real MySQL 파티션  (0) 2023.08.04
Real MySQl CH11 쿼리 작성 및 최적화  (0) 2023.07.21
MySQL binlog format  (0) 2022.06.08
NULLABLE 컬럼에 대한 인덱스 사용 ( Oracle vs MySQL)  (1) 2022.05.10