MariaDB Galera Cluster 구성기(2)

2025. 6. 22. 16:59·Database

저번 포스팅에 이어 본격적으로 Galera Cluster를 구성해보자.

 

Galera Cluster 생성

0. 사전 과정(모든 노드에 실행) - 선택

만약 나처럼 전 포스팅 과정들을 거친 후 갈레라 클러스터를 바로 구성하면 MariaDB가 중복 실행 되어 스토리지 락 문제가 발생되어 갈레라 클러스터가 정상적으로 구성되지 않는다. 

따라서, 갈레라 클러스터를 구성해주기 전에 안전하게 미리 다음 내용들을 확인해주자.

 

먼저 기존 MariaDB 프로세스가 떠있는지 확인해준다.

ps aux | grep mariadbd
ps aux | grep mysqld
ps aux | grep galera

위와 같이 했을 때 나오는 해당 프로세스들을 kill -9 [PID] 명령어를 통해 종료시켜준다.

 

그리고 아래 명령어를 통해 남아있는 락 파일을 제거해준다.

sudo rm -f /var/lib/mysql/aria_log_control
sudo rm -f /var/lib/mysql/ibdata1.lock
cf. 락파일이란?
특정 리소스를 한 번에 하나의 프로세스만 사용하도록 제한하기 위한 잠금 장치다. MariaDB나 Galera 클러스터에서 락 파일은 주로 중복 실행 방지와 데이터 무결성 유지를 위해 사용된다.

 

또한 기존에 혹시라도 Galera Cluster를 구성한 적이 있다면 갈레라 클러스터 관련된 캐시들을 다음 명령어를 통해 삭제해준다. 만약 Glaera Cluster 구성 중 오류가 발생하여 다시 클러스터를 재구성하는 경우에도 아래 명령어들을 통해 캐시를 삭제해주고 재구성해주는 것이 오류가 발생하지 않는다. 

 

# 상태 파일 및 캐시 삭제

sudo rm -f /var/lib/mysql/grastate.dat
sudo rm -rf /var/lib/mysql/galera.cache
sudo rm -rf /var/lib/mysql/gvwstate.dat

  

 

1. 첫번째 노드(galera_node1) 클러스터 부트스트랩

첫 번째 노드인 galera_node1 컨테이너에서 --wsrep-new-cluster 옵션을 사용하여 MariaDB를 시작한다. 참고로, 나는 지금 컨테이너 환경에서 galera cluster를 구성 중이므로 명령어가 상이할 수 있지만, 일반적인 서버 상황에서의 명령어들은 MariaDB 공식 홈페이지에 나와 있으므로 해당 사이트에서 확인하면 된다. (컨테이너 환경이 systemctl 명령어도 안먹히고 은근 일반 서버에 리눅스 올려서 사용하는 것과는 다른 부분들이 있다..)

 

아래 명령어를 통해 새로운 galera cluster를 구성해준다.

# galera_node1 내부에서 실행
mysqld --wsrep-new-cluster --user=mysql > /var/log/mysql.log 2>&1 &

 

  • --wsrep-new-cluster: 최초 클러스터 시작 플래그
  • --user=mysql: mysqld 프로세스를 mysql 사용자 권한으로 실행
  • > /var/log/mysql.log 2>&1: 출력과 에러 로그를 /var/log/mysql.log에 저장
  • &: 백그라운드 실행
cf. --user 옵션을 root로 설정하면 오류가 발생하므로 mysql로 설정해준다.

 

명령어를 실행한 후에는 ps -ef | grep mysqld 명령어를 통해 MariaDB 서비스가 잘 올라왔는지 확인해주자. 

 

 

2. 두번째(galera_node2), 세번째 노드(galera_node3) 갈레라 클러스터 조인

마찬가지로 아래 명령어를 통해 1번에서 생성한 갈레라 클러스터에 galera_node2, galera_node3를 조인해준다.

# galera_node2, galera_node3에서 실행
mysqld --user=mysql > /var/log/mysql.log 2>&1 &

 

명령어 실행 후에는 아래와 같이 정상적으로 서비스가 실행되고 있는지 확인해준다.

galera_node2
galera_node3

 

 

Galera Cluster 구성 확인

위 과정들을 통해 Galera Cluster를 구성했으면 다음 명령어를 통해 정상적으로 구성이 됐는지 확인해준다.

# 모든 노드에서 실행

mysql -u root -p

SHOW STATUS WHERE Variable_name IN (
  'wsrep_cluster_status',
  'wsrep_cluster_size',
  'wsrep_local_state_comment',
  'wsrep_ready'
);

 

모든 컨테이너에서 다음과 같이 확인되면 정상적으로 구성 된 것이다. 

galera_node1, galera_node2, galera_node3

 

 

Galera Cluster 상세 정보 확인

Galera Cluster에 대한 상세 정보는 MariaDB에 접속한 후 SHOW STATUS LIKE 'wsrep%'; 명령어를 통해 확인할 수 있다.

해당 명령어를 통해 출력되는 정보들에 대해 다음과 같이 간단히 정리해보았다.

클러스터 전반 정보

항목 설명
wsrep_cluster_status 클러스터 전체의 상태 (Primary면 정상)
wsrep_cluster_size 클러스터에 참여 중인 노드 수
wsrep_cluster_state_uuid 클러스터 UUID (모든 노드가 같아야 정상)
wsrep_cluster_conf_id 클러스터 구성 변경 횟수 (노드 추가/이탈 등)
wsrep_incoming_addresses 연결된 노드들의 IP 목록 (AUTO로 뜨면 내부 DNS 해석 실패일 수 있음)
wsrep_connected 클러스터와 연결됨 (ON이면 정상)
wsrep_ready 노드가 클러스터에 참여해서 쿼리를 처리할 준비 완료 상태
 

 

