YUMSERV
Published 2019. 5. 29. 23:18
Galera Cluster 설치 및 설정 LINUX/DB
반응형

1.Galera Cluster 란?

 

http://galeracluster.com/ 에서 제공되는 오픈소스로, 동기식의 복제구조를 사용하고 있습니다.

Mysql 리플리케이션과는 달리, active -active cluster 구조로 되어있습니다.
노드 추가와 제거가 매우 간단합니다.
InnoDB만 지원을 하며, 한 노드에서 테이블의 락이 걸리게 되면, 모든 노드에서도 같이 락이 걸리게 됩니다. 

사용 버전 : Mysql 5.5이상, Mariadb 5.5이상 (10.1부터는 기본적으로 포함되어있습니다.)

 

2. Galera Cluster 설치 및 설정

 

테스트 진행환경 : CentOS 7.6 Mariadb 10.2


- Mariadb YUM 설치

node 1 : 192.168.0.100

node 2 : 192.168.0.110

 

# vi /etc/yum.repos.d/MariaDB.repo
[MariaDB]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck = 1
# yum -y install mariadb-server galera rsync


- Galera Cluster 설정

 

# vi /etc/my.cnf.d/server.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_address=”gcomm://192.168.0.100,192.168.0.110″
wsrep_cluster_name=cluster
wsrep_node_address=”192.168.0.100″
wsrep_node_name=”test1″ //hostname
wsrep_sst_method=rsync
wsrep_sst_auth=”root:패스워드”
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0


- 설정에 대한 설명
1) wsrep_on=ON // galera cluster 사용여부
2) wsrep_provider=/usr/lib64/galera/libgalera_smm.so // libgalera_snm.so 모듈 위치
3) wsrep_cluster_address=”gcomm://192.168.0.100,192.168.0.110″ // 본 서버를 포함한 동기화할 서버 IP 리스트
4) wsrep_cluster_name=cluster // 그룹명 (동기화할 서버들은 모두 동일해야 함.)
5) wsrep_node_address=”192.168.0.100″ // 현재 서버 IP
6) wsrep_node_name=”test1″ // hostname
7) wsrep_sst_method=rsync // 동기화 될 데이터 전송방식
8) wsrep_sst_auth=”root:패스워드” // 데이터 전송시에 쓸 계정과 패스워드 
9) binlog_format=row // 바이너리 로그파일 형식
10) default_storage_engine=InnoDB // 스토리지 엔진 타입
11) innodb_autoinc_lock_mode=2
12) bind-address=0.0.0.0 // 모든 IP에서 접근 허용


- 방화벽 설정


# vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 3306 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 4444 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 4567 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state –state NEW -m udp –dport 4567 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 4568 -j ACCEPT
# service iptables restart

첫번째 노드 실행 시
# galera_new_cluster
두번째 노드부터
# service mysql start

서비스 확인

# netstat -nltp | grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 14773/mysqld 
tcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 14773/mysqld


MariaDB [(none)]> show status like ‘wsrep_cluster_size’;
+——————–+——-+
| Variable_name | Value |
+——————–+——-+
| wsrep_cluster_size | 2 |
+——————–+——-+
1 row in set (0.00 sec)

MariaDB [(none)]> show status like ‘wsrep_incoming_addresses’;
+————————–+—————————————+
| Variable_name | Value |
+————————–+—————————————+
| wsrep_incoming_addresses | 192.168.0.100:3306,192.168.0.110:3306 |
+————————–+—————————————+
1 row in set (0.00 sec)

