개요
2019년 프로젝트를 했을 때 DB가 percona xtraDB cluster 형상이었다. multi-master 구조이다.
percona DB를 처음 접해봐서 구축테스트를 해보며 내용을 정리하고자 한다.
1. percona DB 구축
(1) 설치
yum install http://52.33.4.66/percona/centos/6/os/x86_64/percona-xtrabackup-2.3.5-1.el6.x86_64.rpm
yum install https://repo.percona.com/centos/6Server/RPMS/x86_64/Percona-XtraDB-Cluster-server-56-5.6.37-26.21.3.el6.x86_64.rpm
yum install Percona-XtraDB-Cluster-56
(2) my.cnf 설정
[mysqld] collation-server=utf8_general_ci character-set-server=utf8
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0
#path to Galera library wsrep_provider=/usr/lib64/libgalera_smm.so
# Cluster connection URL contains the IPs of node#1, node#2 and node#3 wsrep_cluster_address=gcomm://manage1.bc.com,manage2.bc.com,manage3.bc.com
# In order for Galera to work correctly binlog format should be ROW binlog_format=ROW
# MyISAM storage engine has only experimental support default_storage_engine=InnoDB
# This changes how InnoDB autoincrement locks are managed and is a requirement for Galera #innodb_autoinc_lock_mode=2 wsrep_auto_increment_control=OFF
# Node #1 address wsrep_node_address=manage2.bc.com
# SST method #wsrep_sst_method=xtrabackup-v2 wsrep_sst_method=xtrabackup-v2
# Cluster name wsrep_cluster_name=sunny_percona_cluster
# Authentication for SST method wsrep_sst_auth="sstuser:ndap1234"
[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid |
- wsrep_cluster_address : percona DB 클러스터 노드들의 hostname을 적는다.
- wsrep_node_address : 각 서버의 hostname을 적는다.
- wsrep_cluster_name : 클러스터이름을 자유롭게 설정한다.
- wsrep_sst_auth : 노드간 sync를 맞추는 용도의 db 계정정보이다. id와 password를 적는다.
(3) sstuser 생성
CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'ndap1234';
GRANT ALL PRIVILEGES ON *.* TO 'sstuser'@'localhost' IDENTIFIED BY 'ndap1234';
FLUSH PRIVILEGES;
2. haproxy 설정
https://www.percona.com/doc/percona-xtradb-cluster/LATEST/howtos/virt_sandbox.html
frontend stats-front bind *:8082 mode http default_backend stats-back
backend stats-back mode http balance roundrobin stats uri /haproxy/stats stats auth ndap:ndap
frontend pxc-onenode-front bind *:3307 mode tcp default_backend pxc-back
backend pxc-back mode tcp balance leastconn option httpchk server mysql3 manage3.bc.com:3306 check port 9200 inter 12000 rise 3 fall 3 server mysql1 manage1.bc.com:3306 check port 9200 inter 12000 rise 3 fall 3 backup server mysql2 manage2.bc.com:3306 check port 9200 inter 12000 rise 3 fall 3 backup |
haproxy가 http를 통해 mysql을 체크한다. mysql은 이 요청을 받지 못한다. (by default). haproxy stats 페이지를 보면 db가 구동중임에도 불구하고 haproxy가 mysql 상태를 체크하지 못한다.
clustercheck 를 사용하여 haproxy가 http를 통해 mysql을 정상적으로 체크할 수 있도록 한다. (모든 db노드에 적용한다.)
- clusetercheck용 db유저 생성 및 권한부여
mysql> grant process on *.* to 'clustercheckuser'@'localhost' identified by 'clustercheckpassword!';
mysql> flush privileges;
- db유저명 및 비밀번호를 다르게 설정했으면 아래 스크립트를 수정한다.
vim /usr/bin/clustercheck
.. #MYSQL_USERNAME="${1-clustercheckuser}" MYSQL_USERNAME="clustercheckuser" #MYSQL_PASSWORD="${2-clustercheckpassword!}" MYSQL_PASSWORD="ndap1234" AVAILABLE_WHEN_DONOR=${3:-0} ERR_FILE="${4:-/dev/null}" AVAILABLE_WHEN_READONLY=${5:-1} DEFAULTS_EXTRA_FILE=${6:-/etc/my.cnf} #Timeout exists for instances where mysqld may be hung TIMEOUT=10 .. |
- xinetd 설치
yum -y install xinetd
- clustercheck 스크립트 수행테스트
clustercheck
curl http://manage1:9200
- 위의 clustercheck결과와 curl결과가 다르다면 아래 스크립트의 user를 수정한다.
vim /etc/xinetd.d/mysqlchk
# default: on # description: mysqlchk service mysqlchk { # this is a config for xinetd, place it in /etc/xinetd.d/ disable = no flags = REUSE socket_type = stream port = 9200 wait = no user = root server = /usr/bin/clustercheck log_on_failure += USERID only_from = 0.0.0.0/0 # recommended to put the IPs that need # to connect exclusively (security purposes) per_source = UNLIMITED } |
- mysqlchk 서비스 추가
vim /etc/services
mysqlchk 9200/tcp |
- xinetd 구동 및 haproxy 확인
service xinetd start
3. percona DB 구동
제일 먼저 구동하는 서버는 bootstrap-pxc 모드로 구동한다.
/etc/init.d/mysqld bootstrap-pxc
4. DB 백업 및 복구 (xtrabackup 사용)
xtrabackup에 대한 상세한 내용은 이전 글을 참고해주세요.
(1) 전체 백업
xtrabackup --backup --target-dir=./xtrabackup_0205/base --user root --password root
(2) 변경분 백업
##백업
xtrabackup --backup --target-dir=./xtrabackup_0205/inc1 --incremental-basedir=/root/sunny/xtrabackup_0205/base --user=root --password=root
xtrabackup --backup --target-dir=./xtrabackup_0205/inc2 --incremental-basedir=/root/sunny/xtrabackup_0205/inc1 --user=root --password=root
##apply log
xtrabackup --prepare --apply-log-only --target-dir=./xtrabackup_0205/base
xtrabackup --prepare --apply-log-only --target-dir=./xtrabackup_0205/base --incremental-dir=/root/sunny/xtrabackup_0205/inc1
# 제일 마지막 증분 백업에서는 --apply-log-only 옵션을 사용하지 않는다.
# 사용할 경우 롤백 단계가 진행된다.(?)
xtrabackup --prepare --target-dir=./xtrabackup_0205/base --incremental-dir=/root/sunny/xtrabackup_0205/inc2
(3) 복구
service mysqld stop
rm -rf /var/lib/mysql
xtrabackup --copy-back --target-dir=/root/sunny/xtrabackup_0205/base/
chown -R mysql:mysql /var/lib/mysql
service mysqld start
참고링크
'기초 튼튼탄탄탄 > Database' 카테고리의 다른 글
MySQL Replication 이해하기 (Master - Slave) (32) | 2021.01.14 |
---|---|
[mysql] 마스킹처리하는 함수 만들고 실행하기 (131) | 2021.01.08 |
postgreSQL DB 이중화 구성하기 (master-slave streaming replication & failover) (28) | 2020.10.08 |
mysqldump -p 옵션 비밀번호에 특수문자가 있을 때 (4) | 2020.04.18 |
[mysql] 프로시저 생성/수정/실행 권한 주기 (4) | 2020.04.18 |
댓글