설치환경
centos 7.9
db-node1 - 192.168.132.138
db-node2 - 192.168.132.139
db-node3 - 192.168.132.140
반드시 3개이상으로 구성추천 그렇지 않을 경우 split brain발생위험(서로 마스터 인식하여 오류 발생하는 이슈)
1. Galera Cluster설치
#mariadb repo 다운로드
[root@db01 yum.repos.d] curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
#모든 repo 캐시빌드
[root@db01 yum.repos.d] yum makecache fast
#MariaDB설치
[root@db01 yum.repos.d] yum -y install Mariadb-server
# 버전확인
[root@db01 yum.repos.d] mysql -V
mysql Ver 15.1 Distrib 10.5.11-MariaDB, for Linux (x86_64) using readline 5.1
2. Galera cluserter 설정
#Galera 라이브러리 설치 및 경로 확인
[root@db01 yum.repos.d] rpm -qa | grep galera
galera-4-26.4.8-1.el7.centos.x86_64
[root@db01 yum.repos.d] rpm -ql galera-4-26.4.8-1.el7.centos.x86_64
/etc/sysconfig/garb
/usr/bin/garb-systemd
/usr/bin/garbd
/usr/lib/systemd/system/garb.service
/usr/lib64/galera-4
/usr/lib64/galera-4/libgalera_smm.so
/usr/share/doc/galera-4
/usr/share/doc/galera-4/COPYING
/usr/share/doc/galera-4/LICENSE.asio
/usr/share/doc/galera-4/README
/usr/share/doc/galera-4/README-MySQL
/usr/share/man/man8/garbd.8.gz
$ vi /etc/my.cnf.d/server.cnf
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.132.138,192.168.132.139,192.168.132.140
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
galera는 innodb만 지원함
galera cluster 실행
[root@db-node1 ~]# galera_new_cluster
galera cluster 확인
[root@db-node1 ~]# mysql -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.5.11-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 1 |
+--------------------+-------+
1 row in set (0.001 sec)
MariaDB [(none)]>
나머지 node2, 3에서 mariadb서비스 실행
[root@db-node2 ~]# systemctl start mariadb.service
[root@db-node3 ~]# systemctl start mariadb.service
node1에서 다시 galera cluster확인
MariaDB [(none)]> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.000 sec)
node2에서 db생성
MariaDB [(none)]> create database galera;
Query OK, 1 row affected (0.001 sec)
node1에서 db확인
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| galera |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
node1에서 생성한 db가 node2에도 동일하게 보임
시나리오 - 특정 노드 끊은 후 db생성했을 시
1. node2번을 강제적으로 네트워크 끊었을 경우 확인시 아래와 같음
MariaDB [(none)]> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 2 |
+--------------------+-------+
1 row in set (0.001 sec)
2. 연결이 끊긴 상태에서 node1에서 db생성후 node2 네트워크 재연결하여 클러스터링 확인
MariaDB [(none)]> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.001 sec)
3. 일시적으로 끊었던 node2에서 db리스트 확인
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| galera |
| galera2 |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.000 sec)
node1에서 생성했던 db확인됨
시나리오 - 모든 node를 db중지하였을 경우
node1->node2->node3순으로 db서비스를 중지후 각 노드별 grastate.dat 파일확인
[root@db-node1 ~]# cat /var/lib/mysql/grastate.dat
# GALERA saved state
version: 2.1
uuid: 91424d3d-d4bd-11eb-ab57-a3e8046ab41e
seqno: 12
safe_to_bootstrap: 0
[root@db-node2 ~]# cat /var/lib/mysql/grastate.dat
# GALERA saved state
version: 2.1
uuid: 91424d3d-d4bd-11eb-ab57-a3e8046ab41e
seqno: 13
safe_to_bootstrap: 0
[root@db-node3 ~]# cat /var/lib/mysql/grastate.dat
# GALERA saved state
version: 2.1
uuid: 91424d3d-d4bd-11eb-ab57-a3e8046ab41e
seqno: 14
safe_to_bootstrap: 1
[root@db-node3 ~]# cat /var/lib/mysql/grastate.dat
# GALERA saved state
version: 2.1
uuid: 91424d3d-d4bd-11eb-ab57-a3e8046ab41e
seqno: 14
safe_to_bootstrap: 1
node3을 마지막으로 중단하였기때문에 safe_to_bootstrap값이 1로 확인됩니다.
재기동시 node3에서 galera cluster를 시작해야합니다!
[root@db-node3 ~]# galera_new_cluster
이후 각 node들 db서비스 기동
[root@db-node2 ~]# systemctl start mariadb.service
[root@db-node1 ~]# systemctl start mariadb.service
방화벽 사용시에는 오픈해야할 포트
3306
4444
4567
4568
galera구성시 주의할부분은 데드락!
부하가 발생할 경우 데드락이 발생가능성있음. 재기동이나 중지말고는 노답인듯한데 구성시부터 고려해야함!
DeadLock 해결방안(테스트해봐야할듯)
1개의 node를 Write 전용으로 사용하고 나머지 node-n개는 Read 전용으로 구성하면 이상없이 DeadLock을 해결할 수 있다.
만약 2개 이상의 node에서 Write를 진행하면 또 문제가 생기니 꼭 1대만 Write로 해야한다.
데드락 해결 참고 URL https://whitekeyboard.tistory.com/620
'# DataBase > Mysql(MariaDB)' 카테고리의 다른 글
mysql 기간별 select query(현재기준) (0) | 2021.09.09 |
---|---|
mysql show processlist 쓰레드 실시간 정보 (0) | 2021.06.29 |
mariadb 로컬 접근 가능 계정 추가 (0) | 2020.03.27 |
mysql-5.5.62 소스설치 (0) | 2019.12.09 |
mysql-4.0.27 make시 에러 발생 (0) | 2019.11.06 |
안녕하세요. 이곳은 IT위주의 잡다한 정보를 올려두는 개인 블로그입니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!