MariaDB Galera Cluster는 MariaDB를 위한 멀티 프라이머리(Active-Active) 클러스터 솔루션을 제공하여 고가용성, 읽기/쓰기 확장성 및 진정한 동기식 복제를 지원합니다. 즉, 모든 노드에서 읽기 및 쓰기 작업을 처리할 수 있으며, 변경 사항은 다른 모든 노드에 즉시 복제되어 복제 지연이나 트랜잭션 손실이 발생하지 않습니다. 이 솔루션은 Linux에서만 사용할 수 있습니다. 저는 Rocky Linux 9.6 을 이용하였습니다.

1. 준비 사항
모든 노드에서 다음과 같은 설정을 진행합니다.
- 최소 3개의 Node: 시스템 중복성을 확보하고 스플릿 브레인 현상을 방지하기 위해 (베어메탈 또는 가상 머신).
- Linux OS: 호환되는 Debian 기반(예: Ubuntu, Debian) 또는 RHEL 기반(예: CentOS, Fedora) 배포판.
- 동기화 Clocks: 모든 노드는 시간 동기화를 위해 NTP가 구성되어 있어야 합니다.
- SSH 접근 권한: 설치 및 구성을 위해 모든 노드에 대한 루트 또는 sudo 접근 권한이 필요합니다.
- 네트워크 연결성: 모든 노드는 특정 포트를 통해 서로 통신할 수 있어야 합니다(방화벽 섹션 참조). 노드 간 지연 시간이 짧을수록 이상적입니다.
1.1 IP 설정
~# nmtui
1.2 hostname 설정
~# hostnamectl set-hostname node1
~# vi /etc/hosts
...
192.168.122.11 node1
192.168.122.12 node2
192.168.122.13 node3
1.3 패키지 최신화
~# dnf update
1.4 rsync 설치
스냅샷 전송(SST) 에 사용되는 패키지을 설치합니다.
~# dnf install rsync
2. Mariadb & Galera 설치
2.1 repo 추가
기본 패키지로 설치 시, galera_new_cluster 가 없어 설치가 힘듭니다. 우회 방법을 사용하였으나 실패하였으니 참고하시면 좋으실 것 같습니다.
~# curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash
~# dnf makecache
2.2 Mariadb 설치
mariadb-server 설치하면 나머지 패키지도 설치 됩니다.
~# dnf install mariadb-server
~# dnf install mariadb-client
~# dnf install galera-4
2.3 mariadb secure 설정. (설치 환경에 맞게 변경)
~# systemctl start mariadb.service
~# mariadb-secure-installation
- root 패스워드 변경
- remove anonymous user : Y
- disallow root login remotely : Y
- remove test database and access to it : Y
- reload privilege tables now : Y
2.4 firewall & selinux 설정
~# firewall-cmd --permanent --add-port=3306/tcp
~# firewall-cmd --permanent --add-port=4567/tcp
~# firewall-cmd --permanent --add-port=4567/udp
~# firewall-cmd --permanent --add-port=4568/tcp
~# firewall-cmd --permanent --add-port=4444/tcp
~# firewall-cmd --reload
~# firewall-cmd --lilst-all
- MariaDB client connections (3306)
- Galera replication (multicast and unicast) (4567)
- Incremental State Transfer (IST) (4568)
- State Snapshot Transfer (SST) (4444)
selinux 설정은 환경에 맞추어 변경합니다. (테스트를 위해 selinux off)
~# setenforce 0
2.5. galera 설정
"wsrep_cluster_address" 에 모든 Node을 추가하며, 각각의 Node 에 맞추어 "wsrep_node_name" 및 "wsrep_node_address" 설정합니다. 또한 "wsrep_cluster_name" 도 프로젝트 이름으로 변경합니다.
~# vi /etc/my.cnf.d/galera.cnf
[mysqld]
# Basic MariaDB settings
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0 # Binds to all network interfaces. Adjust if you have a specific private IP for cluster traffic.
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so # Adjust path if different (e.g., /usr/lib64/galera-4/libgalera_smm.so)
# Galera Cluster Configuration
wsrep_cluster_name="my_galera_cluster" # A unique name for your cluster
# IP addresses of ALL nodes in the cluster, comma-separated.
# Use private IPs if available for cluster communication.
wsrep_cluster_address="gcomm://192.168.122.11,192.168.122.12,192.168.122.13"
# This node's specific configuration
wsrep_node_name="node1" # Must be unique for each node (e.g., node1, node2, node3)
wsrep_node_address="192.168.122.11" # This node's own IP address
2.6 Mariadb 중단
~# systemctl stop mariadb
2.7 galera cluster 구축
메인 노드에서만 진행 합니다. 저는 "Node1" 번에서 진행하였습니다.
~# galera_new_cluster
2.8 Mariadb 재시작
~# systemctl start mariadb
3. 테스트
3.1 클러스터 구축 확인
구축된 Node수와 동일한 수로 출력되는 지 확인한다. cluster로 묶인 node 수로 확인할 수 있다.
~# mariadb -u root -p
Mariadb [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
3.2 Database 추가 테스트
- Node 1
> CREATE DATABASE test_db;
> USE test_db;
> CREATE TABLE messages (id INT AUTO_INCREMENT PRIMARY KEY, text VARCHAR(255));
> INSERT INTO messages (text) VALUES ('Hello from node1!');
- Node 2
> SHOW DATABASES;
> USE test_db;
> SELECT * FROM messages;
- Node 3
> INSERT INTO messages (text) VALUES ('Hello from node2!');
- Node 1
> SELECT * FROM messages;
모든 Node 에서 Active-Active 로 동작하는 것을 확인하였습니다. 데이터 베이스 운영에 있어서 꼭 필요한 Active-Active 설치 방법이였습니다.
Ref: MariaDB Galera Cluster Guide
'Linux & Development' 카테고리의 다른 글
| Mariadb 이중화 설정 (Master / Slave) (0) | 2026.02.18 |
|---|---|
| WireGuard VPN 설정하기 (Ubunut24.04) (0) | 2025.12.31 |
| nodejs version 업그레이드 (1) | 2024.06.15 |
| Linux chrony client 설정 (0) | 2024.04.18 |
| git pull error 해결 방법 (0) | 2024.04.15 |