현재 노드 상태 정보

항목 설명
wsrep_local_state 숫자 상태 코드 (4 = Synced)
wsrep_local_state_comment 현재 노드의 상태 (Synced면 정상)
wsrep_local_commits 이 노드에서 커밋된 트랜잭션 수
wsrep_local_cert_failures 인증 실패 수 (충돌 난 트랜잭션 수, 많으면 문제)
wsrep_local_bf_aborts 백업 중단된 트랜잭션 수 (동시 쓰기 충돌로 인한 abort)
 

클러스터 통신 및 흐름 제어

항목 설명
wsrep_received 다른 노드로부터 수신한 트랜잭션 수
wsrep_replicated 이 노드에서 다른 노드로 전파한 트랜잭션 수
wsrep_local_send_queue, recv_queue 내부 메시지 큐 상태 (0이면 양호)
wsrep_flow_control_active 흐름 제어 활성 여부 (false면 OK)
wsrep_flow_control_paused 클러스터가 멈춘 시간 비율 (0에 가까울수록 좋음)
 

동작 특성 및 기능

설명 설명
wsrep_provider_name 사용 중인 Galera 엔진 (Galera)
wsrep_provider_version Galera 라이브러리 버전
wsrep_protocol_version 클러스터 프로토콜 버전
wsrep_provider_capabilities Galera가 지원하는 기능들 (MULTI_MASTER, CAUSAL_READ, PARALLEL_APPLYING, STREAMING 등)
wsrep_applier_thread_count, rollbacker_thread_count 트랜잭션 적용용 쓰레드 수
 

상태 확인 시 주로 보는 핵심 항목 10개

변수 의미 정상값
wsrep_cluster_status 클러스터 상태 Primary
wsrep_cluster_size 노드 수 기대 노드 수 (ex. 3)
wsrep_local_state_comment 현재 노드 상태 Synced
wsrep_ready 쿼리 처리 가능 여부 ON
wsrep_connected 클러스터 연결 상태 ON
wsrep_local_cert_failures 충돌 횟수 0이면 이상적
wsrep_local_bf_aborts 트랜잭션 충돌로 인한 abort 수 0이면 좋음
wsrep_replicated 전파된 트랜잭션 수 증가 중이면 OK
wsrep_received 수신 트랜잭션 수 증가 중이면 OK
wsrep_flow_control_active 흐름 제어 여부 false

 

Galera Cluster 테스트 

클러스터의 컨테이너들 간의 데이터 동기화가 정상적으로 이루어지는지 galera_node1의 MariaDB에 테스트 데이터를 넣어보고 galera_node2 MariaDB에서 테스트 데이터가 존재하는지 확인해본다. 또한 galera_node3에서 넣은 데이터가 galera_node1에서도 잘 보이는지도 확인해보자.

 

1. galera_node1 MariaDB에서 데이터베이스와 테이블을 생성한다.

# galera_node1 MariaDB에서 실행
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!');
galra_node1

 

2. galera_node2에서 MariaDB에 연결하고 테스트 데이터베이스와 테이블을 확인한다.

# galera_node2 MariaDB에서 실행
SHOW DATABASES;
USE test_db;
SELECT * FROM messages;
galera_node2

 

3. galera_node3에서 MariaDB를 연결하고 데이터를 삽입해준다.

# galera_node3 MariaDB에서 실행
INSERT INTO messages (text) VALUES ('Hello from node3!');
galera_node3

 

4. galera_node1 MariaDB에서 3번에서 넣은 데이터를 확인해본다.

# galera_node1 MariaDB에서 실행
USE test_db;
SELECT * FROM messages;

 

galera_node1

 

위의 과정들을 통해 galera_node1, galera_node2, galera_node3의 MariaDB 간의 데이터 동기화가 잘 되고 있는 것을 확인할 수 있다.

 

 

드디어 Galera Cluster 구성 자체는 끝이 났다. 이제는 이 Galera Cluster를 어떻게 활용해야 고가용성을 구현하고 실제 운영 환경에서 어떻게 운용해야 할지에 대해 고민을 해봐야 한다. 다음 포스팅에서는 이번에 구축한 Galera Cluster를 통해 어떻게 고가용성을 실현시키고 실제 운용은 어떻게 할 수 있을지에 대해 얘기를 나눠보도록 하자.

'Database' 카테고리의 다른 글
  • mysqldump VS mariabackup 비교 -1
  • MariaDB Galera Cluster 구성기(1)
  • MariaDB Galera Cluster?
SummerToday
SummerToday
summertoday 님의 블로그 입니다.
  • SummerToday
    SummerToday
    SummerToday
  • 전체
    오늘
    어제
  • 인기 글

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 관리자
    • 분류 전체보기 (62)
      • OS & Network (4)
      • Cloud (11)
      • Container & DevOps (41)
      • Database (4)
      • Develop (0)
      • IaC (2)
  • 태그

    AmazonSNS
    CloudWatch
    Grafana
    s2s vpn
    gitops
    argocd
    openebs
    Eni
    container
    EIP
    Galera Cluster
    tailscale
    점프 계정
    계정 관리
    Kubernetes
    aws
    MariaDB
    K8S
    cloud
    CI/CD
  • hELLO· Designed By정상우.v4.10.3
SummerToday
MariaDB Galera Cluster 구성기(2)
상단으로

티스토리툴바