Database

[DB] MySQL Replication, Garela Cluster

SeungbeomKim 2023. 9. 21. 23:56

오늘은 DBMS 복제 기술인 MySQL Replication, Garela Cluster에 대해서 알아보려고 합니다. MySQL Replication은 Replication(복제) 기능만 제공하지만, Garela Cluster는 Replication(복제) 기능에 더해 Clustering 기능을 제공해 줍니다. 

각각의 특징과 장, 단점에 대해 설명드리겠습니다.

 

1. MySQL Replication 

MySQL Replication picture

  • Master/Slave 방식의 구성 
  • Master(Write) / Slave(Read)
  • 여러 개의 DB를 권한에 따라 수직적인 구조(Master/Slave)로 구축하는 방식
  1. Master node에서 write transaction이 수행되면 Master node는 MySQL Data File이란 곳에 Data 저장
  2. transaction에 대한 로그를 BIN LOG라는 파일에 저장(시간 순서대로 수행한 업데이트 트랜잭션 기록)
  3. Slave node에서 IO Thread에 의해 BIN Log가 복사(비동기적으로 동작)
  4. 읽어온 내용은 Relay Log 파일에 기록
  5. 이후 SQL Thread에 의해 읽어 하나씩 수행되고, MySQL 데이터 파일에 기록

 

장점

  • 읽기 작업을 분산하여 성능 향상
  • 데이터 백업을 위한 Slave 사용
  • 비교적 구성과 운영이 간단

단점

  • 데이터 복제가 비동기적으로 적용되기에 master/slave 간의 순간적인 데이터 불일치성 발생 

 

2. Garela Cluster

  • multi-master 구조로서, 모든 node에서 read/write transaction이 가능합니다.
  • 동기식 복제(sychronous replication) 방식으로 모든 node가 항상 같은 데이터를 가짐을 보장합니다.
  • MySQL node에는 WSREP module(DB 복제를 위한 모듈)이 있는데, Galera replication module과 연결되어 한 곳에서 데이터 변경이 발생하면 다른 연관된 모든 node로 데이터 복제

 

Garela Cluster Architecture

  • DBMS: 개별 노드에서 실행되는 DB 서버
  • wsrep API: db 복제를 위한 인터페이스
    • wsrep hooks: write-sets replication을 위해 데이터베이스 서버 엔진(InnoDB)와의 통합 제공
    • dlopen(): wsrep hooks에서 wsrep 공급자를 사용할 수 있습니다.
  • Galera Plugin: write-sets replication service 기능 활성화
  • Group Communication Plugins: Galera Cluster에서 사용할 수 있는 Group Communication Plugins

 

데이터 복제 처리 과정

  1. 클러스터의 한 node에서 DB 상태 변경이 발생
  2. DB에서 wsrep hooks는 변경 사항을 write-set으로 변환
  3. dlopen()은 wsrep hooks에서 wsrep 공급자 기능을 사용하도록 합니다.
  4. Galera Replication Plugin은 write-set 인증 및 클러스터 복제 처리

 

Garela Cluster's Certification-Based Replication

  • Garela Cluster는 기본적으로 인증-기반 복제 방식으로 데이터 복제를 수행합니다.
    • 핵심: Optimistic Execution(Certification 과정 전까지 충돌이 일어나지 않는다고 가정하고 트랜잭션 실행)
  • 인증 기반 복제의 전제 조건
    • Transactional Database: 반드시 트랜잭션 보장, 커밋되지 않은 데이터는 롤백이 가능해야 합니다.
    • Atomic Changes: 데이터는 원자성을 가지고 변경할 수 있어야 하고, 트랜잭션에서 모든 노드에 일련의 데이터베이스 작업이 발생해야 합니다.

Galera Cluster의 인증-기반 복제의 과정
Certification-Base Replication 과정

  1. 클라이언트가 데이터를 수정하고 서버에 commit 명령을 실행하면 트랜잭션에 의해 데이터베이스에 적용된 모든 변경 사항과 변경된 행의 기본 키가 write-sets으로 수집
  2. write-sets 나머지 노드에 복제
  3. write-sets은 write-sets은 기본키를 사용하여 결정적 인증 테스트를 거치게 됩니다.
  4. 인증 테스트가 실패하면 노드는 write-sets을 삭제하고 클러스는 원래 트랜잭션을 rollback, 그러나 테스트가 성공하면 트랜잭션이 commit 되고, write-sets이 나머지 클러스터에 적용됩니다.

 

장점

  1. 전체 노드에 데이터가 항상 일관성 있게 저장될 뿐만 아니라, 모든 노드가 마스터 노드로 작동하여 특정 노드가 장애가 나더라도 서비스에 지장이 안 생깁니다(수평적 구조, Master-Slave 형태의 비동기 복제보다는 일관성 O)
  2. 모든 노드가 이론상으로 쓰기가 가능하기 때문에 모든 노드가 죽기 전까지는 서비스가 오류에 대응하기 수월

 

단점

  1. 성능적인 면에서 데이터를 디스크에 저장하기 전에 다른 모든 노드에 데이터 복제 요청을 해야 하기 때문에, 비동기 방식의 MySQL Replication에 비해 쓰기 성능이 떨어집니다.
  2. 다중 마스터로 복제시, Split brain 문제가 발생할 수 있습니다.
    • Split brain: 일반적으로 클러스터로 구성된 두 시스템 그룹 간 네트워크의 일시적 동시 단절현상이 발생 시 나타나는 현상
  3.  Scale-out의 한계 
    • Garela가 모든 노드에 데이터를 복제하고 transaction을 끝내는 만큼, 전체적인 node 수가 많아지게 됩니다. 복제를 하는데 그만큼 시간이 걸림에 따라 하나의 클러스터에서 유지할 수 있는 노드 수가 한정적입니다. 

 

결론

  • MySQL Replication: 단순히 읽기 부하 분산, 데이터 백업 목적으로 사용
  • Galera Cluster: 고가용성(서버, 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질), 일관성, 동기화, 확장성이 더 중요한 요구사항인 경우에 사용

 

<참고자료>

https://bcho.tistory.com/1062

 

MySQL 클러스터링을 위한 Galera Cluster

MySQL Galera Replication 조대협 (http://bcho.tistory.com) RDBMS 오픈소스 중에서 단연 가장 많이 사용되는 것은 MySQL인데, 근래에 웹 스케일이 커지면서, 단일 인스턴스로만 서비스가 불가능한 용량까지 가게

bcho.tistory.com

 

'Database' 카테고리의 다른 글

[DB] DB 형상관리를 위한 Flyway 적용  (0) 2025.01.07
[DB] MariaDB, MySQL 비교  (0) 2023.09.20
[DB] Redis란 무엇인가?  (0) 2023.09.08