[MariaDB] Glaera Cluster - 설치방법

■ Galera Cluster 설치 환경

1. MariaDB 10.4 버전

2. Galera Cluster 4버전

3. CentOS 7버전

 

방화벽 용도 파라미터 설명

▶︎ 방화벽 오픈 필요 포트 용도

3306 : mysqldump 메서드를 사용하는 MariaDB 클라이언트 연결 상태 스냅샷 전송에 사용. MariaDB 접속 기본포트

4567 : Galera 클러스터 복제 트래픽 포트입니다. 멀티 캐스트 복제는 포트에서 UDP 전송과 TCP 모두 사용합니다.

4568 : 증분 상태 전송 (IST : Incremental State Transfers) 경우 클러스터의 다른 노드에서 누락된 상태를 수신하는 프로세스입니다.

4444 : 다른 모든 상태 스냅샷 전송 (SST) 경우 참가(joiner) 노드가 도너 노드에서 상태와 데이터를 가져올때 사용하는 포트입니다.

 

▶︎ Glera cluster 파리미터 설명

wsrep_provider : 갈레라 클러스터의 라이브러리를 입력하는 파라미터입니다. 경로와 파일명을 전체 경로로 입력합니다.

wsrep_cluster_name : 클러스터 이름을 입력합니다.

wsrep_cluster_address : Galera cluster 참가하는 ip리스트를 입력합니다.

wsrep_node_name : 노드의 이름입니다. 노드마다 달라야 합니다. 보통 호스트 이름으로 지정합니다.

wsrep_node_address : 노드의 IP주소입니다. 자신의 IP주소를 입력합니다.

wsrep_sst_method : galera cluster에서 동기화 방법을 나타냅니다. 대표적으로 rsync mariabackukp 있습니다.

wsrep_sst_auth : 클러스터 동기화 계정입니다.

 

■ OS 환경 설정 방화벽 설정

▶︎ 설치 서버 환경

 

Server 1

Server 2

Server 3

hostname

galera01

galera02

galera03

IP

10.30.224.100

10.30.224.101

10.30.224.102

OS

CentOS 7

CentOS 7

CentOS 7

 

▶︎ 방화벽 설정

shell> firewall-cmd --state  (방화벽이 실행되지 않았을 경우 systemctl start firewalld 입력)
running
shell> firewall-cmd --permanent --add-service=mysql
success
shell> firewall-cmd --permanent --add-port={3306,4567,4568,4444}/tcp
success
shell> firewall-cmd --permanent --add-port=4567/udp
success
shell> firewall-cmd --reload
success
shell> firewall-cmd --list-ports
3306/tcp 4567/tcp 4568/tcp 4444/tcp

 

■ MariaDB Engine 설치

마리아 DB 10.4 버전의 Galera Cluster 26.4.0 버전(Galera 4버전) 설치하는것으로 합니다.

먼저 CentOS 설치하면 기본적으로 설치되는 MariaDB 프로그램이 있습니다. 이것을 깨끗하게 삭제합니다.

 

▶︎ 기존 MariaDB 버전 확인

shell> rpm -qa | grep -i mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64

 

이외 mariadb 시작하는 패키지가 있다면 삭제합니다.

shell> yum remove mariadb-libs-5.5.60-1.el7_5.x86_64

 

▶︎ 엔진 설치 환경설정.

• Repository 환경 설정

shell> curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash

 

• mariadb repository 수정.

shell> vi /etc/yum.repos.d/mariadb.repo

[mariadb-main]
name = MariaDB Server
baseurl = https://downloads.mariadb.com/MariaDB/mariadb-10.5/yum/rhel/7/x86_64 <- 밑의 내용으로 수정
gpgkey = file:///etc/pki/rpm-gpg/MariaDB-Server-GPG-KEY
gpgcheck = 1
enabled = 1

 

mariadb 4 수정

baseurl = https://downloads.mariadb.com/MariaDB/mariadb-10.4/yum/rhel/7/x86_64

 

 

모든 repo 대한 캐시 빌드 업데이트

shell> yum makecache fast
shell> yum update

 

• MariaDB Galera 설치

shell> yum install MariaDB-backup MariaDB-client MariaDB-common MariaDB-devel MariaDB-server

 

