[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net) # Pacemaker를 이용한 HA-Proxy 이중화 구성 > KVM 가상화를 이용한 MASTER / SLAVE 구성을 다룬다. # 구성 환경 - KVM Virtual Machine - CentOS 7 - Pacemaker / Corosync - Heartbeat Network ## Overview ![ha_proxy](./images/ha-proxy.png) ## Pacemaker 설치 및 구성 Pacemaker는 Heartbeat Network으로 구성되기 때문에 다음과 같이 `/etc/hosts` 파일에 IP를 설정한다. ```bash # 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 패키지를 설치한다. ```bash [ALL]# yum install pcs fence-agents-all ``` > 위의 패키지는 CentOS 기본(Base) 패키지에서 제공한다. 설치를 마무리 한다. ```bash [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 구성 ```bash [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 설치 및 리소스 구성 ```bash [ALL]# yum install haproxy ``` `!중요` : haproxy 데몬은 pacemaker가 제어해야하기 때문에 리부팅 후 실행되지않게 비활성처리가 되어야 함 ```bash [ALL]# systemctl disable haproxy ``` 다음과 같이 클러스터 리소스로 haproxy 데몬을 등록한다. ```bash [MASTER]# pcs resource create HAPROXY systemd:haproxy ``` ## Memcached 설치 및 리소스 구성 ```bash [ALL]# yum install memcached ``` `!중요` : memcached 데몬은 pacemaker가 제어해야하기 때문에 리부팅 후 실행되지않게 비활성처리가 되어야 함 ```bash [ALL]# systemctl disable memcached ``` 다음과 같이 클러스터 리소스로 haproxy 데몬을 등록한다. ```bash [MASTER]# pcs resource create MEMCACHED systemd:memcached ``` ## 클러스터 제약조건 설정 > 위와 같이 서비스가 등록되면, MASTER / SLVAE의 구분없이, 서로 리소스를 실행하려고 한다. - 클러스터 리소스 시작순서 설정 * [ **STEP 1** ] : 서비스 Public IP / Private IP 실행 ```bash [MASTER]# pcs constraint order start PU-VIP then start PR-VIP ``` > PU(Public IP)-VIP 리소스를 실행한 후 PR-VIP 리소스를 실행한다. * [ **STEP 2** ] : Private IP / HA-PROXY 실행 ```bash [MASTER]# pcs constraint order start PR-VIP then start HAPROXY ``` > PR(Private IP)-VIP 리소스를 실행한 후 HAPROXY 리소스를 실행한다. * [ **STEP 3** ] : Memcached를 실행 ```bash [MASTER]# pcs constraint order start HAPROXY then start MEMCACHED ``` * [ **STEP 4** ] : 중요 클러스터 리소스의 우선순위 설정 ```bash [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에서 실행됨을 의미한다. ## 클러스터 구성내역 ```bash # 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 ``` 다음은 리소스의 제약조건에 대한 결과이다. ```bash # 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`을 수행해야 처리할수 있다. ```bash [OWNER]# pcs resource cleanup 리소스명 ``` 단, 시스템 구성이나 데몬에 이상이 발생되면, 에러는 Fix되지 않고 계속 발생될 것이다. 이는 기 발생된 에러에 대한 CleanUP 처리이다. * [ ] 클러스터 리소스 Relocate 수행 현재 운용되는 클러스터의 유지보수로 인해 Slave Node로의 `On-demand 절체(relocate)`를 수행할 수 있다. ```bash [OWNER]# pcs resource relocate 리소스명 ```