Commit 0efc9567 authored by nuxer's avatar nuxer

haproxy 클러스터구성 추가

parent 6732185f
[![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
## 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 HAPROXY 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 리소스명
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment