MySQL InnoDB Cluster의 동시성 제어(group_replication_consistency)

Hansu Kim·2022년 10월 28일
0

Database

목록 보기
5/6

InnoDB Cluster는 5가지의 동시성 제어 모드를 제공하며group_replication_consistency 파라미터 설정으로 변경할 수 있다.

1. Eventual

데이터는 최종적으로 일관성이 유지되나, 각 노드 간의 읽기 트랜잭션 결과가 일치하지 않는 순간이 발생할 수 있다.
Eventual 모드에서 트랜잭션 처리 과정은 아래와 같다.

  • Primary Node에서 Write transaction 요청 수신
  • Consensus (합의) 수행
    • 다른 노드들로 트랜잭션 데이터를 전파
    • 과반수 노드로부터 ACK 수신시 Majority 획득
  • 인증
    • 자기 DB의 선행 트랜잭션을 검사해서 충돌 여부를 검사
      • 충돌 발생시 트랜잭션 롤백
  • RW트랜잭션을 수신했던 노드는 binary log에 로그 선행 기입
    RW트랜잭션을 전파받은 노드는 relay log에 로그선행 기입 후, applier thread에서 릴레이 로그에 기록된 트랜잭션을 실행하며 binary log에도 기록한다.
  • 트랜잭션 커밋
  • 클라이언트 응답

해당 모드에서는 트랜잭션 데이터를 다른 노드들로 전파한 후, 본인 노드만을 기준으로 트랜잭션 커밋처리를 한다. 각 노드의 트랜잭션 커밋 시점은 서로 다를 수 있기 때문에 READ가 어떤 노드에서 수행됐느냐에 따라 특정 시점에는 서로 다른 read result를 갖게될 수 있다.
수신한 트랜잭션은 일단 다른 노드로 전파한 후 수행되고 인증단계를 거치기에, 서로 다른 노드로 RW 트랜잭션이 발생할 경우, 인증단계에서 만약 트랜잭션 선행 완료된 다른 트랜잭션과 충돌된다면 트랜잭션 충돌로 인한 롤백이 많이 발생할 수 있다.

2. Before_on_primary_failover

Eventual과 같은 방식으로 동작하나, Primary Failover가 발생했을 때엔 Read 트랜잭션과 Read-Write 트랜잭션이 relay log의 이전 Primary 노드로부터 전달받은 트랜잭션들이 모두 적용될 때까지 대기하게 된다.

3. Before

RO, RW 트랜잭션 모두 선행되는 트랜잭션이 완료될 때까지 대기한 후 수행된다. Eventual 모드에서는 트랜잭션 수행이 선행되는 트랜잭션 완료까지 대기하지 않기에, Eventual에 비하면 트랜잭션 수신 시점부터 적용 완료까지 지연이 발생할 수 있다.
또한, 각 노드들의 커밋 시점이 일치하지 않기 때문에 각 노드들 사이에 read 트랜잭션의 결과가 불일치할 수 있다.
또한, Before on primary failover 수준이 제공하는 일관성 보장을 포함한다.

4. After

After 모드는 트랜잭션 수신시, RO는 별다른 제약없이 바로 수행되나 RW 트랜잭션은 각 노드가 알아서 커밋하는게 아니라 모든 노드들이 full-mesh 형태로 prepare 응답을 주고 받으며 모두 트랜잭션을 커밋할 준비가 되었음을 확인하고 커밋한다. 또한, 선행되는 트랜잭션이 수행 완료될 때까지 대기하지는 않는다. 상세 과정은 아래와 같다.

After 모드는 어떤 멤버에서든 일관된 최신 데이터를 얻을 수 있으나, full-mesh 형태로 prepare를 수행해야하기에 쓰기 지연이 많이 발생한다.
그에 따라 AFTER 일관성 수준은 DB에서 쓰기 요청보다 읽기 요청이 많고 분산된 최신 읽기를 수행하고자 할 때 사용하는 것이 좋다.
또한, Before on primary failover 수준이 제공하는 일관성 보장을 포함한다.

5. Before and After

Before and after는 After처럼 RW 트랜잭션은 트랜잭션 커밋 전 prepare 과정을 수행하는 동시에, 트랜잭션 수행 전 선행되는 트랜잭션들이 모두 적용될 때까지 대기 후 수행한다.
RO 트랜잭션은 선행되는 트랜잭션들이 적용될 때까지 대기한 후 수행된다.
또한, Before on primary failover 수준이 제공하는 일관성 보장을 포함한다.

정리

group replication consistency가 나뉘는 기준은 크게 나누면 다음과 같다.

  • 트랜잭션 커밋시, 모든 노드가 같은 시점에 커밋될 수 있도록 prepare 과정을 거치는가
  • 트랜잭션 수행시, 선행되는 트랜잭션들이 적용된 후 적용되는가
    • RW만 대기 후 적용되는 가 아니면 RO/RW 모두 대기 후 적용되는가
      • 선행 트랜잭션을 고려하지 않고 수행되면 EVENTUAL
      • 선행 트랜잭션 적용까지 대기 후 수행하면 BEFORE
      • 트랜잭션을 대기하지 않으며, RW 트랜잭션 적용시 prepare 과정을 통해 동일한 커밋 시점을 보장하면 After
        • 모든 노드들이 트랜잭션을 커밋할 준비가 되었는지 확인하는 과정을 거치기에, 선행되는 트랜잭션 완료까지 대기하지는 않지만 커밋할 준비가 되었는지 확인하는 과정에서 정상적으로 동작중인 모든 멤버들이 대기하는 영향을 미친다.
      • RW, RO가 선행되는 트랜잭션 적용까지 대기 후 적용되며, RW 트랜잭션 적용시 prepare 과정을 통해 동일한 커밋 시점을 보장하면 Before and After
      • RO도 대기 후 적용되면 Before and after

0개의 댓글