간마늘작업소

[MariaDB] 이중화 구성 (DRBD / Pacemaker 이용) - 03.Pacemaker 이중화 설정 본문

Linux/32.MySQL, MariaDB

[MariaDB] 이중화 구성 (DRBD / Pacemaker 이용) - 03.Pacemaker 이중화 설정

간마늘 2022. 8. 25. 16:50
[MariaDB] 이중화 구성 (DRBD / Pacemaker 이용)
01.DRBD 구성 02.MariaDB 디렉토리 변경 03.Pacemaker 이중화 설정

0.개요

  1. Pacemaker를 이용한 MariaDB 이중화 설정.
  2. 안내 사항
    • OS 방화벽(Firewalld, iptables)과 SELinux는 비활성화 상태로 설정.
    • 하단 명령어 중 적색 글씨는 DB Node 1에만 적용.
    • 하단 명령어 중 청색 글씨는 DB Node 2에만 적용.
  3. 기본 정보
    • Master-Standby 구조의 HA 구성.
    • 기본 Master는 DB Node 1으로 설정.
      1. Failover 요인 발생시 Pacemaker에 의해 Master가 DB Node 2로 전환.
      2. DB Node 1이 복구되면 Pacemaker가 이를 인지하고 Master를 다시 DB Node 1으로 전환.

 

1.Hosts 파일 수정

1.1.Hosts 파일 수정

vi /etc/hosts
192.168.0.171 mariadb01
192.168.0.172 mariadb02
  • DB Node 정보 추가 후 저장.

 

2.Pacemaker 설치

yum install pacemaker pcs fence-agents-all psmisc -y
  • Pacemaker 설치
echo [Cluster 비밀번호] | passwd hacluster --stdin
  • hacluster 계정에 대한 비밀번호 지정.
    • 필자는 1234로 지정함. (echo 1234 | passwd hacluster --stdin)
systemctl disable mariadb
systemctl start pcsd
  • MariaDB 자동실행 옵션 해제.
    • 기본적으로 해제되어 있으나, Pacemaker에 의해 기동되어야 하므로 다시 한 번 체크할 것.
  • PCSD 실행.

 

3.Pacemaker Cluster 설정

  • 아래 설정은 Pacemaker Cluster에서 사용할 Node 중 한 곳에서만 진행하면 됨.
  • 나머지 Node들은 자동으로 반영됨.
  • 필자는 DB Node 1에서 작업을 진행함.

3.1.Pacemaker Node 인증

RHEL 7 / CentOS 7 )

pcs cluster auth mariadb01 mariadb02 -u hacluster -p 1234

RHEL 8 / CentOS 8 / Rocky Linux 8 )

pcs host auth mariadb01 mariadb02 -u hacluster -p 1234
  • 사용할 Node 정보는 hosts 파일에서 확인함.

3.2.Pacemaker Cluster 생성

RHEL 7 / CentOS 7 )

pcs cluster setup --name mariadb_cluster mariadb01 mariadb02

RHEL 8 / CentOS 8 / Rocky Linux 8 )

pcs cluster setup mariadb_cluster mariadb01 mariadb02
  • Cluster 이름 : mariadb_cluster
pcs cluster start --all
pcs cluster enable --all
  • Pacemaker Cluster 시작.
  • Pacemaker Cluster 자동 실행 설정.

3.3.Pacemaker Cluster 기본 설정

pcs property set default-resource-stickiness=100 --force
pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
  • default-resource-stickiness=100 : 장애 처리 후 리소스 이동 방지 설정
  • stonith-enabled=false : 리소스 등록 시 fence device 작동 방지
  • no-quorum-policy=ignore : Quorum 설정을 비활성화. 보통 2개 Node로 Cluster를 구성할 때 비활성화 함.
pcs property show
  • 설정 확인.
pcs status
  • Pacemaker Cluster 상태 확인.

3.4.Pacemaker Cluster 리소스 등록

pcs cluster cib /etc/drbd.d/drbd_cfg
  • Pacemaker Cluster 리소스를 /etc/drbd.d/drbd_cfg 경로에 파일을 생성하여 등록하도록 반영 준비.

