# corosync / pacemaker 기반의 DB이중화
### 시작하는 말
안녕하세요, 고니 입니다.
기존에 작성했던 컨텐츠들 업데이트를 하면서 문서의 리팩토링(Refactoring)을 진행해보려고 합니다.
DB이중화를 구현하는 방식은 여러가지 방식이 있을껀데, 여전히 고민되고, 24시간내내 무결성을 검증할 수가 없는것 같습니다.
그 중에 [maxscale기반의 DB 이중화 운영](http://igoni.kr/books/4-dbms/page/maxscale-db "maxscale기반의 DB 이중화 운영")도 있겠지만, 또 다른 방식인 DB자체는 Active / Standby 형태로 운영할 수 있는 방법을 구축 / 운영해보았습니다.
### 시스템 구성방법
|
Corosync & Packermaker로 서버간 상태 확인 / 서비스 전환 역활을 수행하고
Mysql을 DB데이터 동기화를 담당하게 됩니다. Failover / Failback 상태에도 데이터 유지를 위해 양쪽 replication 구성을 추천합니다
|
### 설치 & 구성하기
설치에 대한 자세해내 사항은 : [corosync / pacemaker를 이용한 HA구성](http://igoni.kr/books/2-open-infra/page/corosync-pacemaker-ha "corosync / pacemaker를 이용한 HA구성") 여기를 참고하셔도 됩니다.
1. #### 패키지 설치하기
```bash
$> yum install corosync pacemkaer -y
```
2. #### Mysql 서버간 health check를 위한 스크립트 구성
```bash
$> vi /etc/init.d/db_check
#!/bin/bash
case "$1" in
"start")
echo "start"
;;
"stop")
echo "stop"
;;
# mysql에 구성된 read-only계정(서비스 상태 확인용) 생성해서 localhost 접속하여 현재시간 - select now() 쿼리 실행
"status")
mysql --connect-timeout 2 -u monitor -p'모니터 계정패스워드' -h localhost -Nse 'select now()'
result_code=$?
#비정상 응답일 경우 로그를 남기고 DB VIP를 상대방 IP로 이전
if [[ $result_code -eq 1 ]]
then
echo "[$(date +%Y-%m-%d-%H:%M:%S)] DB Connection Error" >> /var/log/db_check
pcs resource move DB_GROUP {{ 상대방IP }}
fi
;;
*)
echo "start|stop|status"
exit 1
;;
esac
```
3. #### DB이중화를 위한 HA resource 구성
```bash
$> pcs cluster setup db_ha {{ DB1_IP }} {{ DB2_IP }} --force
$> pcs cluster start --all
$> pcs property set stonith-enabled=false
$> pcs property set no-quorum-policy=ignore
$> pcs resource defaults update resource-stickiness=100
$> pcs resource create DB_CHECK service:db_check op status timeout=10s interval=10s --group DB_GROUP
$> pcs resource create DB_VIP ocf:heartbeat:IPaddr2 ip={{ DB_VIP }} cidr_netmask=32 op monitor interval=10s --group DB_GROUP
```
4. #### 구성정보 확인
```bash
# crm_mon -1
Stack: classic openais (with plugin)
Current DC: TEST-DB#1 (version 1.1.18-3.el6-bfe4e80420) - partition with quorum
Last updated: Wed Dec 18 18:29:46 2019
Last change: Mon Sep 2 19:26:34 2019 by root via crm_resource on TEST-DB#1
2 nodes configured (2 expected votes)
5 resources configured
Online: [ TEST-DB#1 TEST-DB#2 ]
Active resources:
Resource Group: DB_GROUP
DB_CHECK (ocf::heartbeat:Filesystem): Started TEST-DB#1
DB_VIP (ocf::heartbeat:Filesystem): Started TEST-DB#1
```
### *Reference*
- *[https://docs.redhat.com/ko/documentation/red\_hat\_enterprise\_linux/8/html/configuring\_and\_managing\_high\_availability\_clusters/con\_pacemaker-overview-overview-of-high-availability](https://docs.redhat.com/ko/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_high_availability_clusters/con_pacemaker-overview-overview-of-high-availability)*
- *[https://tech.osci.kr/%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-linux-pacemaker%EC%9D%98-%EC%9D%B4%ED%95%B4/](https://tech.osci.kr/%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-linux-pacemaker%EC%9D%98-%EC%9D%B4%ED%95%B4/)*