Today
Total
KoreanEnglishFrenchGermanJapaneseSpanishChinese (Simplified)
관리 메뉴

DB & AWS Knowledge

갈레라 클러스터 구성 방법 본문

MySQL/H.A (High Availability)

갈레라 클러스터 구성 방법

`O` 2021. 3. 4. 15:00
728x90
반응형
  • 참고 출처 : 사내 권장 설치 가이드 (권장 표준으로 기밀이 아닌 사항 이외에는 공개)
  • 이 페이지에서는 갈레라 클러스터를 구성하는 방법을 기재한다. (해당 페이지에서는 DB source 설치와 같이 동반하여 기재한다.)
  • OS : CentOS 7 / DB : MariaDB 10.3 을 기준으로 구성한다. (MySQL 은 따로 galera 라이브러리를 받아야 하기에 이 페이지에서는 편하게 기본적으로 DB 설치 시 구성되어 있는 MariaDB 를 사용한다.)
  • 갈레라 클러스터는 Donor, Joiner 라는 개념이 존재하는데 아래와 같은 개념으로 이해하면 된다. 갈레라 클러스터는 다른 H.A 와 같이 최소 3개의 노드 구성을 권장한다.

Host IP Role
galeradb01 192.168.137.101 Donor (다른 DB 서버들의 DB 동기 기준이 될 서버)
galeradb02 192.168.137.102 Joiner (기존 donor 에 추가 될 노드 서버. DB 기동 시, Donor DB 와 동기화 된다)
galeradb03 192.168.137.103 Joiner (기존 donor 에 추가 될 노드 서버. DB 기동 시, Donor DB 와 동기화 된다)

 

  • Donor 구성방법

- 우선 초기 VM 혹은 서버만 구성을 했다면 hostname 을 바꾼다. 아래의 my.cnf 파일 내에 galera 구성 시, 각 서버간의 고유 hostname 을 사용한다.

hostnamectl set-hostname galeradb01 (galeradb02, galeradb03 동일) 


- 실제 DB를 사용할 OS 계정인 mariadb 를 생성한다.

useradd mariadb -d /mariadb
(PW 까지 설정 필요 시, passwd mariadb 사용)


 -
DB 설치 시, 사용할 디렉토리 및 DB명을 변수화 한다. (설정명은 임의로 지정한다)

export DBNM=DB명


- 그 후, log 등의 각 용도의 파일들이 적재될 디렉토리를 생성한다.

mkdir -p /mariadb/$DBNM

mkdir -p /mariadb/$DBNM/scripts

mkdir -p /data/$DBNM/

mkdir -p /data/$DBNM/datadir

mkdir -p /data/$DBNM/tmpdir

mkdir -p /data/$DBNM/logdir

mkdir -p /data/$DBNM/logdir/oldlog

mkdir -p /data/$DBNM/binlog

mkdir -p /data/$DBNM/relaylog

mkdir -p /data/$DBNM/binary_backup

chown -R mariadb:mariadb /mariadb/$DBNM

chown mariadb:mariadb /mariadb

chown -R mariadb:mariadb /data/$DBNM

-- 각 디렉토리 설명 -- 

/mariadb/DB명/scripts : MariaDB 운영 편의를 위한 스크립트 파일들을 저장하기 위한 경로

/data/DB명/datadir : 데이터 파일을 저장하기 위한 경로. MariaDB내의 datadir 값으로 지정한다.

/data/DB명/tmpdir : 임시로 생성되는 파일을 저장하기 위한 경로. MariaDB내의 tmpdir 값으로 지정한다.

/data/DB명/logdir : 에러로그, 제너럴로그, 슬로우로그를 저장하기 위한 경로.

/data/DB명/logdir/oldlog : 에러로그, 제너럴로그, 슬로우로그의 보관 주기 관리에 사용하는 경로.

/data/DB명/binlog : 바이너리 로그 파일을 저장하기 위한 경로. MariaDB내의 log_bin 값으로 지정한다.

/data/DB명/relaylog : 릴레이 로그 파일을 저장하기 위한 경로. MariaDB내의 relay_log 값으로 지정한다.

/data/DB명/binary_backup : 설치 파일을 백업해두기 위한 경로.

 

- 그 후, 외부에서 받은 DB 및 기타 tool 프로그램들을 아래의 엔진을 구성할 경로로 이동한다. (아래의 경로 및 설치할 tool 은 임의로 조절 한다.)

mv /tmp/mariadb*.tar.gz /mariadb/$DBNM

