Source Install Galera Cluster on MariaDB 10.3

MariaDB 를 이용한 Galera Cluster 구성 가이드

Galera Cluster 는 MariaDB 에서 공식 지원하는 클러스터로써 Active-Active 방식의 MULTI MASTER 구성을 이용하는 DB 전용 클러스터​ 입니다.

wsrep API 를 이용하여 노드간 통신을 하고 동기방식으로 데이터를 복제 합니다. MariaDB 뿐 아니라 MySQL 에서도 상관없이 동작하며, 특히 다른 버전간에도 클러스터로(권장되진 않음) 묶을 수도 있습니다.

워낙 잘 알려진 오픈소스이기 때문에 더 자세한 내용은 Galera Cluster for MySQL | The world’s most advanced open-source database cluster.What is MariaDB Galera Cluster? – MariaDB Knowledge Base 을 참고해 주시기 바랍니다.

이 가이드에서는 MariaDB 10.3 버전을 이용하여 Galera Cluster(이하 갈레라) 를 구성하는 방법에 대해서 알아보도록 하겠습니다.

구성 목표

MariaDB 서버 3대를 이용하여 갈레라 클러스터링을 구성

구성 환경

노드 1 : 10.19.11.102
노드 2 : 10.19.11.103
노드 3 : 10.19.11.104


모든 노드에 MariaDB 10.3 설치를 먼저 해 주시기 바랍니다. 설치 가이드는 Souce Install MariaDB 10.3 on CentOS 7 페이지를 참고 부탁 드립니다.

또한 갈레라는 낮은 사양의 노드를 기준으로 동기화가 됩니다. 이 때문에 모든 노드는 동일한 사양으로 구성되는 것을 권장 합니다.

갈레라 모듈 설치

갈레라 모듈 설치 과정을 모든 노드에 동일하게 진행해 주시기 바랍니다.

의존성 패키지 설치

[root@10-19-11-102 /]# yum install git boost-devel check-devel scons automake autoconf socat

갈레라 소스 다운로드

[root@10-19-11-102 /]# cd /data/apps/dn/
[root@10-19-11-102 dn]# git clone -b mariadb-3.x https://github.com/MariaDB/galera.git

갈레라 모듈 빌드

[root@10-19-11-102 dn]# cd galera
[root@10-19-11-102 galera]# git submodule init
[root@10-19-11-102 galera]# git submodule update
[root@10-19-11-102 galera]# ./scripts/build.sh
[root@10-19-11-102 galera]# cp libgalera_smm.so /data/apps/ln/mariadb/lib/

갈레라 인증 유저 생성
shell #> /data/apps/ln/mariadb/bin/mysql -uroot -p

MariaDB [(none)]> CREATE USER 'sstuser'@'%' IDENTIFIED BY 'sstuser1~';
MariaDB [(none)]> GRANT LOCK TABLES, PROCESS, RELOAD, REPLICATION CLIENT, SUPER ON *.* TO 'sstuser'@'%';

생성된 유저 확인

MariaDB [(none)]> use mysql;
MariaDB [mysql]> select * from user where User = 'sstuser';

갈레라 설정

갈레라 설정을 위해 my.cnf 파일에 갈레라 관련 내용을 추가하시고 중복되는 옵션이 설정 파일 내에 존재하는지 반드시 확인 해 주시기 바랍니다.

일부 옵션들은 자신의 환경에 맞게 수정이 필요합니다. 당장 실행에는 문제가 없기 때문에 설정 후 MySQLTuner-perl 를 이용하면 튜닝 값을 일부 확인 하실 수 있습니다.

설정 및 재시작 등의 작업은 반드시 아래 순서대로 따라서 진행해 주셔야 합니다.

노드 1 설정
: vi /data/apps/ln/mariadb/etc/my.cnf

