본문 바로가기
기초 튼튼탄탄탄/Database

percona xtraDB cluster 설치하기

by 잇서니 2021. 1. 3.
반응형

 

개요

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

 

반응형

댓글