3.4.1.DRBD 동기화 설정

pcs -f /etc/drbd.d/drbd_cfg resource create [등록할 리소스 이름] ocf:linbit:drbd drbd_resource=[제어할 DRBD 리소스 이름] op monitor timeout="30s" interval="20s" role="Slave" op monitor timeout="30s" interval="10s" role="Master"
  • 명령어 기본 구조. 필자가 적용한 명령어는 하단 참조.
pcs -f /etc/drbd.d/drbd_cfg resource create drbd_data ocf:linbit:drbd drbd_resource=resource0 op monitor timeout="30s" interval="20s" role="Slave" op monitor timeout="30s" interval="10s" role="Master"
  • 등록할 Pacemaker 리소스 이름 : drbd_data
  • 제어할 DRBD 리소스 이름 : resource0

RHEL 7 / CentOS 7 )

pcs -f /etc/drbd.d/drbd_cfg resource master [생성할 리소스 이름] [참조 리소스 이름] promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true
  • 명령어 기본 구조. 필자가 적용한 명령어는 하단 참조.
pcs -f /etc/drbd.d/drbd_cfg resource master drbd_data-clone drbd_data promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true

RHEL 8 / CentOS 8 / Rocky Linux 8 )

pcs -f /etc/drbd.d/drbd_cfg resource promotable [참조 리소스 이름] promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true
  • 명령어 기본 구조. 필자가 적용한 명령어는 하단 참조.
pcs -f /etc/drbd.d/drbd_cfg resource promotable drbd_data promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true
  • RHEL 8은 resource master가 아닌 resource promotable를 사용.
  • 리소스 이름 역시 RHEL 7은 별도로 지정해야 하지만 RHEL 8은 참조 리소스 이름에 '-clone'이 접미되어 자동 생성됨.
  • 리소스 이름 : drbd_data-clone
  • 참조 리소스 : drbd_data

3.4.2.DRBD 공유 볼륨 등록 설정

pcs -f /etc/drbd.d/drbd_cfg resource create [등록할 리소스 이름] Filesystem device="[볼륨 장치 이름]" directory="[마운트 위치]" fstype="[포맷]"
pcs -f /etc/drbd.d/drbd_cfg constraint colocation add [등록할 리소스 이름] with [참조 DRBD 리소스 이름] INFINITY with-rsc-role=Master
pcs -f /etc/drbd.d/drbd_cfg constraint order promote [참조 DRBD 리소스 이름] then start [등록할 리소스 이름]
  • 명령어 기본 구조. 필자가 적용한 명령어는 하단 참조.
pcs -f /etc/drbd.d/drbd_cfg resource create maria_data_fs Filesystem device="/dev/drbd0" directory="/data" fstype="xfs"
pcs -f /etc/drbd.d/drbd_cfg constraint colocation add maria_data_fs with drbd_data-clone INFINITY with-rsc-role=Master
pcs -f /etc/drbd.d/drbd_cfg constraint order promote drbd_data-clone then start maria_data_fs
  • 등록할 Pacemaker 리소스 이름 : maria_data_fs
    • 볼륨 장치 이름 : /dev/drbd0
    • 마운트 위치 : /data
    • 볼륨 장치 포맷 : xfs
  • 연계할 DRBD 리소스 이름 : drbd_data-clone

3.4.3.VIP 등록 설정

pcs -f /etc/drbd.d/drbd_cfg resource create [등록할 리소스 이름] ocf:heartbeat:IPaddr2 ip="[사용할 IP 주소]" nic="[네트워크 장치 이름]" cidr_netmask="32" op monitor timeout="30s" interval="20s" role="Slave" op monitor timeout="30s" interval="10s" role="Master"
  • 명령어 기본 구조. 필자가 적용한 명령어는 하단 참조.