# galera setting
binlog_format=row
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
wsrep_on = ON
wsrep_provider = /data/apps/ln/mariadb/lib/libgalera_smm.so
wsrep_slave_threads = 32
wsrep_provider_options = "pc.ignore_sb=no; pc.wait_prim=no; cert.log_conflicts=YES; gcs.fc_factor=0.8; gcs.fc_limit=160;"
wsrep_cluster_address = 'gcomm://'
#wsrep_cluster_address = 'gcomm://10.19.11.102,10.19.11.103,10.19.11.104'
wsrep_cluster_name = 'umount_cluster'
wsrep_node_address = '10.19.11.102'
wsrep_node_name = '10-19-11-102'
wsrep_sst_auth = "sstuser:sstuser1~"
wsrep_sst_method = 'mariabackup'

노드 1 서비스 재시작

[root@10-19-11-102 galera]# systemctl restart mariadb

노드 2 설정
: vi /data/apps/ln/mariadb/etc/my.cnf

# galera setting
binlog_format = row
default_storage_engine = innodb
innodb_autoinc_lock_mode = 2
innodb_flush_log_at_trx_commit = 0
wsrep_on = ON
wsrep_provider = /data/apps/ln/mariadb/lib/libgalera_smm.so
wsrep_slave_threads = 32
wsrep_provider_options = "pc.ignore_sb=no; pc.wait_prim=no; cert.log_conflicts=YES; gcs.fc_factor=0.8; gcs.fc_limit=160;"
wsrep_cluster_address = 'gcomm://10.19.11.102,10.19.11.103'
#wsrep_cluster_address = 'gcomm://10.19.11.102,10.19.11.103,10.19.11.104'
wsrep_cluster_name = 'umount_cluster'
wsrep_node_address = '10.19.11.103'
wsrep_node_name = '10-19-11-103'
wsrep_sst_auth = "sstuser:sstuser1~"
wsrep_sst_method = 'mariabackup'

노드 2 서비스 재시작

[root@10-19-11-103 galera]# systemctl restart mariadb

노드 3 설정
: vi /data/apps/ln/mariadb/etc/my.cnf

# galera setting
binlog_format = row
default_storage_engine = innodb
innodb_autoinc_lock_mode = 2
innodb_flush_log_at_trx_commit = 0
wsrep_on = ON
wsrep_provider = /data/apps/ln/mariadb/lib/libgalera_smm.so
wsrep_slave_threads = 32
wsrep_provider_options = "pc.ignore_sb=no; pc.wait_prim=no; cert.log_conflicts=YES; gcs.fc_factor=0.8; gcs.fc_limit=160;"
wsrep_cluster_address = 'gcomm://10.19.11.102,10.19.11.103,10.19.11.104'
wsrep_cluster_name = 'umount_cluster'
wsrep_node_address = '10.19.11.104'
wsrep_node_name = '10-19-11-104'
wsrep_sst_auth = "sstuser:sstuser1~"
wsrep_sst_method = 'mariabackup'

노드 3 서비스 재시작

[root@10-19-11-104 galera]# systemctl restart mariadb

클러스터링 확인 (아무 노드에서 확인 하셔도 상관 없습니다.)
shell #> /data/apps/ln/mariadb/bin/mysql -uroot -p

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 | 2.951220 |
| wsrep_cert_index_size | 1918 |
| wsrep_cert_interval | 0.000000 |
| wsrep_cluster_conf_id | 21 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | 591c82d0-ebaa-11e8-9424-b75adfd45d50 |
| wsrep_cluster_status | Primary |
| wsrep_cluster_weight | 3 |
| 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 | 88128b41-f222-11e8-8527-b7ec096051ba |
| wsrep_incoming_addresses | 10.19.11.102:3306,10.19.11.103:3306,10.19.11.104:3306 |
| wsrep_last_committed | 250 |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_cached_downto | 128 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_commits | 66 |
| wsrep_local_index | 0 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_avg | 0.000000 |
| wsrep_local_recv_queue_max | 1 |
| 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 | 591c82d0-ebaa-11e8-9424-b75adfd45d50 |
| 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.24(r3827) |
| wsrep_ready | ON |
| wsrep_received | 11 |
| wsrep_received_bytes | 1848 |
| wsrep_repl_data_bytes | 597097 |
| wsrep_repl_keys | 4845 |
| wsrep_repl_keys_bytes | 41728 |
| wsrep_repl_other_bytes | 0 |
| wsrep_replicated | 123 |
| wsrep_replicated_bytes | 647104 |
| wsrep_thread_count | 9 |
+------------------------------+-------------------------------------------------------+
61 rows in set (0.001 sec)

