kjh00n의 기록저장소

Project A에 Galera Cluster 구축 (MariaDB) 본문

파이널 프로젝트

Project A에 Galera Cluster 구축 (MariaDB)

kjh00n 2025. 2. 19. 14:35

[기본 망] (내가 만든거 아님)

[서버 구성]

서버 OS 사용한 패키지
Galera1 (MDB)
(180.180.180.100)
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-20.el9.x86_64
● galera-26.4.20-1.el9_5.x86_64
● chrony-4.5-3.el9.x86_64
Galera2 (SDB1)
(180.180.180.200)
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-20.el9.x86_64
● galera-26.4.20-1.el9_5.x86_64
● chrony-4.5-3.el9.x86_64
Galera3 (SDB2)
(160.160.160.3)
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-20.el9.x86_64
● galera-26.4.20-1.el9_5.x86_64
● chrony-4.5-3.el9.x86_64

1. 시간 동기화 [모든 서버]

pool 2.rocky.pool.ntp.org iburst를 주석처리하기

server time.bora.net iburst를 추가하기

systemctl enable chronyd.service

systemctl start chronyd.service

몇 초 뒤에 시간이 동기화 됨

2. 방화벽 설정 [모든 서버]

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)에 사용되는 포트 / 기존 노드와 비교하여 트랜잭션 동기화에 사용

3. Galera Cluster 유저 생성 [모든 서버]

systemctl enable mariadb.service

systemctl start mariadb.service

mariadb -u root -p

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

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

FLUSH PRIVILEGES;

4. Galera Cluster 설정 [모든 서버]

[galera]

wsrep_on=ON

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

wsrep_cluster_address=gcomm://180.180.180.100,180.180.180.200,160.160.160.3

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

wsrep_cluster_name=cluster

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

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

wsrep_sst_method=rsync

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

5. Galera Cluster 구동 [첫번째 서버]

180.180.180.100에서

galera_new_cluster 입력하기

※첫번째 서버는 systemctl restart mariadb하면 안돼!!!

6. 모든 서버의 MariaDB 재시작하기 [두번째, 세번째 서버]

systemctl restart mariadb

※오류가 발생한다?
systemctl stop mariadb
systemctl start mariadb

7. Galera Cluster 구동 확인하기 [첫번째 서버]

