Pacemaker를 이용한 HA-Proxy 이중화 구성
KVM 가상화를 이용한 MASTER / SLAVE 구성을 다룬다.
구성 환경
- KVM Virtual Machine
- CentOS 7
- Pacemaker / Corosync
- Heartbeat Network
Pacemaker 설치 및 구성
Pacemaker는 Heartbeat Network으로 구성되기 때문에 다음과 같이 /etc/hosts
파일에 IP를 설정한다.
# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.233 haproxy-master
192.168.200.234 haproxy-slave
아래와 같이 모든 Node에 Pacemaker 패키지를 설치한다.
[ALL]# yum install pcs fence-agents-all
위의 패키지는 CentOS 기본(Base) 패키지에서 제공한다.
설치를 마무리 한다.
[ALL]# systemctl start pcsd; systemctl enable pcsd
[ALL]# echo 패스워드 | passwd --stdin hacluster
[MASTER]# pcs cluster auth haproxy-master haproxy-slave
[MASTER]# pcs cluster setup --start --name L4 haproxy-master haproxy-slave
[MASTER]# pcs cluster enable --all
[MASTER]# pcs property set stonith-enabled=false
[MASTER]# pcs property set no-quorum-policy=ignore
!중요
: 클러스터 Quorum 및 Fencing 설정
다음의 클러스터 구성은 2 Node로 구성되기 때문에 정족수(Quorum) 설정을 비활성화하여야 한다. 또한 Fence Device(IPMI 등)가 구성되지 않은 경우에도 설정(stonith)을 비활성화 해야 한다. 만약
이 설정이 무시될 경우 클러스터가 구성되지 않는다.
클러스터 리소스 구성 및 용도
- 서비스 / Private VIP 리소스 구성 => 서비스 VIP 사용
- HA-PROXY 설치 및 리소스 구성 => Load Balancer 서비스
- Memcached 설치 및 리소스 구성 => WEB Session Store 서비스
- 클러스터 제약조건 설정
서비스 / Private VIP 구성
[MASTER]# pcs resource create PU-VIP IPaddr2 ip=61.100.0.XX cidr_netmask=32 nic=eth0 op monitor interval=10s timeout=30s on-fail=standby
[MASTER]# pcs resource create PR-VIP IPaddr2 ip=172.24.0.XX cidr_netmask=32 nic=eth1 op monitor interval=10s timeout=30s on-fail=standby
서비스 VIP(61.100.0.XX)를 설정
하고, 시스템의 nic는 eth0, 모니터링 주기는 10초, 최종 timeout은 30초로 설정한다. 만약 현재 Owner의 장애가 발생하면, Standby로 Role을 이관한다.
HA-PROXY 설치 및 리소스 구성
[ALL]# yum install haproxy
!중요
: haproxy 데몬은 pacemaker가 제어해야하기 때문에 리부팅 후 실행되지않게 비활성처리가 되어야 함
[ALL]# systemctl disable haproxy
다음과 같이 클러스터 리소스로 haproxy 데몬을 등록한다.
[MASTER]# pcs resource create HAPROXY systemd:haproxy
Memcached 설치 및 리소스 구성
[ALL]# yum install memcached
!중요
: memcached 데몬은 pacemaker가 제어해야하기 때문에 리부팅 후 실행되지않게 비활성처리가 되어야 함
[ALL]# systemctl disable memcached
다음과 같이 클러스터 리소스로 haproxy 데몬을 등록한다.
[MASTER]# pcs resource create HAPROXY systemd:memcached
클러스터 제약조건 설정
위와 같이 서비스가 등록되면, MASTER / SLVAE의 구분없이, 서로 리소스를 실행하려고 한다.
- 클러스터 리소스 시작순서 설정
- [ STEP 1 ] : 서비스 Public IP / Private IP 실행
[MASTER]# pcs constraint order start PU-VIP then start PR-VIP
PU(Public IP)-VIP 리소스를 실행한 후 PR-VIP 리소스를 실행한다.
- [ STEP 2 ] : Private IP / HA-PROXY 실행
[MASTER]# pcs constraint order start PR-VIP then start HAPROXY
PR(Private IP)-VIP 리소스를 실행한 후 HAPROXY 리소스를 실행한다.
- [ STEP 3 ] : Memcached를 실행
[MASTER]# pcs constraint order start HAPROXY then start MEMCACHED
- [ STEP 4 ] : 중요 클러스터 리소스의 우선순위 설정
[MASTER]# pcs constraint colocation add PU-VIP with PR-VIP
[MASTER]# pcs constraint colocation add PR-VIP with HAPROXY
[MASTER]# pcs constraint colocation add HAPROXY with MEMCACHED
이 설정은 클러스터의 모든 리소스가 Owner Node에서 실행됨을 의미한다.
클러스터 구성내역
# pcs status
Cluster name: L4
Stack: corosync
Current DC: haproxy-master (version 1.1.20-5.el7_7.2-3c4c782f70) - partition with quorum
Last updated: Tue Mar 2 10:47:58 2021
Last change: Wed Feb 3 04:51:30 2021 by root via crm_resource on haproxy-master
2 nodes configured
4 resources configured
Online: [ haproxy-master haproxy-slave ]
Full list of resources:
PU-VIP (ocf::heartbeat:IPaddr2): Started haproxy-master
PR-VIP (ocf::heartbeat:IPaddr2): Started haproxy-master
HAPROXY (systemd:haproxy): Started haproxy-master
MEMCACHED (systemd:memcached): Started haproxy-master
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
다음은 리소스의 제약조건에 대한 결과이다.
# pcs resource --full
Resource: PU-VIP (class=ocf provider=heartbeat type=IPaddr2)
Attributes: cidr_netmask=32 ip=61.100.0.XX nic=eth0
Operations: monitor interval=10s on-fail=standby timeout=30s (PU-VIP-monitor-interval-10s)
start interval=0s timeout=20s (PU-VIP-start-interval-0s)
stop interval=0s timeout=20s (PU-VIP-stop-interval-0s)
Resource: PR-VIP (class=ocf provider=heartbeat type=IPaddr2)
Attributes: cidr_netmask=32 ip=192.168.200.XX nic=eth1
Operations: monitor interval=10s on-fail=standby timeout=30s (PR-VIP-monitor-interval-10s)
start interval=0s timeout=20s (PR-VIP-start-interval-0s)
stop interval=0s timeout=20s (PR-VIP-stop-interval-0s)
Resource: HAPROXY (class=systemd type=haproxy)
Operations: monitor interval=60 timeout=100 (HAPROXY-monitor-interval-60)
start interval=0s timeout=100 (HAPROXY-start-interval-0s)
stop interval=0s timeout=100 (HAPROXY-stop-interval-0s)
Resource: MEMCACHED (class=systemd type=memcached)
Operations: monitor interval=60 timeout=100 (MEMCACHED-monitor-interval-60)
start interval=0s timeout=100 (MEMCACHED-start-interval-0s)
stop interval=0s timeout=100 (MEMCACHED-stop-interval-0s)
클러스터 관리명령
- 클러스터 리소스 CleanUP 수행
클러스터에 에러가 발생할 경우 다음과 같이 CleanUP
을 수행해야 처리할수 있다.
[OWNER]# pcs resource cleanup 리소스명
단, 시스템 구성이나 데몬에 이상이 발생되면, 에러는 Fix되지 않고 계속 발생될 것이다. 이는 기 발생된 에러에 대한 CleanUP 처리이다.
- 클러스터 리소스 Relocate 수행
현재 운용되는 클러스터의 유지보수로 인해 Slave Node로의 On-demand 절체(relocate)
를 수행할 수 있다.
[OWNER]# pcs resource relocate 리소스명