설치 테스트 실행.

shell> systemctl start mariadb

shell> mysql -uroot
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.001 sec)

MariaDB [(none)]> quit;

 

암호 변경

shell> mysqladmin -uroot password 'admin1234'

 

클러스터 노드 복제용 계정 생성.

MariaDB [(none)]> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'admin1234';
MariaDB [(none)]> GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;

 

서버 셧다운

shell> systemctl stop mariadb

 

 

 

■ Glaera Cluster 환경 설정 수행

Glera Cluster는  서버 Node시작시 노드간 데이터를 복제하여 동기화 시킵니다. 여기에서 동기화를 시키는 방법은 대표적으로 2가지가 있습니다.

OS레벨에서 지원하는 Rsync방법과 MariaDB 서버에서 제공하는 mariabackup,  mysqldump 방법, 총 3가지 입니다.

Rsync보다는 Backup방식이 더 빠른것으로 평가되고 있습니다. 백업 방식으로 데이터를 동기화 시키려면 몇가지 추가적으로 환경설정이 필요합니다.

여기에서는 백업방식으로 하는 방법을 알아봅니다.

 

▶︎ Galera cluster library file 찾기

shell> find / -name libgalera_smm.so

/usr/lib64/galera-4/libgalera_smm.so

 

▶︎ MariaDB 서버 환경설정 - 1,2,3 노드 모두

shell> vi /etc/my.cnf
[galera]
wsrep_on=ON
# 위에서 찾은 galera library 경로 입력
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
# 서버 IP를 순서대로 입력
wsrep_cluster_address=gcomm://10.30.224.100,10.30.224.101,10.30.224.102
#클러스터 이름 설정. 모든 노드에 같은 이름으로 설정.
wsrep_cluster_name="mycluster"
wsrep_sst_method=mariabackup
#스냅샷 복제 유저. user명:암호 형식으로 입력
wsrep_sst_auth="sstuser:admin1234"
# 각 노드마다 다른 이름으로 입력. 통상 호스트 네임으로 입력.
wsrep_node_name="node1"
wsrep_node_address="10.30.224.100"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0

 

▶︎ selinux 허용 모드 설정

Current mode permissive 상태여야 합니다.

아래 명령어를 수행하지 않으면 Galera Cluster 실행시 오류가 납니다. 모든 노드에서 수행합니다.

수행전

shell> sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing <-- 이부분이
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

 

수행후

shell> setenforce 0
shell> sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive <-- 이렇게 바뀌어야 합니다.
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

 

 

오류 내용 참고:

shell> systemctl start mariadb.service
Warning: mariadb.service changed on disk. Run 'systemctl daemon-reload' to reload units.
Job for mariadb.service failed because a fatal signal was delivered to the control process. See "systemctl status mariadb.service" and "journalctl -xe" for details.
[root@galera02 mysql]# systemctl status mariadb.service
● mariadb.service - MariaDB 10.4.17 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf, tokudb.conf
   Active: activating (start-pre) since Sun 2021-02-21 01:02:26 KST; 1s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 7376 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=killed, signal=ABRT)
  Process: 7396 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
 Main PID: 7376 (code=killed, signal=ABRT);         : 7398 (sh)
   CGroup: /system.slice/mariadb.service
           └─control
             ├─7398 /bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1
             ├─7400 /bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1
             ├─7401 /bin/sh /usr/bin/galera_recovery
             └─7429 /usr/sbin/mysqld --user=mysql --wsrep_recover --disable-log-error

Feb 21 01:02:26 galera02 systemd[1]: Starting MariaDB 10.4.17 database server...

 

▶︎ Galera Cluster 실행

1 노드에서 실행. 아래 명령어는 반드시 1 노드에서만 수행해야

아래 galera_new_cluster 스크립트는 서버 시작 명령까지 같이 포함됨

shell> galera_new_cluster

 

나머지 노드들(Node 2, Node 3) 다음의 명령어로 MariaDB 서버 실행

shell> systemctl start mariadb

 

 

▶︎ galera cluster 상태 확인.