pcs -f /etc/drbd.d/drbd_cfg resource create maria_vip ocf:heartbeat:IPaddr2 ip="192.168.0.170" nic="eth0" cidr_netmask="32" op monitor timeout="30s" interval="20s" role="Slave" op monitor timeout="30s" interval="10s" role="Master"
  • 등록할 Pacemaker 리소스 이름 : maria_vip
    • 사용할 IP :  192.168.0.170
    • 네트워크 장치 이름 : eth0

3.4.4.MariaDB 프로세스 등록 설정

pcs -f /etc/drbd.d/drbd_cfg resource create [등록할 리소스 이름] ocf:heartbeat:mysql binary="/usr/bin/mysqld_safe" socket="[MariaDB 소켓 위치]" config="/etc/my.cnf" datadir="[MariaDB 디렉토리 위치]" op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s
  • 명령어 기본 구조. 필자가 적용한 명령어는 하단 참조.
pcs -f /etc/drbd.d/drbd_cfg resource create mariadb ocf:heartbeat:mysql binary="/usr/bin/mysqld_safe" socket="/data/mariadb/mysql.sock" config="/etc/my.cnf" datadir="/data/mariadb" op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s
  • 등록할 Pacemaker 리소스 이름 : mariadb
    • MariaDB 소켓 위치 : /data/mariadb/mysql.sock
    • MariaDB 디렉토리 위치 : /data/mariadb

3.4.5.설정 마무리

pcs -f /etc/drbd.d/drbd_cfg resource group add maria-Group maria_data_fs maria_vip mariadb
pcs -f /etc/drbd.d/drbd_cfg constraint order start maria_data_fs then mariadb
pcs -f /etc/drbd.d/drbd_cfg constraint location maria_data_fs prefers mariadb01=1000
pcs -f /etc/drbd.d/drbd_cfg constraint location maria_vip prefers mariadb01=1000
pcs -f /etc/drbd.d/drbd_cfg constraint location mariadb prefers mariadb01=1000
  • 리소스 그룹 생성
    • 리소스 그룹 이름 : maria-Group
    • 그룹에 포함시킬 리소스 목록 : maria_data_fs maria_vip mariadb
    • pcs constraint order start A then B
      • B 리소스는 A 리소스가 시작된 이후에 실행한다.
    • pcs constraint location A prefers NODE1=1000
      • A 리소스의 기본 Master는 NODE1이다.
pcs cluster cib-push /etc/drbd.d/drbd_cfg
  • /etc/drbd.d/drbd_cfg에 등록한 Pacemaker Cluster 리소스를 반영.
pcs constraint colocation add maria_data_fs with maria_vip
pcs constraint colocation add maria_vip with mariadb
  • pcs constraint colocation add A with B
    • A 리소스와 B 리소스는 같은 Node에서 시작한다.
pcs resource cleanup
  • 리소스 재시작.

3.5.Pacemaker 상태 확인

pcs resource config
  • 등록한 Pacemaker 리소스 설정 확인.
cat /etc/drbd.d/drbd_cfg
  • 별도 파일에 등록한 경우, 해당 파일을 읽는 것으로도 Pacemaker 리소스 설정 확인 가능.
pcs status

  • Pacemaker Cluster 상태 확인
    • Cluster 이름 : mariadb_cluster
    • Node 정보 : mariadb01, mariadb02
    • DRBD 동기화 설정 : Master mariadb01
    • DRBD 공유 볼륨 : 시작 위치 mariadb01
    • VIP : 시작 위치 mariadb01
    • MariaDB 프로세스 : 시작 위치 mariadb01
  • Standby인 DB Node 2에서도 동일한 내용 확인 가능.

 

4.기타

4.1.Failover 테스트

pcs node standby mariadb01
  • DB Node 1을 강제로 Standby 상태로 전환.
  • 이후 pcs status로 DB Node 1 상태 확인.
pcs node unstandby mariadb01
  • DB Node 1을 정상 대기 상태로 전환.
  • 이후 pcs status로 DB Node 1 상태 확인.
[MariaDB] 이중화 구성 (DRBD / Pacemaker 이용)
01.DRBD 구성 02.MariaDB 디렉토리 변경 03.Pacemaker 이중화 설정
Comments