percona xtraDB cluster 설치하기
개요
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
참고링크
Incremental Backup
Incremental Backup Both xtrabackup and innobackupex tools supports incremental backups, which means that they can copy only the data that has changed since the last backup. You can perform many incremental backups between each full backup, so you can set u
www.percona.com