kjh00n의 기록저장소

MariaDB Galera Cluster 구성 본문

파이널 프로젝트

MariaDB Galera Cluster 구성

kjh00n 2025. 2. 6. 18:57
서버 OS 사용한 패키지
Galera1
(192.168.50.10)
Rocky Linux 9.3 ● mariadb-server-galera-10.5.27-1.el9_5.x86_64
● mariadb-server-10.5.27-1.el9_5.x86_64
● rsync-3.2.3-19.el9.x86_64
● galera-26.4.20-1.el9_5.x86_64
● chrony-4.5-3.el9.x86_64
Galera2
(192.168.50.20)
Rocky Linux 9.3 ● mariadb-server-10.5.27-1.el9_5.x86_64
● rsync-3.2.3-19.el9.x86_64
● chrony-4.5-3.el9.x86_64
Galera3
(192.168.50.30)
Rocky Linux 9.3 ● mariadb-server-10.5.27-1.el9_5.x86_64
● rsync-3.2.3-19.el9.x86_64
● chrony-4.5-3.el9.x86_64

1. 시간 동기화

모든 노드에 vim /etc/chrony.conf에서 server time.bora.net iburst 추가해주기 (모든 서버에 설정할 것)

모든 서버에 설정할 것
server time.bora.net iburst

systemctl enable chronyd

systemctl start chronyd

2. selinux 설정

vim /etc/sysconfig/selinux에서 추가해주기 (모든 서버에 설정할 것)

모든 서버에 설정할 것
SELINUX=enforcing

SELINUXTYPE=targeted → 얘는 주석처리 되어있으니 주석해제만 하면 된다.

(저장한 다음) setenforce 0 입력
sestatus 입력해서 Current mode가 permissive 상태여야한다.

(Galera Cluster 설정을 모두 끝내고 다시 setenforce 1 입력해주기)

3. Galera Cluster 유저 생성

모든 서버에 설정할 것
systemctl enable mariadb.service

systemctl start mariadb.service

mariadb -u root -p

CREATE USER 'gcuser'@'localhost' IDENTIFIED BY '123456';

GRANT ALL ON *.* TO 'gcuser'@'localhost';

FLUSH PRIVILEGES;

4. 방화벽 설정

모든 서버에 설정할 것
systemctl enable firewalld.service

systemctl start firewalld.service

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의 기본 포트

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

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

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

5. Galera Cluster 설정

vim /etc/my.cnf.d/mariadb-server.cnf로 가서 설정할 것 (모든 서버에)

모든 서버에 설정할 것
[galera]

wsrep_on=ON

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address=gcomm://192.168.50.10,192.168.50.20,192.168.50.30

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

wsrep_cluster_name=cluster

wsrep_node_address=192.168.50.10 (각자의 IP에 맞게 설정)

wsrep_node_name=node10 (이름도 따로 설정해줘야함)

wsrep_sst_method=rsync

wsrep_sst_auth=gcuser:123456 (3번에서 생성한 계정의 id와 pw를 입력)

6. Galera 구동

첫번째 서버만 설정할 것 (192.168.50.10)
galera_new_cluster

7. 모든 서버의 MariaDB 재시작하기

systemctl restart mariadb

8. Galera Cluster 구동 확인하기

DB에 접속해서 SHOW STATUS LIKE 'wsrep%'; 입력하면 구동상태가 출력된다

wsrep_local_state | 4 노드의 상태를 나타낸다.
일반적으로 4는 SYNCED 상태를 의미한다.
wsrep_incoming_addresses 클러스터에 노드가 연결된 IP 주소를 보여준다.
wsrep_cluster_size | 3 현재 클러스터에 참여하고 있는 노드의 수를 나타낸다.
(나는 3개의 서버를 참여시키고 있음)
wsrep_cluster_status | Primary 클러스터의 상태를 나타낸다.
정상적인 상태에서는 Primary로 표시된다.
wsrep_connected | ON 값이 ON이면 이 노드가 다른 노드들과 성공적으로 연결되어 있다는 의미
값이 OFF이면 이 노드가 다른 노드들과 연결되지 않았다는 의미
wsrep_ready | ON 값이 ON이면 Galera 노드가 정상적으로 준비되어 있다는 뜻이다.
값이 OFF이면 Galera가 제대로 작동하지 않거나 클러스터에서 연결이 끊긴 상태

9. 구현 (동기화)

● 첫번째 노드인 192.168.50.10에서 MariaDB에 접속한 모습이다.
Database를 조회한 모습

 

● 두번째 노드인 192.168.50.20에서 MariaDB에 접속한 모습이다.
 Database를 조회한 모습

● 세번째 노드인 192.168.50.30에서 MariaDB에 접속한 모습이다.
 Database를 조회한 모습

● 첫번째 노드인 192.168.50.10에서 TEST라는 이름의 Database를 생성하였다.

● 두번째 노드인 192.168.50.20에 자동으로 TEST라는 이름의 Database가 동기화 되었다.

● 세번째 노드인 192.168.50.30에 자동으로 TEST라는 이름의 Database가 동기화 되었다.

10. 구현 (Failover 가정)

● 첫번째 노드인 192.168.50.10의 MariaDB를 정지시킴

● 두번째 노드인 192.168.50.20에서 TEST2라는 이름의 Database를 생성하였음

● 세번째 노드인 192.168.50.30에서 Database를 조회한 결과 TEST2라는 이름의 Database가 동기화되었음

● 첫번째 노드인 192.168.50.10에서 MariaDB를 구동시키고 Database를 조회하면 장애가 생겨서 멈춘 노드에도 TEST2라는
이름의 Database가 동기화되었음

11. 아쉬운점

wsrep_sst_method를 rsync로 설정하였다.

rsync는 Galera Cluster에서는 일관성이 떨어지기에 mariadb-backup을 사용하고 싶었다.

하지만 mariadb-backup을 설정하면 xtrabackup 파일이 없다고 경고를 띄우면서 MariaDB가 재시작이 되지 않는다.

12. 참고

https://da-new.tistory.com/84

https://www.jaenung.net/tree/4900?srsltid=AfmBOoq6KaHaxTDBdUDNlhvzESCBlsemJWysSDF2U8oMWxc72lZIf7Pe

https://onestone-note.tistory.com/59

'파이널 프로젝트' 카테고리의 다른 글

Galera Cluster  (0) 2025.02.06