본문 바로가기
DATABASE/MariaDB

[MariaDB][Linux] Galera Cluster 설치 - 이중화 / HA 구성

by DANEW 2023. 7. 26.

Intro

안녕하세요.

초보 DBA 다뉴입니다.

 

오늘은 저번에 설치해본 MariaDB를 이중화하는 내용에 대해서 한번 다뤄볼까하는데요.

MariaDB를 아직 설치 못하신 분은 아래의 링크를 참고해주세요 :)

 

[MariaDB][Linux] MariaDB 설치 - Server/Client 기본 설치 방법

Intro 안녕하세요. 초보 DBA 다뉴입니다. 오늘은 CentOS7에 MariaDB를 설치하는 내용에 대해 한번 남겨볼까합니다. 실무에서 MariaDB를 사용하고 있는데요. 무료 DB이다보니 각 서비스별로 MariaDB를 세팅하

da-new.tistory.com

 

MariaDB의 이중화는 Galera Cluster로 진행합니다.

 

개념적인 내용은 나중에 따로 정리 하도록 하고,

오늘은 설치와 세팅에 대해서 한번 쭉 나열해보도록 하죠!


MariaDB Galera Cluster

1. Galera Cluster Install

이미 필요한 yum 패키지와 MariaDB 설치에 필요한 repo는 기존에 세팅이 되었다 생각하고 진행합니다.

# Galera Cluster 설치
yum install -y galera

# MariaBackup 설치
yum install -y MariaDB-backup

당연한 이야기지만 Galera Cluster 설치를 진행합니다.

 

MariaBackup은 MariaDB의 물리적 백업 유틸리티인데요.

SST(State Snapshot Transfer)의 한 방식으로 MariaBackup을 사용합니다.

SST(State Snapshot Transfer)는 상태 스냅샷 전송으로 다른 노드와 동기화 하는 방식을 말합니다.

 

Introduction to State Snapshot Transfers (SSTs)

In an SST, the cluster provisions nodes by transferring a full data copy from one node to another.

mariadb.com

2. Galera Cluster 동기화 유저 생성

mysql
> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY '[PW 설정]';
> SHOW GRANTS FOR 'sstuser'@'localhost';
> GRANT ALL ON *.* TO 'sstuser'@'localhost';
> FLUSH PRIVILEGES;

Galera Cluster 동기화에 사용될 계정을 각 노드 별로 동일하게 생성합니다.

3. 방화벽 설정

firewall-cmd --state
firewall-cmd --permanent --add-service=mysql
firewall-cmd --permanent --add-port={3306,4444,4567,4568}/tcp
firewall-cmd --permanent --add-port=4567/udp
firewall-cmd --reload
firewall-cmd --list-ports

방화벽을 설정하여줍니다.

3306 : MariaDB의 기본 포트 / 저번 MariaDB설치 때 설정하셨을 거라 생각이 드네요.

4444 : SST(State Snapshot Transfer)에 사용되는 포트 / 새 노드가 추가될 경우 동기화

4567 : Galera Cluster 복제에 사용되는 포트 /  UDP와 TCP 둘 다 사용하며, 복제 트래픽, 다중 복제에 사용

4568 : IST(Incremental State Transfer)에 사용되는 포트 / 기존 노드와 비교하여 트랜잭션 동기화에 사용

4. SELinux 허용

# SELinux 허용모드 변경
setenforce 0
sestatus

Current mode permissive 상태로 강제 변경

Galera Cluster 의 모든 설정이 완료후 다시 1로 변경할 예정입니다.

5. Galera Cluster 설정

MariaDB의 기본 설정이 들어있는 파일 들 중 server 설정 파일을 열어서 수정합니다.

기본적으로 Galera와 관련 된 설정들은 주석처리가 되어있습니다. 

해당 주석을 해제하며, 설정값을 입력합니다.

vi /etc/my.cnf.d/server.cnf

> 문서 내용 수정
-----------------------------
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address=gcomm://[갈레라 서버 IP 1],[갈레라 서버 IP 2] # 구성하는 노드 전부 입력
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
wsrep_cluster_name='[클러스터 명]'
wsrep_node_address='[현재 노드 서버 IP]'
wsrep_node_name='[현재 노드 명]'
wsrep_sst_method=mariabackup
wsrep_sst_auth='[동기화 유저 명]:[유저 비밀번호]' # 위에 생성한 sstuser id/pw

구성하는 각 노드별 해당 값을 전부 입력합니다.

6. Galera Cluster MariaDB 실행

Master가 될 1번서버에서는 아래의 명령어로 클러스터를 구성하며, 서비스를 실행합니다.

galera_new_cluster

혹시 Galera Cluster를 재실행할때 서비스가 올라오지 않을 경우 아래의 파일을 수정하여 Master를 변경하여 줍니다.

vi /data/mariadb/mysql/grastate.dat

> 문서 내용 수정
-----------------------------
safe_to_bootstap: 1

Master에서 클러스터를 구성하여 서비스를 실행하면, 나머지 노드들에서 MariaDB를 실행합니다.

systemctl start mariadb

이렇게 구성을 완료한 갈레라 클러스터는 아래의 명령어로 구동을 확인 할 수 있습니다.

mysql
> SHOW STATUS LIKE 'wsrep%';

7. SELinux 차단

# SELinux 허용모드 변경
setenforce 1
sestatus

 

setenforce 명령어를 통해 SELinux를 차단으로 바꿉니다.


Outro

이렇게 기본적인 갈레라 클러스터의 세팅이 완료되었습니다.

갈레라 클러스터는 기본적으로 3개의 노드를 가지고 구성하는것을 권장합니다.

 

하나의 데이터베이스의 문제가 발생했을 경우,

다른 2대의 데이터베이스를 확인하여 데이터의 정합성을 판단하기 위해 3대를 권장합니다.

 

또한 Galera Cluster의 여러 Node들을 Load Balancing하는 MaxScale이라는 Load Balancer가 있는데요.

데이터베이스의 읽기와 쓰기를 분산하여주는 Galera Cluster의 모듈이라고 보시면 됩니다.

 

다음 에는 MaxScale에 대한 구성으로 찾아뵙겠습니다.

 

감사합니다.

반응형