
HAProxy1 서버는 VM으로 작동 (192.168.35.141)HAProxy2 서버는 VM으로 작동 (192.168.35.125)WS(Web Server)는 NginxWAS(Web Application Server)는 TomcatDB(DataBase)는 MySQL(Maria)
HAProxy1 ip 확인

WS1, WS2 ip 확인

ssh root@vm_ip
HAProxy는 트래픽이 많은 웹기반 솔루션의 부하를 효율적으로 분산시켜 줄 수 있는 무료 오픈소스 로드밸런서임. 또한 이중화를 위한 Failover 기능도 제공함./etc/hosts loadBalancer를 할 ws1과 ws2 의 ip 및 이름 설정
HAProxy 설치
yum update -y
yum install bind-utils
yum install yum-utils
yum install haproxy

HAProxy 실행 및 상태 확인
systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

HAProxy설정
/etc/haproxy/haproxy.cfg
아래와 같이 수정한다.


bind 192.168.0.100:443 ssl crt /etc/ssl/certs/test.pem http-request redirect scheme htps{ssl_fc}



rsylog 설정
/etc/rsyslog.conf
아래와 같이 주석처리를 제거함.
아래 경로에 rsyslog를 위한 haproxy.conf파일을 생성한다.
생성한 haproxy.conf파일에 아래 내용을 추가한다.
rsyslog를 시작하고 서비스 등록을 한다.





Nginx웹서버는 두개로 nginx1과 nginx2로 페이지가 각각 표시되도록 수정하고 HAProxy(192.168.0.100)으로 새로고침을 누르면 Roundrobin기반으로 번갈아 가면서 바뀌는 것을 볼 수 있음.
WS1 nginx1 html

ws1

ws2



Active HAProxy 가 문제가 발생 시 자동으로 Failover 되어 Backup HAProxy 가 작동되도록 함.VIP 와 추가 HAProxy 서비스의 IP 및 포트정보가 추가되어야 함.VIP(Virtual IP)는 VRRP(Virtual Router Redundancy Protocol) 을 기반으로 이중화 구조를 구현하기 위한 가상 IP임. 또한 VRRP는 Active/Standby, Master/Slave 구조의 이중화 시스템을 구현하기 위해 가상의 게이트웨이 기반의 라우팅 기술임.| Host | IP | Port | Remark |
|---|---|---|---|
| VIP | 192.168.35.207 | Haproxy1~2 해당 | |
| haproxy1 | 192.168.35.141 | 80 | Master(keepalived & LB) |
| haproxy2 | 192.168.35.125 | 80 | Backup(keepalived & LB) |
| ws1 | 192.168.35.86 | 80 | Nginx |
| ws2 | 192.168.35.226 | 80 | Nginx |
yum install -y haproxy
/etc/haproxy/haproxy.cfg
- vi 및 쉘내용을 복사하려면 clipboard를 활성화 해줘야 한다.
yum install -y vim-X11또는dnf install -y vim-X11로 설치를 한다.
vim --version또는vimx --version으로 확인 시 -clipboard → +clipboard로 변경한 것을 볼 수 있다.
VIP설치를 위해 각 haproxy1~2 hosts 정보 등록
/etc/hosts

keepalive설치
HAProxy1 & 2에 yum 또는 dnf로 keepalived를 설치함.yum install -y keepalived
keepalive 설정을 함.

etc/keepalived/keepalived.conf 
keepalived.conf를 수정한다.HAProxy1 & HAProxy2 서비스를 재시작 하고 상태를 체크한다.
중요부분! 서버커널 정보 수정
Keepalived가 작동되는 서버는 VIP binding을 위해 해당 서버의 커널값을 수정해줘야 함. 로컬의 IP가 아닌 다른 NIC의 IP로 바인딩을 가능하게 해줌. 이것이 되어야 VIP를 통해 Active에서 장애 발생 시 Backup으로 VIP 바인딩이 되어 계속 작동될 수 있게끔 해줌.
/etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1sysctl -pcat /etc/sysctl.conf로 확인reboot
HAProxy1~2는 이제 하나의 게이트웨이가 될 수 있는 VIP(192.168.0.103)를 바라보고 있음. Haproxy.cfg의 설정파일에서 로드밸런싱을 위한 bind를 이 IP로 변경해야 함. VIP:192.168.35.206
HAProxy1 (HAProxy2도 진행)



HAProxy1을 다운 시 HAProxy2가 작동하면서 Backend에서 작동하는 Nginx1~2가 제대로 LB에의해 작동하는 지 테스트함.
Virtual Box에서 Failover 테스트를 위해 HAProxy1의 VM을 다운시킴.

Haproxy2에서 tcpdump로 패킷체크를 해보면 192.168.0.104(haproxy2)로만 나가는 것을 볼 수 있음.

웹브라우저에서 refresh를 해보면 잠시 후 nginx1~2가 LB를 기반으로 잘 작동되는 것을 볼 수 있음. 이 의미는 haproxy2의 로드밸랜싱을 통해 정상적으로 서비스를 하고 있다는 의미임. 

VirtualBox에서 HAProxy1을 다시 시작하면 패킷통신이 정상적으로 복구되고 nginx1~2도 문제없이 잘 접속되는 것을 볼 수 있음.

처음에는 VIP라는 VM을 파서 그 VM의 IP를 넣어줘야 하는지 알았습니다.
하지만 VIP는 중복성을 구현하고 네트워크 서비스의 고가용성을 보장하는 데 사용되는 가상 IP 주소이라는 것을 알고 만들어 놓은 VIP의 VM을 삭제하고 하니 잘 작동하였습니다.
restart 중요