안녕하세요 이번글에선 galera cluster를 구성하도록 하겠습니다.
최종적인 아키텍처는 아래와 같으나 저는 DB node 3개와 그를 관리할 maxscale을 설치 진행하겠습니다.
Galera Cluster란
장점
단점
테스트 환경
Galera1
|
10.70.101.78
|
MariaDB10.2.14
|
Centos7.6
|
Galera2
|
10.70.101.79
|
MariaDB10.2.14
|
Centos7.6
|
Galera3
|
10.70.101.80
|
MariaDB10.2.14
|
Centos7.6
|
Maxscale
|
10.70.101.81
|
maxscale 2.5.0
|
Centos7.6
|
사전 작업
■ 필수 패키지 설치
[root@node1 ~]## yum -y install rsync nmap lsof perl-DBI nc
■ selinux disable
[root@node1 ~]# setenforce 0
■ 사용포트
Default
MariaDB = 3306
Galera = 4567
IST = 4568 ( 증분 상태 전송 용 ) ist.recv_addr에서 설정하여 변경할수 있다.
SST = 4444 State Snapshot Transfer 전용
**IST 나 SST는 Galera가 알아서 정해서 한다. log를 보면 SST로 하는지 IST로 하는지 확인 가능
## 포트 개방
[root@node1 ~]# firewall-cmd --permanent --add-service=mysql
success
[root@node1 ~]# firewall-cmd --permanent --add-port={3306,4567,4568,4444}/tcp
success
[root@node1 ~]# firewall-cmd --permanent --add-port=4567/udp
success
[root@node1 ~]# firewall-cmd --reload
success
[root@node1 ~]# firewall-cmd --list-ports
3306/tcp 4567/tcp 4568/tcp 4444/tcp 4567/udp
■ MySQL 5.7 install
[root@node1 ~]# groupadd mysql
[root@node1 ~]# useradd -g mysql mysql
[root@node1 ~]# tar -zxvf mariadb-10.2.14-linux-x86_64.tar.gz
[root@node1 ~]# mv mariadb-10.2.14-linux-x86_64.tar.gz /mysql
[root@node1 ~]# vi /etc/my.cnf
[mysqld]
datadir=/data/data
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/data/log/mariadb.log
pid-file=/data/log/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
[root@node1 ~]# mkdir /data/data /data/log
[root@node1 ~]# chown -R mysql.mysql /data/data /data/log
[root@node1 ~]# chown -R mysql.mysql /mysql
[root@node1 ~]# cd /mysql/bin/
[root@node1 ~]# vi ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/mysql/bin
export PATH
[root@node1 ~]# source ~/.bash_profile
[root@node1 ~]# mysqld_safe --user=mysql &
Galera Cluster 작업
■ galera cluster 설정 (모든 서버)
[root@node1 ~]# vi /etc/my.cnf.d/galera.cnf
[galera]
wsrep_on=ON
wsrep_provider=/data/maria/lib/galera/libgalera_smm.so
wsrep_cluster_name='galera'
wsrep_cluster_address='gcomm://10.70.101.78,10.70.101.79,10.70.101.80'
wsrep_node_address='10.70.101.78'
wsrep_node_name='node1'
wsrep_sst_method=rsync
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_provider_options="gcache.size = 512M; gcache.name = /tmp/galera.cache; gcache.page_size = 100M"
## wsrep_provider = 갈레라 플러그인이 있는 위치 확인
[root@node1 ~]# find / -name 'libgalera_smm.so'
/data/maria/lib/galera/libgalera_smm.so
/data/maria/lib/libgalera_smm.so
- wsrep_provider : Galera 라이브러리 경로
- wsrep_cluster_name : 클러스터의 이름
- wsrep_cluster_address : Galera 클러스터 주소 형식 및 사용법 참조. 현재 노드의 IP
- wsrep_cluster_address : 클러스터의 멤버 리스트
- wsrep_sst_method = 노드간의 전송 방법 ( rsync, mysqldump, xtrabackup, xtrabackup-v2, mariabackup )
- binlog_format=ROW : 바이너리 로그 형식 참조
- default_storage_engine=InnoDB
- innodb_autoinc_lock_mode=2
- innodb_doublewrite=1
- query_cache_size=0 : MariaDB Galera Cluster 5.5.40, MariaDB Galera Cluster 10.0.14 및 MariaDB 10.1.2 이전 MariaDB 버전에만 필수
- wsrep_on=ON : wsrep 복제 활성화(10.1.1 버전이후)
■ Galera cluster start
※ wsrep_local_state_comment : 노드의 현재 상태 확인
## 1번 노드 start
[root@node1 ~]# mysqld_safe --user=mysql --wsrep-new-cluster &
MariaDB [(none)]> show status like '%wsrep_%';
+------------------------------+-----------------------------------------------+
| Variable_name | Value |
+------------------------------+-----------------------------------------------+
| wsrep_apply_oooe | 0.000000 |
| wsrep_apply_oool | 0.000000 |
| wsrep_apply_window | 0.000000 |
| wsrep_causal_reads | 0 |
| wsrep_cert_deps_distance | 0.000000 |
| wsrep_cert_index_size | 0 |
| wsrep_cert_interval | 0.000000 |
| wsrep_cluster_conf_id | 1 |
| wsrep_cluster_size | 1 |
| wsrep_cluster_state_uuid | 708fb68f-9385-11ec-a435-f34f2dd2796b |
| wsrep_cluster_status | Primary |
| wsrep_commit_oooe | 0.000000 |
| wsrep_commit_oool | 0.000000 |
| wsrep_commit_window | 0.000000 |
| wsrep_connected | ON |
| wsrep_desync_count | 0 |
| wsrep_evs_delayed | |
| wsrep_evs_evict_list | |
| wsrep_evs_repl_latency | 1.475e-06/5.8616e-06/1.8018e-05/6.20173e-06/5 |
| 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 | 708f421f-9385-11ec-ae74-36d73def7985 |
| wsrep_incoming_addresses | 10.70.101.78:3306 |
| wsrep_last_committed | 0 |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_cached_downto | 18446744073709551615 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_commits | 0 |
| wsrep_local_index | 0 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_avg | 0.500000 |
| 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 | 708fb68f-9385-11ec-a435-f34f2dd2796b |
| wsrep_protocol_version | 8 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 25.3.23(r3789) |
| wsrep_ready | ON |
| wsrep_received | 2 |
| wsrep_received_bytes | 141 |
| wsrep_repl_data_bytes | 0 |
| wsrep_repl_keys | 0 |
| wsrep_repl_keys_bytes | 0 |
| wsrep_repl_other_bytes | 0 |
| wsrep_replicated | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_thread_count | 2 |
+------------------------------+-----------------------------------------------+
58 rows in set (0.00 sec)
## node 2,3 기동
[root@node2 ~]# mysqld_safe --user=mysql &
[root@node3 ~]# mysqld_safe --user=mysql &
## 모든 node join 후 wsreo 상태 확인
MariaDB [(none)]> show status like '%wsrep_%';
+------------------------------+-------------------------------------------------------+
| Variable_name | Value |
+------------------------------+-------------------------------------------------------+
| wsrep_apply_oooe | 0.000000 |
| wsrep_apply_oool | 0.000000 |
| wsrep_apply_window | 0.000000 |
| wsrep_causal_reads | 0 |
| wsrep_cert_deps_distance | 0.000000 |
| wsrep_cert_index_size | 0 |
| wsrep_cert_interval | 0.000000 |
| wsrep_cluster_conf_id | 3 |
| wsrep_cluster_size | 3 |
| wsrep_cluster_state_uuid | 708fb68f-9385-11ec-a435-f34f2dd2796b |
| wsrep_cluster_status | Primary |
| wsrep_commit_oooe | 0.000000 |
| wsrep_commit_oool | 0.000000 |
| wsrep_commit_window | 0.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 | 708f421f-9385-11ec-ae74-36d73def7985 |
| wsrep_incoming_addresses | 10.70.101.78:3306,10.70.101.79:3306,10.70.101.80:3306 |
| wsrep_last_committed | 0 |
| wsrep_local_bf_aborts | 0 |
| wsrep_local_cached_downto | 18446744073709551615 |
| wsrep_local_cert_failures | 0 |
| wsrep_local_commits | 0 |
| wsrep_local_index | 0 |
| wsrep_local_recv_queue | 0 |
| wsrep_local_recv_queue_avg | 0.100000 |
| 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 | 708fb68f-9385-11ec-a435-f34f2dd2796b |
| wsrep_protocol_version | 8 |
| wsrep_provider_name | Galera |
| wsrep_provider_vendor | Codership Oy <info@codership.com> |
| wsrep_provider_version | 25.3.23(r3789) |
| wsrep_ready | ON |
| wsrep_received | 10 |
| wsrep_received_bytes | 742 |
| wsrep_repl_data_bytes | 0 |
| wsrep_repl_keys | 0 |
| wsrep_repl_keys_bytes | 0 |
| wsrep_repl_other_bytes | 0 |
| wsrep_replicated | 0 |
| wsrep_replicated_bytes | 0 |
| wsrep_thread_count | 2 |
+------------------------------+-------------------------------------------------------+
58 rows in set (0.00 sec)
MariaDB [(none)]> show status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.00 sec)
■ 동기화 확인
## node1에 data insert
MariaDB [(none)]> create database kim;
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> use kim
Database changed
MariaDB [kim]> create table tt(i int);
Query OK, 0 rows affected (0.00 sec)
MariaDB [kim]> insert into tt values(1);
Query OK, 1 row affected (0.00 sec)
## node2,3 확인
MariaDB [(none)]> select * from kim.tt;
+------+
| i |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
MariaDB [(none)]> select * from kim.tt;
+------+
| i |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
참고
https://rastalion.me/galera-cluster-for-mysql-8-1-architecture/
Galera cluster for MySQL 8 - #.1 Architecture - RastaLion's IT Blog
Galera clusterGalera cluster는 코더십이 만든 동기식 멀티 마스터 복제 기법입니다. 인증 기반 복제(Certification-Based Replication) 방식을 사용하며, 데이터의 완전성을 자동으로 관리해줍니다. 그리고 현재
rastalion.me
https://bamdule.tistory.com/66
[Linux] CentOS 7 Galera Cluster 사용하기
1. Galera Cluster 란? 오픈소스이다. 동기 방식의 복제를 지원한다. 노드간 통신을 위해 wsrep API를 사용한다. Active-Active 방식의 다중 Master 구성 및 모든 노드에서 Read/Write가 가능하다. 노드의 추가와..
bamdule.tistory.com
'DataBase > MySQL & MariaDB' 카테고리의 다른 글
[MariaDB - Galera Cluster & sysbench 이용 동기화 테스트 ] part 3 (0) | 2022.02.24 |
---|---|
[MariaDB - Galera Cluster & Maxscale 구성 및 failover test] part 2 (0) | 2022.02.24 |
[MySQL - MHA 구성 + failover/switchover] part 2 (0) | 2022.01.28 |
[MySQL - MHA 구성 + VIP생성] part 1 (2) | 2022.01.28 |
[MariaDB 10.1 to 10.2 Upgrade] (0) | 2022.01.14 |