Open gigs4014 opened 9 months ago
==== [VM1, VM2 실행]
firewall-cmd --permanent --zone=public --add-port=22/tcp
firewall-cmd --permanent --zone=public --add-service=high-availability
firewall-cmd --add-service=high-availability
==== [VM1, VM2 실행]
dnf -y upgrade
dnf -y config-manager --set-enabled crb
dnf -y install epel-release
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
dnf --enablerepo=highavailability -y install pacemaker pcs fence-agents-all
systemctl start pcsd
systemctl enable pcsd
systemctl enable corosync
systemctl enable pacemaker
cat /etc/passwd |grep hacluster
passwd hacluster
vi /etc/hosts
----------------------------------------------------
####Pacemaker Hearbeat IP####
10.10.254.100 lilo-ha1
10.10.254.101 lilo-ha2
systemctl restart NetworkManager
==== [VM1 실행]
pcs host auth lilo-ha1 lilo-ha2 -u hacluster -p Ablecloud1!
pcs cluster setup hacluster --start lilo-ha1 lilo-ha2
==== [VM1, VM2 실행]
systemctl start pacemaker
==== [VM1, VM2 실행]
fdisk /dev/sdb
=> n, 엔터, 엔터, 엔터, 엔터, 엔터, t, 8e, w
pvcreate /dev/sdb1 pvdisplay
vgcreate able /dev/sdb1 vgdisplay
lvcreate -l 100%FREE -n lv_data able lvdisplay
mkfs.xfs -f /dev/able/lv_data
#### lvm.conf 설정
==== [VM1, VM2 실행]
LVM-activate를 등록할 때 해당 system_id를 사용하기 때문에 /etc/lvm/lvm.conf 구성 파일에서 system_id_source 구성 옵션을 uname 으로 설정합니다.
vi /etc/lvm/lvm.conf
system-id 확인
vgs -o+systemid
### Mysql 설치 및 구성
==== [VM1, VM2 실행]
#### Mysql를 설치합니다.
* mysql 서비스는 enable 하지 않습니다. Mysql pcs resource에 의해 mysql이 실행됩니다.
dnf install -y mysql-server
#### mysql을 구성합니다.
mysqld --initialize --datadir=/mnt/share/mysql semanage fcontext -a -t mysqld_db_t "/mnt/share/mysql(/.*)?" restorecon -R -v /mnt/share/mysql chown -R mysql:mysql /mnt/share/mysql chmod -R 750 /mnt/share/mysql systemctl restart mysqld mysql -uroot -p ALTER USER 'root'@'localhost' IDENTIFIED BY 'Ablecloud1!'; FLUSH PRIVILEGES;
[mysqld] datadir=/mnt/share/mysql socket=/mnt/share/mysql/mysql.sock
[client] socket=/mnt/share/mysql/mysql.sock
## 4. mold_fence agent 설치 및 stonith 구성
- Mold Agent는 Mold와 통신이 가능한 구성에서 사용 가능합니다.
- Mold Agent의 fencing 처리 절차
1. Master node 장애 발생
2. Slave node에서 동작 중인 'fence-node1' stonith를 통해 Master node를 fencing 처리
1. delay 옵션 설정에 의해 fencing 처리 대기
2. Mold 상태 값 조회
3. 해당 VM 종료 명령
3. Master 에서 Slave node로 서비스 이관 (환경에 따라 20초~1분 정도 소요)
### Mold fence agent 설치
==== [VM1, VM2 실행]
wget -P /root/ https://images.ablecloud.io/fence-mold-1.0-1.el9.x86_64.rpm rpm -Uvh /root/fence-mold-1.0-1.el9.x86_64.rpm --force
### PCS resource 등록
fencing 처리를 위한 stonith resource 구성
#### 각 노드에 fencing 처리를 위한 stonith를 생성하고 구성.
* 명령어 정보는 `fence_mold -h` 를 입력하여 확인
1) stonith 생성
pcs stonith create fence-node1 fence_mold \ api_protocol="http" \ m_ip="10.10.1.10" \ m_port="8080" \ api_key="ew68uZifMjNXd6PbRUGtvVA98TnohwDc6R73-kq_tvI" \ secret_key="xrWdgQNJMoAzhtnJYl7-fGApjLxhz4GHqnuMrSbVn2E" \ vm_id="0d859221-87a6-428b-9516-f9727e22ec20" \ delay="15" pcmk_host_list="lilo-ha1" \ pcmk_reboot_action="off"
delay: 펜싱 프로세스에서 오탐지를 유발할 수 있는 일시적인 문제로부터 시스템이 복구할 수 있는 시간을 제공하며 동시에 fencing되는 현상 방지
pcs stonith create fence-node2 fence_mold \ api_protocol="http" \ m_ip="10.10.1.10" \ m_port="8080" \ api_key="ew68uZifMjNXd6PbRUGtvVA98TnohwDc6R73-kq_tvI" \ secret_key="xrWdgQNJMoAzhtnJYl7-fGApjLxhz4GHqnuMrSbVn2E" \ vm_id="fb42b9ff-43c2-49b2-9641-1ca2c67e43f9" \ pcmk_host_list="lilo-ha2" \ pcmk_reboot_action="off"
* stonith 업데이트 방법
설정 요소 변경에 따른 업데이트 명령어는 다음과 같습니다.
pcs stonith update fence-node1 api_key="3568uZifMjNXd6PSDFEsfdtvVA98TnohwDc6R73-kq_tvI" m_port="8443"
2) stonith 정책 설정
서로 다른 노드에서 실행되도록 설정
pcs constraint location fence-node1 avoids lilo-ha1 pcs constraint location fence-node2 avoids lilo-ha2
기본 stonith 액션을 power off로 변경
pcs property set stonith-action=off
## 5. Mysql Failover를 위한 pcs resource 구성
lvm, file system, mysql을 pcs resource로 등록하고 그룹화하여 한 Node에서만 실행되고 이동되도록 구성합니다.
* resource group은 등록 순서에 따라 실행됩니다.
#### LVM-activate resource 에이전트 등록
pcs resource create cluster-vg ocf:heartbeat:LVM-activate vgname=able activation_mode=exclusive vg_access_mode=system_id --group test-grp
#### Filesystem resource 에이전트 등록
pcs resource create cluster-fs ocf:heartbeat:Filesystem device=/dev/able/lv_data directory=/mnt/share/ fstype=xfs --group test-grp
#### VIP resource 등록
pcs resource create vip ipaddr2 ip=10.10.254.199 cidr_netmask=16 op monitor interval=10 --group test-grp pcs resource meta vip migration-threshold=1 pcs resource meta vip resource-stickiness=50
#### Mysql resource 에이전트 등록
* mysql은 systemctl service로 실행되는 것이 아닌, pcs agent에 의해 실행됩니다.
pcs resource create mysql ocf:heartbeat:mysql binary="/usr/sbin/mysqld" config="/etc/my.cnf.d/mysql-server.cnf" datadir="/mnt/share/mysql" pid="/run/mysql/mysqld.pid" socket="/mnt/share/mysql/mysql.sock" op start timeout=60s op stop timeout=60s op monitor interval=20s timeout=30s --group test-grp
## 구성 완료된 pcs 상태 확인
![image](https://github.com/ablecloud-team/ablestack-cloud/assets/34114265/d0c5a9de-f3a5-4d2b-aea9-75b47ddf4354)
![image](https://github.com/ablecloud-team/ablestack-cloud/assets/34114265/bfc7ca5c-ee3f-4d7c-8018-f31508ab18ad)
rpmbuild
소스 파일 및 spec 파일 준비
Summary: Fence Agent for Something
Name: fence-mold
Version: 1.0
Release: 1%{?dist}
License: GPLv2+
Source0: fence_mold
Source1: fence_mold.8
%description This is a fence agent for something.
%install mkdir -p %{buildroot}/usr/sbin install -m 755 %{SOURCE0} %{buildroot}/usr/sbin
mkdir -p %{buildroot}/usr/share/man/man8 install -m 644 %{SOURCE1} %{buildroot}/usr/share/man/man8
%files %doc %{_mandir}/man8/fence_mold.8.gz /usr/sbin/fence_mold
상기 기술된 'Linux 환경에서의 Pacemaker와 Mold fence agent를 이용한 Mysql FailOver 구성' 내용에 따라 pcs 클러스터를 구성한 상태에서 VM1(Master)을 다른 호스트로 마이그레이션 할 경우를 테스트 하였습니다.
Mold 용 Fencing Agent
개요
기존의 Fencing Agent를 ipmilan를 활용하였으며, 해당 Agent를 활용하기 위해서는 가상머신에 vbmc 디바이스를 연결 후 해당 가상머신이 운영중인 호스트에 VBMC 포트포워딩을 연결 해줘야 구성이 가능함
해당 방식을 이용할 경우 문제점은 아래와 같다
이와 같은 이유로 Mold에서 위 문제점을 해결 할 수 있는 Mold 용 Agent 를 개발을 진행 한다.
개발 방식
개발 완료 후 테스트 항목