MariaDB [(none)]> show status like ‘wsrep_%’;
+——————————+—————————————+
| Variable_name | Value |
+——————————+—————————————+
| wsrep_apply_oooe | 0.000000 |
| wsrep_apply_oool | 0.000000 |
| wsrep_apply_window | 1.000000 |
| wsrep_causal_reads | 0 |
| wsrep_cert_deps_distance | 1.000000 |
| wsrep_cert_index_size | 4 |
| wsrep_cert_interval | 0.000000 |
| wsrep_cluster_conf_id | 2 |
| wsrep_cluster_size | 2 |
| wsrep_cluster_state_uuid | d16835b4-2b67-11e9-87c0-f267b27d5379 |
| wsrep_cluster_status | Primary |
| wsrep_cluster_weight | 2 |
| wsrep_commit_oooe | 0.000000 |
| wsrep_commit_oool | 0.000000 |
| wsrep_commit_window | 1.000000 |
| wsrep_connected | ON |
| 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_flow_control_paused | 0.000000 |
| wsrep_flow_control_paused_ns | 0 |
| wsrep_flow_control_recv | 0 |
| wsrep_flow_control_sent | 0 |
| wsrep_gcomm_uuid | d16538b5-2b67-11e9-a430-5e8e90c80541 |
| wsrep_incoming_addresses | 192.168.0.100:3306,192.168.0.110:3306 |
| wsrep_last_committed | 7 |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_cached_downto | 1 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_commits | 0 |
| wsrep_local_index | 0 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_avg | 0.125000 |
| wsrep_local_recv_queue_max | 2 |
| wsrep_local_recv_queue_min | 0 |
| wsrep_local_replays | 0 |
| wsrep_local_send_queue | 0 |
| wsrep_local_send_queue_avg | 0.000000 |
| wsrep_local_send_queue_max | 1 |
| wsrep_local_send_queue_min | 0 |
| wsrep_local_state | 4 |
| wsrep_local_state_comment | Synced |
| wsrep_local_state_uuid | d16835b4-2b67-11e9-87c0-f267b27d5379 |
| wsrep_open_connections | 0 |
| wsrep_open_transactions | 0 |
| wsrep_protocol_version | 9 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy info@codership.com |
| wsrep_provider_version | 25.3.25(r3836) |
| wsrep_ready | ON |
| wsrep_received | 8 |
| wsrep_received_bytes | 1353 |
| wsrep_repl_data_bytes | 1820 |
| wsrep_repl_keys | 5 |
| wsrep_repl_keys_bytes | 160 |
| wsrep_repl_other_bytes | 0 |
| wsrep_replicated | 5 |
| wsrep_replicated_bytes | 2320 |
| wsrep_thread_count | 2 |
+——————————+—————————————+

 

3. 동기화 테스트

 

[node 1에서 진행]

 

MariaDB [(none)]> create database galera_test;
Query OK, 1 row affected (0.03 sec)
MariaDB [(none)]> show databases;
+——————–+
| Database |
+——————–+
| galera_test |
| information_schema |
| mysql |
| performance_schema |
| test |
+——————–+
5 rows in set (0.00 sec)

 

[node 2에서 확인]

 

MariaDB [(none)]> show databases;
+——————–+
| Database |
+——————–+
| galera_test |
| information_schema |
| mysql |
| performance_schema |
| test |
+——————–+
5 rows in set (0.00 sec)

 

4. 노드 추가

 

새 노드에 아래에 IP를 추가한다.

node3 : 192.168.0.120

 

# vi /etc/my.cnf.d/server.cnf
wsrep_cluster_address=”gcomm://192.168.0.100,192.168.0.110,192.168.0.120″
# service mysql start

기존 노드의 경우, mysql를 재시작 안해도 되며, server.cnf 파일에 위와같이 IP를 추가시켜준다.

 

5. 장애테스트

 

모든 노드가 죽었을 경우, mysql service start 나 galera_new_cluster 로 시작이 안된다.

이 경우, recovery 옵션을 통해 복구가 가능하다.

 

# vi /var/lib/mysql/grastate.dat // 노드의 상태를 확인할 수 있다.
# GALERA saved state
version: 2.1
uuid: d16835b4-2b67-11e9-87c0-f267b27d5379
seqno: 9
safe_to_bootstrap: 0

safe_to_bootstrap의 넘버로 확인할 수 있으며, 노드들 중에, 한 노드가 safe_to_bootstrap이 1로 되어있는 노드가 존재할 것이다. 해당 노드가 제일 마지막에 죽은 노드로, 최신 데이터를 가지고 있다. 그 노드가 존재하는 서버에서는 galera_new_cluster로 실행해주며, 나머지 노드들은 service mysql start로 시작해주면 시작이 된다.


반응형

'LINUX > DB' 카테고리의 다른 글

Mariadb 언어셋 변경  (0) 2019.06.01
MYSQL 에러  (0) 2019.05.29
MYSQL 백업 및 복구  (0) 2019.05.29
MySQLTuner 설치  (0) 2019.05.28
MYSQL 복구 설정  (0) 2019.05.27
profile

YUMSERV

@lena04301

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!