1. 알아보기
1.1. Primary와 Replica DB
현대의 애플리케이션은 수많은 데이터를 실시간으로 처리합니다.
이를 지원하기 위해, 데이터베이스 시스템은 성능과 안정성을 유지해야 합니다.
Primary-Replica 구조는 이런 요구를 충족하기 위한 대표적인 데이터베이스 아키텍처 중 하나입니다.
[Primary DB란]
시스템에서 주 데이터베이스 역할을 하는 데이터베이스입니다.
모든 데이터 쓰기(write) 작업이 Primary DB에서 이루어집니다.
기존 데이터를 수정하는 쓰기 작업(INSERT, UPDATE, DELETE) 이 Primary DB에서 이루어집니다.
즉, Primary DB는 데이터의 최신 상태를 항상 유지하며, 데이터의 변경이 최초로 적용되는 곳입니다.
⇒ 쓰기 전용
[Replica DB란]
Replica DB는 Primary DB의 데이터를 복제한 데이터베이스입니다.
Primary DB에 변경이 발생하면, 그 변경 사항이 Replica DB로 자동으로 동기화됩니다.
단, 차이는 Replica DB는 일반적으로 읽기 전용으로 사용된다는 것입니다.
즉, 읽기 작업(read)을 Replica DB에서 처리함으로써 Primary DB의 부하를 줄일 수 있습니다.
⇒ 읽기 전용
1.2. 복제의 장점과 단점
[장점]
- 최적화: 읽기와 쓰기 작업을 분리하여 성능을 최적화할 수 있습니다.
- 확장성: 더 많은 Replica DB를 추가하면, 읽기 성능을 더욱 높일 수 있습니다.
- 안정성: Primary DB에 문제가 발생해도, Replica DB는 여전히 데이터를 보유하고 있으므로 빠르게 복구할 수 있습니다.
[단점]
- 일관성 문제: 일시적인 데이터 불일치가 발생할 수 있습니다.
- 복잡한 관리: 동기화 관리와 네트워크 부하 등을 고려해야 하므로, 시스템이 다소 복잡해질 수 있습니다.
1.3. 아키텍처
복제는 크게 3 단계로 이루어집니다.
1. Primary 서버에서의 변경 기록 : 데이터 변경 사항을 Binary Log에 기록합니다.
2. Replica 서버로 로그 전송: Replica 서버는 I/O 스레드를 사용해 Primary 서버에 접속해 이 바이너리 로그를 relay.log 로복제합니다.
3. 로그 재생: Replica 서버는 SQL 스레드를 사용해, 받은 바이너리 로그의 내용을 실행합니다.(SQL 쿼리로 이루어져있습니다)
[ 복제 유형 ]
(1) 비동기 복제(Asynchronous Replication)
기본적으로 MySQL 복제는 비동기 방식으로 동작합니다.
Primary 서버는 트랜잭션이 완료되면, Replica 서버가 그 변경 사항을 수신했는지 여부와 관계없이 다음 작업을 처리합니다.
Replica 서버는 일정 간격으로 Primary 서버의 바이너리 로그를 읽어와 데이터를 복제합니다.
일관성보다 성능에 중점을 둔 방식입니다.
(2) 반동기 복제(Semi-synchronous Replication)
반동기 복제는 비동기 방식과 동기 방식의 절충점입니다.
Primary 서버는 최소한 하나의 Replica 서버가 바이너리 로그를 수신할 때까지 대기한 후 트랜잭션을 완료합니다.
(3) 완전 동기 복제(Synchronous Replication)
동기 복제는 Primary 서버에서 트랜잭션이 발생할 때 모든 Replica 서버가 해당 변경 사항을 반영할 때까지 트랜잭션을 완료하지 않습니다.
즉, 모든 서버가 같은 데이터를 실시간으로 보유하게 됩니다. (하지만 이는 성능에 영향을 미칠 수 있습니다)
요약하면,
MySQL Group Replication은
fault-tolerant 시스템을 구축하는데 사용할 수 있는 기술입니다.
Single Primary Mode (단일 리더 모드) / Multi-Primary Mode (다중 리더 모드) 를 구성하도록 지원합니다.
그룹 내에서 자동으로 장애 조치가 가능하여, 한 노드가 다운되면 다른 노드가 자동으로 이를 감지하고 처리할 수 있습니다
⇒ 고가용성(High Availability)과 데이터 일관성이 중요한 애플리케이션에 적합합니다.
(2) 에서 계속...
'♣ Learning Logs > MYSQL' 카테고리의 다른 글
[MYSQL] Mysql Group Replication 구축(2) (1) | 2024.10.25 |
---|---|
[MySQL] binlog로 시점 복원하기 (1) | 2024.10.03 |