시냅스

Galera Cluster 의 Boostrap 과 구성 파일 이해 본문

데이터베이스/MySQL

Galera Cluster 의 Boostrap 과 구성 파일 이해

ted k 2023. 10. 24. 12:46

Galera Cluster

https://liltdevs.tistory.com/201

 

GTID 와 Galera Cluster

GTID 글로벌 트랜잭션 식별자, Global Transaction ID 는 서버에서 커밋된 각 트랜잭션에 대한 식별을 가능하게 합니다. 서버 내에서만 유일한 것이 아니라 모든 복제 서버에서도 식별을 가능하게 합니

liltdevs.tistory.com

현재 회사에서는 고가용성을 목적으로 Galera Cluster 를 사용하고 있습니다.

Galera Cluster 는 bootstrap(galera_new_cluster 로 실행시킨 node) 이

galera cluster 형성에 중요한 역할을 합니다.

아래에서는 그 설명과 관련 파일에 대해 알아보겠습니다.

 

 

Boostrap

Bootstrap Node 는 새로운 클러스터를 형성하고 초기화하는 역할을 합니다.

이 노드가 galera_new_cluster 라는 명령으로 실행되어야만 다른 노드들도 참여할 수 있습니다.

또한, Bootstrap 은 새로 참여하는 멤버에 대한 상태 관리를 하기도 합니다.

 

이때 Galera Cluster 는 seqno 라는 것으로 관리합니다.

seqno 로 마지막으로 인증한 트랜잭션의 Global Sequence Number 를 나타냅니다.

이 seqno 는 galera 구성 파일인 grastate.dat 에 적혀있습니다.

 

 

주요 구성 파일

  • grastate.dat
    • galera cluster 의 노드가 종료될 때 생성되는 파일입니다.
    • version, uuid, seqno, sate_to_bootstrap 정보가 담겨있습니다.
    • 이 파일을 통해 cluster 구성 정보를 관리합니다.
  • galera.cache
    • galera replication 에 대한 중간 상태 정보를 저장합니다.
  • gvwstate.dat
    • Node 들에 대한 cluster 정보가 담겨있습니다.
    • 어떤 node 가 bootstrap 인지, 참여한 노드 수, 진행한 transaction 이 몇 건 인지 등입니다.

 

 

grastate.dat

grastate.dat 을 통해 replication 을 전파합니다.

즉, grastate.dat 파일이 네트워크 순단과 같은 이유로 올바르지 않다면 cluster 기동에 문제가 발생할 수 있습니다.

(grastate.dat 은 노드가 안전하게 종료되지 않는다면 기록되지 않을 수 있고, 올바르지 않은 데이터가 발생할 수 있습니다.)

 

  • version : grastate.dat 파일의 버전입니다.
  • uuid : cluster 구성을 위한 해당 노드의 uuid 입니다.
  • seqno : 해당 노드가 마지막으로 인증한(데이터를 반영한) 트랜잭션의 Global Sequence Number 를 나타냅니다. 즉, 복제를 통해 어디까지 데이터 변경을 반영했는지를 나타내는 값입니다. (실행되고 있을 때에는 -1 로 표시됩니다.)
  • safe_to_bootstrap : 이 값이 1로 설정되면, 해당 노드를 부트스트랩으로 시작할 수 있다는 것을 의미합니다.

 

가장 중요한 것은 seqno 입니다.

만약, 모든 클러스터가 정상적으로 데이터를 동기화 시켰고,

종료됐다면 모든 노드는 seqno 를 동일한 번호로 갖고 있을 것입니다.

 

하지만, 네트워크 순단이나 장애로 인해 cluster 가 종료되었다면

seqno 는 다른 노드들에 비해 낮은 값을 갖고 있을 확률이 높습니다.

 

 

 

Galera Cluster 가 정상적으로 구성되지 않을 수 있는 상황

만약, bootstrap 이 장애로 서버가 내려갔고 (이때 grastate.dat 에 정상적인 반영이 되지 않았고)

장애로 내려간 서버를 다시 bootstrap 으로 만들기 위해 모든 노드를 내린 후

bootstrap 을 galera_new_cluster 로 실행하면 실행되지 않을 가능성이 높습니다.

혹은, bootstrap 은 실행이 되어도 다른 cluster 가 구성되지 않을 확률이 높습니다.

bootstrap 은 위에서 살펴본 seqno 가 가장 높아야 하기 때문입니다. (상태 전송을 위해서!)

 

당연하게도, seqno 가 낮은 값을 갖는 bootstrap 이 선택된다면

오래된 상태 정보를 바탕으로 클러스터가 형성되어 데이터 불일치 문제가 발생할 수 있습니다.

이를 위해 Galera Cluster 는 boostrap 보다 seqno 가 높은 node는

cluster 로 구성시키지 않으면서 데이터 정합성을 지키는 것입니다.

 

따라서 만약 galera 재기동시 cluster 가 정상적으로 구성되지 않는다면,

현재 bootstrap 의 seqno 가 가장 높지 않은 node 일 수 있으므로

각 node 의 grastate.dat 을 참고하여 cluster 를 기동시켜야 할 것입니다.

 

 

 

위를 통해 Galera 구성 파일과 예시 상황에 대해 알아보았습니다.

조금이나마 도움이 되셨으면 좋겠습니다.

끝!

Comments