[컴][db] MariaDB Galera cluster 설정

마리아db 마리아디비 / 클러스터링 / 클러스터 방법

MariaDB Galera cluster 설정

절차

  1. MariaDB Galera 설치
  2. MariaDB Galera Cluster 설정

MariaDB Galera Cluster 설정

1번째 node 는 --wsrep-new-cluster 으로 실행해야 한다. 그 이후 cluster 에 attach 하는 node 는 --wsrep-new-cluster 옵션을 빼야 한다. --wsrep-new-cluster 을 붙이면 cluster 가 사용할 cluster UUID 를 만들기 때문에 기존의 cluster로 접속이 안된다.(다른 참고: Starting the Cluster — Galera Cluster Documentation)

만약 전체가 다 내려간 후 다시 clustering 을 시작할때도 1번째 node가 cluster 를 만들고, 그 cluster에 node를 붙이는 방식으로 해야 한다.

mysqld --wsrep-new-cluster

기존의 cluster 에 node 를 추가할 때

option file 에 아래처럼 추가하면 된다.

[mariadb]
...
wsrep_cluster_address=gcomm://192.168.0.1  # DNS names work as well, IP is preferred for performance

가장 최신 node 를 찾는데 도움이 되는 option

경우에 따라 Galera가 클러스터에서 가장 최신의 node(most advanced node)가 아닐 수 있다는 것을 감지하면 노드 bootstrap을 거부할 수 있다. Galera는 노드가 클러스터에서 마지막으로 종료된 노드가 아닌지 또는 노드가 충돌했는지 여부를 확인한다. 이러한 경우에는 수동 개입이 필요하다.

어떤 노드가 가장 높은 level인지 확실히 알고 있다면 datadir에서 grastate.dat 파일을 편집할 수 있다. 가장 최신의 node(most advanced node)에서 safe_to_bootstrap=1을 설정할 수 있다.

각 노드에서 grastate.dat을 확인하고 seqno가 가장 높은 노드를 찾아 어떤 노드가 가장 높은 level인지 확인할 수 있다. 노드가 충돌하고 seqno=-1인 경우, wsrep_recover 옵션을 사용하여 각 노드에서 seqno를 복구하여 가장 최신의 node(most advanced node)를 찾을 수 있다.

mysqld --wsrep_recover

모든 node 가 죽은 경우, 다시 bootstrap 을 할 node 를 선택할 때 어떤 노드로 시작하느냐.

The Safe-To-Bootstrap Feature — Galera Cluster Documentation → Selecting the Right Node 내용 정리

  • 순서대로 shutdown 된 경우
    • 각 노드의 grastate.dat 를 확인해서, safe_to_bootstrap: 1 인 node 를 택해서 bootstrap 을 진행한다.
  • hard crash
    • 모든 노드가 safe_to_bootstrap: 0 가 된다.
    • 클러스터에서 마지막 트랜잭션을 commit한 노드를 찾아야 한다. 이것은 mysqld --wsrep-recover 를 통해서 찾을 수 있다. 아래처럼 log 가 만들어진다. 여기서 ‘Recovered position’ 에 <UUID>:<seq_no> 가 적혀있는데, 이 때 seq_no 가 가장 큰 node 를 찾는다.
    • 그리고 그 node 의 grstate.datsafe_to_bootstrap1로 변경해서 bootstrap 을 진행한다.
    2016-11-18 01:42:15 36311 [Note] InnoDB: Database was not shutdown normally!
    2016-11-18 01:42:15 36311 [Note] InnoDB: Starting crash recovery.
    ...
    2016-11-18 01:42:16 36311 [Note] WSREP: Recovered position: 37bb872a-ad73-11e6-819f-f3b71d9c5ada:345628

모니터링(monitoring)

SHOW GLOBAL STATUS LIKE 'wsrep_%';

Clustering 사용전 알아두면 좋은 사항

swap size 요구사항

정상 작동 중에 MariaDB Galera 노드는 일반 MariaDB 서버보다 훨씬 많은 메모리를 사용하지 않는다. certification index 및 uncommitted writesets에는 추가 메모리가 사용되지만 일반적으로 일반적인 응용 프로그램에서는 이러한 메모리가 눈에 띄지 않습니다. 그러나 한 가지 예외가 있습니다.

  • 상태 전송 중 Writeset caching : 노드가 state transfer 을 수신하는 경우 아직 적용할 state가 없기 때문에 수신한 writesets을 처리하고 적용할 수 없습니다. state transfer 메커니즘(예: mysqldump)에 따라 state transfer을 전송하는 노드도 writesets를 적용하지 못할 수 있습니다. 따라서 이러한 writesets를 caching하여 후속 단계를 수행해야 한다. 현재 writesets는 메모리에 캐시되며, 만약 시스템이 메모리를 다 쓰면 2가지 경우로 처리된다. state transfer이 실패하거나, 클러스터가 state transfer이 끝나기를 기다리는 것을 block한다.

writeset cache에 대한 메모리 사용량을 제어하려면 Galera parameters(gcs.recv_q_hard_limit, gcs.recv_q_soft_limit 및 gcs.max_throttle)를 확인하자.

MariaDB Galera Cluster 의 한계

See Also

  1. 쿠…sal: [컴][db] Galera Replication

Reference

  1. Getting Started with MariaDB Galera Cluster - MariaDB Knowledge Base

댓글 없음:

댓글 쓰기