corosync / pacemaker 기반의 DB이중화
시작하는 말
안녕하세요, 고니 입니다.
기존에 작성했던 컨텐츠들 업데이트를 하면서 문서의 리팩토링(Refactoring)을 진행해보려고 합니다.
DB이중화를 구현하는 방식은 여러가지 방식이 있을껀데, 여전히 고민되고, 24시간내내 무결성을 검증할 수가 없는것 같습니다.
그 중에 maxscale기반의 DB 이중화 운영도 있겠지만, 또 다른 방식인 DB자체는 Active / Standby 형태로 운영할 수 있는 방법을 구축 / 운영해보았습니다.
시스템 구성방법
Corosync & Packermaker로 서버간 상태 확인 / 서비스 전환 역활을 수행하고 Mysql을 DB데이터 동기화를 담당하게 됩니다. Failover / Failback 상태에도 데이터 유지를 위해 양쪽 replication 구성을 추천합니다 |
설치 & 구성하기
설치에 대한 자세해내 사항은 : corosync / pacemaker를 이용한 HA구성 여기를 참고하셔도 됩니다.
-
패키지 설치하기
$> yum install corosync pacemkaer -y
-
Mysql 서버간 health check를 위한 스크립트 구성
$> 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
-
DB이중화를 위한 HA resource 구성
$> 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
-
구성정보 확인
# 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://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/