Skip to main content

corosync / pacemaker 기반의 DB이중화

시작하는 말

안녕하세요, 고니 입니다.
기존에 작성했던 컨텐츠들 업데이트를 하면서 문서의 리팩토링(Refactoring)을 진행해보려고 합니다.

DB이중화를 구현하는 방식은 여러가지 방식이 있을껀데, 여전히 고민되고, 24시간내내 무결성을 검증할 수가 없는것 같습니다.
그 중에 maxscale기반의 DB 이중화 운영도 있겠지만, 또 다른 방식인 DB자체는 Active / Standby 형태로 운영할 수 있는 방법을 구축 / 운영해보았습니다.

시스템 구성방법

Corosync & Packermaker로 서버간 상태 확인 / 서비스 전환 역활을 수행하고

Mysql을 DB데이터 동기화를 담당하게 됩니다. Failover / Failback 상태에도 데이터 유지를 위해 양쪽 replication 구성을 추천합니다

설치 & 구성하기 

설치에 대한 자세해내 사항은 :  corosync / pacemaker를 이용한 HA구성 여기를 참고하셔도 됩니다.

  1. 패키지 설치하기

    $> yum install corosync pacemkaer -y

  2. 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

  3. 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

  4. 구성정보 확인

    # 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