MariadDB galera cluster

송전영·2023년 4월 19일
0

도전과제

목록 보기
2/4

저번에 Mariadb replication을 하고 이번에는 galera cluster로 구성하는 것을 해보았다.

전에 사용했던 demo 07, demo 08의 replication 설정을 초기화 하고, 실습 진행했다.

galera

특징

  • 사실상 복제본을 싱크로 하는방식.
  • 양방향 Active-Active, 멀티 프라이머리 연결방식.
  • 어느 곳이든 읽고 쓸수 있음.
  • 자동적으로 멤버십 컨트롤, 장애 노드 클러스터에서 탈락시킴.
  • 자동적으로 노드가 멤버십에 포함됨.
  • 진짜 행 단위 레벨 에서 평행 복제함.
  • 마리아 디비 제품과 직접 호환.

장점

위와 같은 특징으로 DBMS 클러스터링에 몇가지 장점이 있다.

  • 복제할때 생기는 랙 현상이 없음
  • 트랜잭션을 놓치는 경우가 없음
  • 확장성을 보여줌
  • 작은 지연 현상

간단한 설명

먼저 이해를 돕기위해 나오는 용어에 대해서 설명하자면.

서버마다 각각의 MariaDB 서비스가 있는데 서버 마다 각각 하나 혹은 다수를 galera cluster node로 만들수 있다.

cluster node로 쓸 mariadb 하나를 정해서 클러스터를 생성하고, 생성된 클러스터의 address를 통해 clustering 멤버에 편입 시킬수 있다.

그렇게 같은 클러스터링 멤버인 각각의

galera setting

install

mariadb 10.4 이상의 최신 버전부터는 galera-4

yum install galera-4

mariadb 10.3 이하의 버전에서는 galera

yum install galera

설치 한다.

configure

/etc/my.cnf.d/server.cnf 해당 파일을 configuring 하게 된다.

demo07 configure

[galera]
# Mandatory settings
wsrep_on=ON											
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address='gcomm://'     				# 'gcomm://' 하드코딩 하지 말아야함. 이미 존재하는 클러스터에 대해서만 포함되고 싶은 클러스터 주소만 입력.
wsrep_cluster_name='cluster'						# wsrep 클러스터 이름
wsrep_node_address='192.168.203.201'				# 해당서버 ip
wsrep_node_name='garela01'							# wsrep 노드 이름
wsrep_sst_method=rsync								# SST 메서드 rsync 로 설정

binlog_format=row									# binlog  포맷 row
default_storage_engine=InnoDB						# default engine
innodb_autoinc_lock_mode=2							# 2 interleaved lock 모드

부트스트래핑(bootstraping, booting)

여기서 부트스트래핑은 우리가 흔히 알고있는 부팅과 같은 말이다.

초기설정을 시작전에 불러드리는 단계로 위의 configuring 한 것을 시작전에 적용하는 역할을 한다.

부트스트래핑을 통해서 cluster를 초기화하고, 바꾼 설정들을 통해서 새로운 클러스터를 생성한다.

--wsrep-new-cluster 옵션 을 사용하면 노드에 대해서 재시작했을때, 전에 있던 클러스터는 연결이 안되고 새로운 클러스터에 연결되게 된다.

매뉴얼 적으로는 아래 명령어를 사용하지민

mysqld --wsrep-new-cluster

systemd 명령어를 통해서 mysqld를 실행 시키는 경우도 있기에 서로 명령어가 다르다.

galera_new_cluster

Adding another node to cluster - demo08 configure

demo08

[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address='gcomm://192.168.203.201' 	# 생성한 클러스터의 ip가 demo07의 ip이므로 x.x.x.201 작성하였음
wsrep_cluster_name='cluster'						# 클러스터 demo07거랑 이름 통일
wsrep_node_address='192.168.203.202'				# 해당 demo08 ip
wsrep_node_name='galera02'							# node이름 galera02
wsrep_sst_method=rsync								# sst (상태 스냅샷 전송) rsync 모드

binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

Restarting the cluster

클러스터를 재시작 하면된다.

모든 노드를 동시에 종료시키면 효과적으로 클러스터를 없앨수 있다. 물론 클러스터 데이터는 아직 존재할 것이고, 하지만 실행중인 클러스터는 더이상 존재하지 않을것이다. 이런일이 일어났을때, 다시 클러스터에 부트스트랩을 해줘야한다.

만약 클러스터의 첫째 노드가 적당히 적당히 보통방법으로 실행됐다면, 노드는 wsrep_cluster_address 옵션 값안의 적어도 하나에는 연결하려고 할거다. 만약 아무 노드도 현재 실행되는게 없다면, 실행은 실패할 것이다.
첫째 노드를 부트스트래핑 해주면 된다.

State Snapshot Transfer(SST) 설정

SST 설정에서는, 클러스터는 한 노드에서 다른노드로 풀 데이터 카피 전송하는 것을 제공해준다. 새로운 노드가 정의 될때 SST는 데이터를 이미 클러스터 멤버에 속한 노드를 동기화 시킨다.

$ wsrep_sst_method = {method_name} #default rsync

Test

  1. demo7에 galera_test라는 database 생성 및 확인
show databases;

create database galera_test; # galera_test라는 database 생성
show databases; # 현재 database들 조회

  1. demo08도 생성되어 있는지 확인

profile
클라우드(9개월근무)퇴사, 정보컴퓨터교사 지망, 코딩트리에듀센터 학원 근무중.AI프롬프트공부중.

2개의 댓글

comment-user-thumbnail
2023년 5월 4일

혹시 참고 링크 부탁해도 될까요

답글 달기
comment-user-thumbnail
2024년 3월 10일

https://mariadb.com/kb/en/getting-started-with-mariadb-galera-cluster/
해당 문서 보고 따라했습니다 ㅎㅎㅎ

답글 달기