mv /tmp/*xtrabackup*tar.gz /mariadb/$DBNM (xtrabackup 사용 시)

mv /tmp/*toolkit*tar.gz /mariadb/$DBNM (percona toolkit 사용 시)

chown mariadb:mariadb /mariadb/$DBNM/*gz


- 이동이 완료 되면 생성 해 두었던 mariadb 계정으로 로그인 후 위에서 설정했던 DBNM 변수를 설정한다.

su - mariadb
export DBNM=DB명


- 이동시켰던 DB의 tar.gz 파일의 압축을 푼다. 압축을 정상 해제 하면 아래와 같은 화면이 나온다.

su - mariadb
export DBNM=DB명


- 압축해제가 완료되면 원본 tar 파일은 설치 파일등을 보관하는 디렉토리에 이동 시킨다.
(이 예시에서는 binary_backup 디렉토리로 이동시킨다.)

mv *.gz /data/$DBNM/binary_backup


- 이동까지 완료되면 기존에 압축을 푼 디렉토리들에 대한 symbolic 링크를 설정 한다.

ln -s mariadb* instance

ln -s *xtrabackup* xtrabackup (xtrabackup 사용 시)

ln -s *toolkit* toolkit (percona toolkit 사용 시)


- 그 후 DB구성에 필요한 my.cnf 파일을 작성한다.
(이 페이지에서는 파라미터 관련 보안 유지를 위하여 갈레라 클러스터 구성 시 사용하는 파라미터만 기재한다. 실사용 파라미터는 사용환경에 맞게 임의로 구성한다.)


- 아래의 파라미터에서 실제 변경이 필요한 내용은 wsrep_cluster_address, wsrep_node_address, wsrep_node_name 다. wsrep_cluster_name 은 자기가 원하는 명칭으로 바꿔도 된다.
또한 $DBNM 은 직접 DB 명으로 바꾼다.

-- wsrep_cluster_address : 실제 갈레라 구성 시, 연결될 서버들의 IP를 설정 해 준다.
(이 페이지에서는 사용하는 서버 IP인 192.168.137.101, 192.168.137.102, 192.168.137.103 을 사용 한다.)


-- wsrep_node_address : DB 가 구성되는 서버의 IP 를 기재한다. (192.168.137.101)


-- wsrep_node_name : DB 가 구성되는 서버의 hostname 을 기재한다.
(위에서 set-hostname 으로 설정 했던 galeradb01 을 사용)

#사내 실제 사용 파라미터는 비공개

#------------------------------------------------------------#

#galera cluster

wsrep_on=ON

default-storage-engine=innodb

log_bin=/data/$DBNM/binlog/binlog

binlog_format=row

query_cache_size=0

query_cache_type=0

innodb_autoinc_lock_mode=2

innodb_locks_unsafe_for_binlog=1

query_cache_size=0

query_cache_type=0

bind-address=0.0.0.0

 

innodb_file_per_table

innodb_flush_log_at_trx_commit=2

wsrep_provider=/mariadb/$DBNM/instance/lib/libgalera_smm.so

wsrep_cluster_address=gcomm://192.168.137.101,192.168.137.102,192.168.137.103

wsrep_cluster_name='galera_cluster'

wsrep_node_address='192.168.137.101'

wsrep_node_name='galeradb01'

wsrep_sst_method=rsync

#galera cluster


- my.cnf 구성이 완료 되면 bash_profile 에 설정할 내용들을 기재 후 source 로 적용 한다.

echo '' >> ~/.bash_profile

echo export DBNM=$DBNM >> ~/.bash_profile

echo export PATH=/mariadb/$DBNM/instance/bin:/mariadb/$DBNM/xtrabackup/bin:/mariadb/$DBNM/toolkit/bin:'$PATH' >> ~/.bash_profile

echo alias cdmy="'cd /mariadb/$DBNM/instance'"  >> ~/.bash_profile

echo alias cdsp="'cd /mariadb/$DBNM/scripts'"  >> ~/.bash_profile

echo alias cddt="'cd /data/$DBNM/datadir'" >> ~/.bash_profile

echo alias cdlog="'cd /data/$DBNM/logdir'"  >> ~/.bash_profile

echo alias showerr="'vi /data/$DBNM/logdir/error.log'" >> ~/.bash_profile

echo alias tailerr="'tail -f /data/$DBNM/logdir/error.log'" >> ~/.bash_profile

 

source ~/.bash_profile


- 위의 기본 구성이 끝나면 아래의 엔진경로로 이동후, 명령어를 통해 data 를 저장할 경로에 초기 DB data 영역을 설치한다. 설치가 성공적으로 완료되면 아래와 같은 화면을 볼 수 있다.

cdmy
./scripts/mysql_install_db --defaults-file=/data/$DBNM/my.cnf


- 기동, 중지등에 필요한 스크립트를 작성한다.

1. 데이터베이스 기동 스크립트 작성

cat > /mariadb/$DBNM/scripts/startup.sh << EOF

#!/bin/sh

source ~mariadb/.bash_profile

cd /mariadb/$DBNM/instance

./bin/mysqld_safe --defaults-file=/data/$DBNM/my.cnf &

EOF

 

2. 데이터베이스 중단 스크립트 작성

cat > /mariadb/$DBNM/scripts/shutdown.sh << EOF

#!/bin/sh

source ~mariadb/.bash_profile

cd /mariadb/$DBNM/instance

./bin/mysqladmin shutdown -u root -p

EOF

 

 

3. 데이터베이스 접속 스크립트 작성

cat > /mariadb/$DBNM/scripts/conn.sh << EOF

#!/bin/sh

source ~mariadb/.bash_profile

cd /mariadb/$DBNM/instance

./bin/mysql -h localhost -u root -p

EOF

 

4. 로그파일 보관 주기 관리용 스크립트 작성

cat > /mariadb/$DBNM/scripts/logrotate.sh << EOF

#!/bin/sh

source ~mariadb/.bash_profile

cd /mariadb/$DBNM/instance

 

DATE=\`date -d '-1 days' +'%Y%m%d'\`

 

mv /data/$DBNM/logdir/error.log /data/$DBNM/logdir/oldlog/error.\${DATE}.log

mv /data/$DBNM/logdir/slow.log /data/$DBNM/logdir/oldlog/slow.\${DATE}.log

 

./bin/mysql -h localhost -u mariadb -e "flush logs"

 

find /data/$DBNM/logdir/oldlog -name '*.log' -ctime +180 -exec rm -f {} ';'

EOF

 

5. 클러스터 초기화용 스크립트 작성

cat > /mariadb/$DBNM/scripts/init.sh << EOF

#!/bin/sh

source ~mariadb/.bash_profile

cd /mariadb/$DBNM/instance

./bin/mysqld_safe --defaults-file=/data/$DBNM/my.cnf --wsrep-new-cluster &

EOF

 

- 이제 DB 를 기동시킨다. Donor 역할을 하는 서버는 init.sh 로 실행한다.
정상적으로 기동 시, 아래와 같이 DB 프로세스 이외에 WSREP 프로세스가 기동 된 것 을 볼 수 있다.

cdsp
sh init.sh

 

- 기동 후, 일반적인 db 로그인 방식으로 로그인 후, 패스워드를 바꾼다.

cdmy

./bin/mysql -h localhost -u root

alter user 'root'@'localhost' identified by '변경을 원하는 패스워드';

exit;


- 패스워드 변경 및 기타 사용하는 환경에 따라 DB를 구성 한 후, 작성했던 스크립트들으 테스트 해 본다.
아래와 같이 작성한 logrotate 는 정상 수행이 되면 아래와 같이 실행이전의 로그 기록은 oldlog 로 들어간다.
이를 이용하여 crontab 에서 일 단위로 수행을 설정하면 일단위의 log 기록들을 저장 할 수 있다.

 

  • Joiner 구성방법


- Joiner 는 위의 Donor 설치 과정에서 일부분만 수정해주면 된다.

- my.cnf 에서 설정이 필요한 wsrep_node_address 와 wsrep_node_name 을 각 서버에 맞게 바꿔준다.


- 그 후 02, 03 서버는 db 설치 없이 바로 startup.sh 로 기동시킨다. 정상 기동 시, Donor 서버 (d01) 의 DB data 를 가져오면서 복제 및 동기화가 된다.


- 3대 다 기동이 되었다면 DB 접속을 통하여 동일한 DB 리스트를 보여주는지 확인한다. 그 후, 01 서버에서 testdb 라는 테스트용 DB를 생성해 본다. 클러스터가 정상 작동 중일 시, 02 03 서버에서도 동일한 DB가 생성 됐음을 확인 할 수 있다.

create database testdb;

 

반응형

'MySQL > H.A (High Availability)' 카테고리의 다른 글

갈레라 클러스터 개요  (0) 2021.03.04
MHA 구성 방법  (0) 2021.03.04
MHA 개요  (0) 2021.03.03
MMM 구성 방법  (0) 2021.03.03
MMM 개요  (0) 2021.03.03
Comments