MariaDB [(none)]> show status like 'wsrep%';
+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name                 | Value                                                                                                                                          |
+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
| wsrep_local_state_uuid        | 6d9e07ad-ee73-11ef-8f7d-1b7a446b417a                                                                                                           |
| wsrep_protocol_version        | 11                                                                                                                                             |
| wsrep_last_committed          | 16                                                                                                                                             |
| wsrep_replicated              | 0                                                                                                                                              |
| wsrep_replicated_bytes        | 0                                                                                                                                              |
| wsrep_repl_keys               | 0                                                                                                                                              |
| wsrep_repl_keys_bytes         | 0                                                                                                                                              |
| wsrep_repl_data_bytes         | 0                                                                                                                                              |
| wsrep_repl_other_bytes        | 0                                                                                                                                              |
| wsrep_received                | 22                                                                                                                                             |
| wsrep_received_bytes          | 3740                                                                                                                                           |
| wsrep_local_commits           | 0                                                                                                                                              |
| wsrep_local_cert_failures     | 0                                                                                                                                              |
| wsrep_local_replays           | 0                                                                                                                                              |
| wsrep_local_send_queue        | 0                                                                                                                                              |
| wsrep_local_send_queue_max    | 1                                                                                                                                              |
| wsrep_local_send_queue_min    | 0                                                                                                                                              |
| wsrep_local_send_queue_avg    | 0                                                                                                                                              |
| wsrep_local_recv_queue        | 0                                                                                                                                              |
| wsrep_local_recv_queue_max    | 5                                                                                                                                              |
| wsrep_local_recv_queue_min    | 0                                                                                                                                              |
| wsrep_local_recv_queue_avg    | 0.5                                                                                                                                            |
| wsrep_local_cached_downto     | 1                                                                                                                                              |
| wsrep_flow_control_paused_ns  | 0                                                                                                                                              |
| wsrep_flow_control_paused     | 0                                                                                                                                              |
| wsrep_flow_control_sent       | 0                                                                                                                                              |
| wsrep_flow_control_recv       | 0                                                                                                                                              |
| wsrep_flow_control_active     | false                                                                                                                                          |
| wsrep_flow_control_requested  | false                                                                                                                                          |
| wsrep_cert_deps_distance      | 0                                                                                                                                              |
| wsrep_apply_oooe              | 0                                                                                                                                              |
| wsrep_apply_oool              | 0                                                                                                                                              |
| wsrep_apply_window            | 0                                                                                                                                              |
| wsrep_apply_waits             | 0                                                                                                                                              |
| wsrep_commit_oooe             | 0                                                                                                                                              |
| wsrep_commit_oool             | 0                                                                                                                                              |
| wsrep_commit_window           | 0                                                                                                                                              |
| wsrep_local_state             | 4                                                                                                                                              |
| wsrep_local_state_comment     | Synced                                                                                                                                         |
| wsrep_cert_index_size         | 0                                                                                                                                              |
| wsrep_causal_reads            | 0                                                                                                                                              |
| wsrep_cert_interval           | 0                                                                                                                                              |
| wsrep_open_transactions       | 0                                                                                                                                              |
| wsrep_open_connections        | 0                                                                                                                                              |
| wsrep_incoming_addresses      | 180.180.180.100:0,180.180.180.200:0,160.160.160.3:0                                                                                            |
| wsrep_cluster_weight          | 3                                                                                                                                              |
| wsrep_desync_count            | 0                                                                                                                                              |
| wsrep_evs_delayed             |                                                                                                                                                |
| wsrep_evs_evict_list          |                                                                                                                                                |
| wsrep_evs_repl_latency        | 0/0/0/0/0                                                                                                                                      |
| wsrep_evs_state               | OPERATIONAL                                                                                                                                    |
| wsrep_gcomm_uuid              | 8593aaf0-ee73-11ef-abbc-77f31dbec2ed                                                                                                           |
| wsrep_gmcast_segment          | 0                                                                                                                                              |
| wsrep_applier_thread_count    | 1                                                                                                                                              |
| wsrep_cluster_capabilities    |                                                                                                                                                |
| wsrep_cluster_conf_id         | 15                                                                                                                                             |
| wsrep_cluster_size            | 3                                                                                                                                              |
| wsrep_cluster_state_uuid      | 6d9e07ad-ee73-11ef-8f7d-1b7a446b417a                                                                                                           |
| wsrep_cluster_status          | Primary                                                                                                                                        |
| wsrep_connected               | ON                                                                                                                                             |
| wsrep_local_bf_aborts         | 0                                                                                                                                              |
| wsrep_local_index             | 0                                                                                                                                              |
| wsrep_provider_capabilities   | :MULTI_MASTER:CERTIFICATION:PARALLEL_APPLYING:TRX_REPLAY:ISOLATION:PAUSE:CAUSAL_READS:INCREMENTAL_WRITESET:UNORDERED:PREORDERED:STREAMING:NBO: |
| wsrep_provider_name           | Galera                                                                                                                                         |
| wsrep_provider_vendor         | Codership Oy <info@codership.com>                                                                                                              |
| wsrep_provider_version        | 26.4.20(rXXXX)                                                                                                                                 |
| wsrep_ready                   | ON                                                                                                                                             |
| wsrep_rollbacker_thread_count | 1                                                                                                                                              |
| wsrep_thread_count            | 2                                                                                                                                              |
+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------+
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가 제대로 작동하지 않거나 클러스터에서 연결이 끊긴 상태

8. 구현 (동기화)

180.180.180.100에서 'clear'라는 Database 생성

180.180.180.200과 160.160.160.3에서도 'clear'라는 Database가 생성되었음 (동기화)

[통신 과정]

1. 클러스터 노드 연결

신규 노드가 기존 노드들에게 SYN / SYN,ACK / ACK를 통해 3Way-Handshake를 맺음 (4567 Port 사용)

 

2. 노드 간 상태 동기화

기존 노드들이 신규 노드에게 자신들의 클러스터 상태 정보를 강제 전송 (PSH) / 신규 노드는 그에 응답함 (ACK)

(4567 Port 사용)

 

3. 트랜잭션 수행 및 복제

각 노드들이 다른 노드들에게 WriteSet을 생성하여 전송함 (PSH는 강제전송, ACK는 응답) (4567 Port 사용)

1.트랜잭션은 데이터베이스에서 한 묶음으로 처리되는 논리적인 작업 단위

2.클러스터는 여러 개의 데이터베이스 서버를 하나처럼 운영하는 기술

3.WriteSet(WSREP WriteSet)은 Galera Cluster에서 트랜잭션을 복제하는 핵심 데이터 단위

Galera는 노드 간 데이터를 동기화할 때 일반적인 SQL 쿼리(INSERT, UPDATE, DELETE)를 직접 실행하는 것이 아니라
해당 트랜잭션의 변경 사항을 WriteSet이라는 구조로 만들어 모든 노드에 전송함

4. SST (State Snapshot Transfer)

SST(State Snapshot Transfer)는 클러스터에 새롭게 참여하는 노드가 기존 노드에서 전체 데이터를 동기화하는 과정

각 노드 간 rsync 연결 설정 (3way-handshake)  (4444 Port 사용)

각 노드들이 다른 노드들에게 자신의 전체 데이터를 전송함 (PSH는 강제전송, ACK는 응답)  (4444 Port 사용)

 

5. IST (Incremental State Transfer)

IST(Incremental State Transfer)는 클러스터에 재연결하는 노드가 최신 트랜잭션 로그만 복구 (4568 Port 사용)