[컴][db] Galera Replication

갈레라 복제 / 마리아 갈레라 / 마리아 클러스터링 / clustering / cluster / db cluster / mysql cluster

Galera Replication

ref. 1 에 Galera 에 대한 설명이 잘 되어 있다.

이 글은 ref.1 의 번역, 정리를 한다.

Galera 의 replication 이 추구하는 바는 synchronous 이긴 한데, 완전히 synchronouse 는 아니다.

However, in practice, synchronous database replication has traditionally been implemented via the so-called “2-phase commit” or distributed locking which proved to be very slow. Low performance and complexity of implementation of synchronous replication led to a situation where asynchronous replication remains the dominant means for database performance scalability and availability. Widely adopted open-source databases such as MySQL or PostgreSQL offer only asynchronous or semi-synchronous replication solutions.

Galera’s replication is not completely synchronous. It is sometimes called virtually synchronous replication.

Certification-Based Replication

synchronous replication 에 대한 대안으로 Group Communication 과 transaction ordering 기술이 제안됐다. 이것을 기반으로 Galera Replication library 와 wsrep API(write set replication API) 를 만들었다.

Galera provider 가 transaction과 관련된 write set을 인증한다.(certify) 이 인증은 클러스터의 각 노드의 commit 시간에 행해진다. 이 write set이 반드시 해당 클러스터 노드에 바로 적용되는 것은 아니다. 대신 write set은 클러스터 노드의 receive queue에 들어가고, 결국 클러스터 노드의 Galera slave thread 중 하나에 의해 처리된다.

wsrep_slave_threads system 변수로 Galera slave thread 개수를 설정할 수 있다.

Galera slave thread 는 어떤 write set 들이 병렬로 적용하는 것이 안전한지 결정할 수 있다.(determine)
그러나 만약 클러스터 노드들이 잦은 consistency 문제들을 갖는것처럼 보인다면, 값을 1로 하는것이 아마 문제를 수정할 수 있을 것이다.

wsrep_local_state_comment에서, 클러스터 노드의 state가 JOINED 인 경우에 슬레이브 스레드 수를 늘리면 클러스터 노드가 클러스터를 더 빨리 따라잡을 수 있다. 이 경우 스레드 수를 시스템의 ’CPU 수의 두 배’로 설정하는 것이 유용할 수 있다.

정리:

write set 이 commit 되면, certificate 이 수행된다. 그리고 write set 이 receive queue 에 들어가고, Galera slave thread 가 가져다가 replication 을 처리한다.?

Streaming Replication

Galera 4 에서부터 지원한다. Galera 4 는 MariaDB 10.4 부터 지원한다.

MariaDB Cluster 옛버전에서는 실행할 수 있는 transaction size가 2GB가 최고치였다.

노드는 replication 과 certification 을 수행하기 전에 트랜잭션 커밋(transaction commit)을 기다린다.

‘대규모 트랜잭션’, ‘장기간 실행되는 쓰기’, ‘대규모 데이터셋 변경’은 conflict 가 발생해서 ’비용이 크게 든 작업’(expensive operation)을 rollback할 수 밖에 없는 가능성이 더 커진다.

Streaming Replication를 사용하면, 노드는 대규모 트랜잭션을 더 작고 관리하기 쉬운 fragment로 분할한 다음, commit을 기다리는 대신 이러한 fragment들을 클러스터에 복제한다.(replicate), 그리고 인증을 하게되면, conflicting transactions 으로 인해 fragment가 중단되지 않게 된다. (me: commit 전에 그냥 fragment 로 쪼개서 바로 replicate, certificate 을 해버리는 것인듯.)

이는 실행 중이나 롤백 시 모두 성능에 영향을 미칠 수 있으므로 충돌이 일어날것 같지않은 large transactions에만 사용하는 것이 좋다.

Group Commits

Group Commits 도 Galera 4 에서부터 지원한다. Galera 4 는 MariaDB 10.4 부터 지원한다.

MariaDB Group Commit에선, 성능향상을 위해서 transaction 들의 group 들은 함께 disk 로 flushed 된다. 이것을 MariaDB 10.4부터 cluster 에서도 사용할 수 있게 됐다.

MariaDB 10.4 이전 버전에서는 이 기능을 MariaDB Cluster 에서 사용할 수 없었다. replication을 위한 트랜잭션의 global-ordering 을 방해했기 때문이다.

Galera cluster 에서 donor 와 joiner

from : donor 가 무엇인가? 에 대한 bingchat 답변

Galera cluster의 donor는 다른 노드가 cluster에 join 또는 rejoin할 때 joiner로 알려진 node에 데이터를 제공하는 노드입니다. donor는 State Snapshot Transfer (SST) 방식 또는 Incremental State Transfer (IST) 방식을 사용하여 joiner ¹²³에 데이터를 전송할 수 있다.

donor 노드는 가용성 및 안전성에 따라 cluster에서 자동으로 선택하거나 joiner 노드 ¹²에서 wsrep_sst_donor 파라미터를 설정하여 수동으로 선택할 수 있다. donor 노드가 사용 중이거나 과부하 상태인 경우, wsrep_sst_donor_rejects_queries 매개변수 ²를 설정하여 SST 요청을 거부하도록 구성할 수도 있다.

  1. Node Provisioning — Galera Cluster Documentation.
  2. State Snapshot Transfers — Galera Cluster Documentation.
  3. State Transfers — Galera Cluster Documentation.

See Also

  1. 쿠…sal: [컴][db] MariaDB Galera cluster 설정

References

  1. About Galera Replication - MariaDB Knowledge Base

댓글 없음:

댓글 쓰기