kjh00n의 기록저장소
MariaDB Galera Cluster 구성 본문
서버 | 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. 시간 동기화
모든 서버에 설정할 것 |
server time.bora.net iburst systemctl enable chronyd systemctl start chronyd |
2. 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 설정
모든 서버에 설정할 것 |
[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 구동 확인하기
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 |
---|