일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Galera Cluster
- IT
- 알고리즘
- c언어
- design pattern
- Java
- JPA
- react
- OS
- C
- MySQL
- 네트워크
- spring webflux
- Kafka
- 컴퓨터구조
- Proxy
- 자바
- Data Structure
- Spring
- 자료구조
- mongoDB
- Heap
- MSA
- 디자인 패턴
- JavaScript
- Algorithm
- redis
- 파이썬
- 백준
- 운영체제
- Today
- Total
시냅스
GTID 와 Galera Cluster 본문
GTID
글로벌 트랜잭션 식별자, Global Transaction ID 는 서버에서 커밋된 각 트랜잭션에 대한 식별을 가능하게 합니다.
서버 내에서만 유일한 것이 아니라 모든 복제 서버에서도 식별을 가능하게 합니다.
따라서, 복제 토폴로지 내에서 모든 트랜잭션을 고유하게 식별할 수 있게 합니다.
GTID 를 통해 slave 는 master 에 연결된 후 데이터를 어디에서부터 동기시켜야 하는지 판별하고,
MySQL 서버가 죽었다가 다시 올라와 데이터가 중단된 시점을 판단하여 데이터 불일치를 해결할 때에도 사용됩니다.
Galera Cluter
Galera Cluster 는 Sync / Multi Master 를 지원합니다.
단, 실제로는 네트워크 문제(복제 시 네트워크 지연으로 인한 장시간 blocking 등)을 해결하기 위해
논리적인 동기 방식을 지원합니다.
Galera Certification-Based Replication
Galera 는 인증이라는 방식을 통해서 데이터를 복제하고, 절차는 다음과 같습니다.
1. 트랜잭션 커밋 : RW 에서 트랜잭션을 완료하면 변경사항과 관련된 정보를 포함하는 "write-set" 을 생성합니다.
2. write-set 전송 : write-set 을 다른 노드에 전송합니다.
3. 인증 과정 : 각 노드는 받은 write-set 을 인증합니다.
3-1. GTID : 이 때 GTID 를 이용한 인증 절차가 이뤄지고, 만약 인증에 실패하게되면 최초 요청을 받은 노드는 롤백이 발생합니다.
4. 결과 : 충돌이 없다면 write-set 은 커밋되고 변경 사항이 해당 노드에 적용됩니다.
4-1. commit : 이 때 인증과 commit 는 별개로 동작하고, commit(write) 은 차후에 진행되며 semi-sync 를 제공합니다.
참고로, 충돌이 발생할 수 있는 상황은 무결성에 위반되거나
first committer win 정책에 위배되는 경우가 있습니다.
Galera Cluster 는 맨 처음 적용된 데이터만을 받아들이고, 이후 커밋된 데이터에 대해서는 롤백을 발생시킵니다.
Why Galera Cluster?
회사에서는 데이터에 민감한 애플리케이션을 개발하고 있습니다.
데이터 정합성이 중요하고, 선형적인 시스템이 필요했습니다.
위에서 살펴봤듯 Galera는 완벽한 선형적인 시스템은 아니지만,
성능을 만족하며 비교적 선형적인 시스템을 구축할 수 있기 때문입니다.
물론, Galera Cluster 는 scale-out 에 어렵지만 고가용성을 보장합니다.
만약 replication 으로 구성된다면 failover 시에 수동으로 모든 처리해야 하고(물론 솔루션이 있지만),
비동기식 복제를 지원하여 Eventual Consistency 상태가 발생할 수 있기 때문입니다.
그래서 GTID란?
Galera Cluster 인증 과정에서 GTID 가 쓰인다는 것을 알게 되었습니다.
Galera 는 first committer win 정책을 사용한다고 설명하고 있으니,
GTID 값이 작은 것을 복제하게 될 것입니다.
GTID (소스 ID : Transaction ID) 꼴로 이루어져 있습니다.
3E11FA47-71CA-11E1-9E33-C80AA9429562:23
이를테면 위와 같은 꼴입니다.
gtid_mode = ON
enforce_gtid_consistency = ON
GTID 를 사용하기 위해선 위의 두 옵션을 활성화 해야 합니다.
GTID 가 source 와 replica 사이에 데이터 유일성을 보장하기 위해 MySQL에서 제공한다는 것을 글을 통해 설명하였습니다.
새로운 replica 서버를 시작하거나, 장애 조치를 할 때 사용되고, 특히 Galera Cluster 에서는 인증 절차에 사용 되는 것을 확인하였습니다.
복제와 클러스터링은 분산 시스템에서 꼭 필요하므로 정리해보았습니다.
끝!
참고
https://galeracluster.com/library/documentation/
'데이터베이스 > MySQL' 카테고리의 다른 글
Galera Cluster 상태 전송에 대한 이해 (0) | 2024.01.10 |
---|---|
Galera Cluster 의 Boostrap 과 구성 파일 이해 (0) | 2023.10.24 |
검색기능 개발 (MySQL Full-Text Index, Search) (0) | 2023.08.03 |
페이징 성능 최적화 - No Offset 은 왜 빠를까? (0) | 2023.06.10 |
MySQL 커버링 인덱스 Covering Index (2) | 2023.05.29 |