VM 두대(이상)에 haproxy를 설치하여 L4(또는 L7) switch 장비를 대체 할 수 있도록 하는게 목표 입니다. haproxy간의 HA(High availability)는 keepalived를 사용하여 VIP를 넘기는 식으로 구성 합니다. 사실 지금 L7을 사용하고 있는데 이렇게 하려는 이유는 다음과 같습니다.
LoadBalancer를 사용할 수는 있는 환경 이지만 내가 컨트롤 할 수 없는 상황 (네트워크 부서에서 담담).
검증계에서 이것저것 구성하려고 해도 L7 관련 설정은 SR(Service Request) 티켓을 만들어야 하고, 최소 일주일 전에는 SR을 올려야 내가 원하는 기간에 맞춰서 설정을 바꿀 수 있음.
구성할 모습(TO-BE)
평상시에는 위 그림과 같이 stg1에 VIP 12.34.56.129 이 붙어 있고 리퀘스트가 들어오면 stg1의 haproxy를 통해 stg1과 stg2로 밸런싱 됩니다. 그러다가 stg1이 다운되면 아래 그림과 같이 VIP가 stg2로 옮겨 가게 되고, stg2 -> stg2로만 리퀘스트를 보내다가 stg1이 다시 살아 나면 stg1로도 리퀘스트를 나눠 줍니다.
테스트 목적의 검증계의 구성이라서 이렇게 열악하게 구성 되었지만, haproxy 두대를 별도로 구성하고 밑에 로드밸런싱 되는 서버들을 여러대 붙이는게 일반적인 구성입니다.
준비사항
haproxy와 keepalived를 설치할 VM 2대 (yum repository 사용 가능한) floating ip로 사용할 VIP 1개
haproxy 설치
1 2 3
install haproxy
sudo yum install haproxy
haproxy.cfg 수정
1 2
sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.template sudo vi /etc/haproxy/haproxy.cfg
frontend main bind 12.34.56.119:80 mode http default_backend test-internal-proxy
backend test-internal-proxy # health check option httpchk GET / http-check expect status 200 default-server inter 1s fall 3 rise 2 # load balancing balance source mode http server stg1 12.34.56.205 check server stg2 12.34.56.206 check
추가로 /nakjunizm/data/logs/util/haproxy 디렉토리 없으면 미리 생성. (mkdir -p /nakjunizm/data/logs/util/haproxy)
rsyslog 재시작
1
sudo systemctl restart rsyslog
sysctl 설정
keepalived를 이용해서 floating ip를 옮겨다니게 하기 위해 아래 두가지 설정이 필요 합니다. net.ipv4.ip_forward 는 NIC 간의 forwarding 을 허용 해 주는 옵션으로, 예를들어 eth0으로 들어온 리퀘스트를 eth1로 포워딩 시킬때 필요 합니다. eth0에 VIP를 추가로 bind 시키는 경우에는 위 옵션을 1로 수정할 필요가 없고, 다른 NIC에 VIP를 붙이는 경우엔 필요한 것으로 생각 됩니다. net.ipv4.ip_nonlocal_bind 는 network interface에 할당되지 않은 IP를 bind 할수 있게 allow 하는 옵션으로, 우리는 VIP를 bind 할것이기 때문에 1로 설정하여 enable 시킬 것 입니다.