기본적으로 클러스터링 작업은 끝입니다. 하지만 지금의 설정으로는 문제가 있습니다. 노드 1의 설정에서는 자기 자신만 클러스터링에 맺어 있게 설정되어 있고, 노드 2에서는 노드 1과 자신만 클러스터링에 맺어 있게 설정이 되어 있기 때문입니다.

이 상황에서 시스템 장애나 서비스 재시작 등이 된다면 클러스터링에 문제가 발생할 것입니다. 그렇기 때문에 이제 노드 1과 노드 2에도 노드 3처럼 클러스터 어드레스를 추가 해 줌으로써 이런 문제가 발생 되지 않도록 조치 해 주어야 합니다.

노드 1 재설정
: vi /data/apps/ln/mariadb/etc/my.cnf

# galera setting
binlog_format = row
default_storage_engine = innodb
innodb_autoinc_lock_mode = 2
innodb_flush_log_at_trx_commit = 0
wsrep_on = ON
wsrep_provider = /data/apps/ln/mariadb/lib/libgalera_smm.so
wsrep_slave_threads = 32
wsrep_provider_options = "pc.ignore_sb=no; pc.wait_prim=no; cert.log_conflicts=YES; gcs.fc_factor=0.8; gcs.fc_limit=160;"
#wsrep_cluster_address = 'gcomm://'
wsrep_cluster_address = 'gcomm://10.19.11.102,10.19.11.103,10.19.11.104'
wsrep_cluster_name = 'umount_cluster'
wsrep_node_address = '10.19.11.102'
wsrep_node_name = '10-19-11-102'
wsrep_sst_auth = "sstuser:sstuser1~"
wsrep_sst_method = 'mariabackup'

노드 1 재시작

[root@10-19-11-102 galera]# systemctl restart mariadb

노드 2 재설정
: vi /data/apps/ln/mariadb/etc/my.cnf

# galera setting
binlog_format = row
default_storage_engine = innodb
innodb_autoinc_lock_mode = 2
innodb_flush_log_at_trx_commit = 0
wsrep_on = ON
wsrep_provider = /data/apps/ln/mariadb/lib/libgalera_smm.so
wsrep_slave_threads = 32
wsrep_provider_options = "pc.ignore_sb=no; pc.wait_prim=no; cert.log_conflicts=YES; gcs.fc_factor=0.8; gcs.fc_limit=160;"
#wsrep_cluster_address = 'gcomm://10.19.11.102,10.19.11.103'
wsrep_cluster_address = 'gcomm://10.19.11.102,10.19.11.103,10.19.11.104'
wsrep_cluster_name = 'umount_cluster'
wsrep_node_address = '10.19.11.103'
wsrep_node_name = '10-19-11-103'
wsrep_sst_auth = "sstuser:sstuser1~"
wsrep_sst_method = 'mariabackup'

노드 2 재시작

[root@10-19-11-103 galera]# systemctl restart mariadb

이로써 모든 작업이 마무리 되었습니다. 문제가 없이 정상 작동하는지 다시 한번 클러스터링 상태를 확인 해 보시고 데이터도 넣어보고 동기화가 잘 되는지 등의 체크도 진행 해 보시기 바랍니다.

You may also like...

Subscribe
Notify of
guest

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x