MariaDB [(none)]> show variables like '%wsrep_cluster%';
+-----------------------+---------------------------------------------------+
| Variable_name         | Value                                             |
+-----------------------+---------------------------------------------------+
| wsrep_cluster_address | gcomm://10.30.224.100,10.30.224.101,10.30.224.102 |
| wsrep_cluster_name    | my_wsrep_cluster                                  |
+-----------------------+---------------------------------------------------+
2 rows in set (0.001 sec)

MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
1 row in set (0.001 sec)

 

▶︎ selinux 원복

shell> setenforce 1

 

▶︎ 서버 종료 방법

모든 노드에서 다음과 같은 명령어를 입력합니다.

shell> systemctl stop mariadb

 

■ Glaera Cluster 재시작 혹은 복구 순서

모든 노드의 데이터 디렉토리를 확인해보면 다음과 같은 파일이 있습니다.

여기의 데이터 디렉토리는 /var/lib/mysql 입니다.

shell> ls /var/lib/mysql/grastate.dat

 

파일을 열어보면 다음과 같은 속성이 있습니다.

shell> vi /var/lib/mysql/grastate.dat
# GALERA saved state
version: 2.1
uuid:    9e4a3dcb-7393-11eb-a1af-821236b3a947
seqno:   273
safe_to_bootstrap: 1

 

여기안에 속성들중 safe_to_bootstrap 1인곳은 노드들중 한곳이며 나머지는 0입니다.

safe_to_bootstrap 1 곳에서 처음 Galera cluster 설정했던 명령어를 입력합니다.

shell> galera_new_cluster

 

그리고 나머지 노드들도 노드들을 실행합니다.

shell> systemctl start mariadb

 

클러스터 노드수를 확인합니다.

MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
1 row in set (0.001 sec)

 

 

참고 URL

엔진 버전별 갈레라 버전 확인

https://mariadb.com/kb/en/meta/galera-versions/

 

Configuring Nodes for Write-Set Replication(멀티 마스터 복제 노드 설정 방법)

https://www.percona.com/doc/percona-xtradb-cluster/LATEST/configure.html

 

Bootstrapping the First Node(노드를 처음 시작하는 방법)

https://www.percona.com/doc/percona-xtradb-cluster/LATEST/bootstrap.html

 

Adding Nodes to Cluster(클러스터에 노드를 추가하는 방법)

https://www.percona.com/doc/percona-xtradb-cluster/LATEST/add-node.html

 

Verifying Replication(복제 검증)

https://www.percona.com/doc/percona-xtradb-cluster/LATEST/verify.html

 

Comparing Galera wsrep sst methods rsync vs. mariabackup(Rsync방식과 maariabackup방법 성능 비교)

https://www.claudiokuenzler.com/blog/887/comparing-galera-wsrep-sst-methods-rsync-vs-mariabackup

 

Galera cluster unable to sync SST: xtrabackup checkpoints missing, failed innobackupex on donor

(Galera 클러스터에서 SST를 동기화 할 수 없음 : xtrabackup 체크 포인트 누락, 기증자에서 innobackupex 실패)

https://www.claudiokuenzler.com/blog/899/galera-cluster-unable-sst-xtrabackup_checkpoints-missing-failed-innobackupex

 

How to Avoid SST When Adding a New Node to MySQL Galera Cluster(Galera cluster에 새로운 노드를 추가했을 때 SST를 피하는 방법)

https://severalnines.com/database-blog/how-avoid-sst-when-adding-new-node-mysql-galera-cluster

 

Change from rsync to xtrabackup - avoid read-only Donor during SST(rsync에서 xtrabackup으로 변경-SST 중 읽기 전용 Donor 방지)

https://support.severalnines.com/hc/en-us/community/posts/207460843-Change-from-rsync-to-xtrabackup-avoid-read-only-Donor-during-SST

 

Codership Tutorials on Galera Cluster(Galera 클러스터의 Codership 자습서)

https://galeracluster.com/library/training/tutorials/index.html

 

wsrep 옵션

https://galeracluster.com/library/documentation/mysql-wsrep-options.html

 

갈레라 버전 확인

https://mariadb.com/kb/en/meta/galera-versions/

'Databases > MariaDB' 카테고리의 다른 글

[MariaDB] Galera Cluster - 소개  (0) 2021.02.22
[MariaDB][Install] CentOS7 + MariaDB 10.3 RPM 설치  (0) 2020.06.13

Designed by JB FACTORY