본문 바로가기
IT Knowledge/HAProxy

Keepalived 설치 및 동작방식(feat. HAProxy의 고가용성 구성)

by Seok. 2022. 1. 29.
반응형

HAProxy의 HA를 구성하기 위해, keepalived 를 설치할 예정입니다. 

 

 

Keepalived란?

'로드밸런싱' '고가용성(HA)' 제공하는 프레임워크. 

-. 로드밸런싱은 L4 수준의 로드 밸런싱(HAProxy와 함께 사용하면, L7 로드밸런싱도 가능)

-. 고가용성(HA)은 VRRP 프로토콜을 사용한 VIP로 고가용성이 가능.

 

 

[Keepalived를 이용한 HAProxy의 HA 구성]

가상 IP주소(VIP)를 공유하는 Active HAProxy 서버와 Standby HAProxy서버가

 heartbeat을 주고 받으면서 서로 정상적인 동작하는지 여부를 확인

Active 상태의 서버에 문제가 발생하면, Standby HAProxy가 active 상태로 변경되면서

기존의 active HAProxy의 가상 IP주소를 가져오면서 서비스가 무정지 상태를 유지

 

[Keepalived의 고가용성(HA) 동작방식]

 

Keepalived의 고가용성은 서버에서 자신의 IP주소 외에 VIP(가상IP)를 설정한다.

가상IP로 서비스 하다가, 문제가 발생했을때, VIP를 다른 서버로 전달하여 서비스가 지속될 있도록 한다.

VIP는 Keepalived가 할당, 해제하기 때문에 별도로 OS에서 설정해주지 않아도 된다.

 

문제가 생겼음을 감지하는 HealthCheck VRRP를 통해서 상태를 확인한다.

VRRP 프로토콜의 멀티캐스트 통해서, 상대의 HealthCheck를 한다.

따라서, 서버가 죽었는지 살았는지는 확인이 가능하지만, 서비스가 정상적인지는 확인이 불가능하다.

서비스의 상태까지 확인하고자 할때는, vrrp_script 설정을 사용해서 서비스의 정상 여부를 판별할 있다.

 

VIP를 받은 경우, 자신이 인계받았음을 전파하는 GARP을 보내주어야 한다.

(GARP - Gratuitous ARP로 네트워크 상의 다른 장비들의 ARP 캐시를 갱신 or 중복방지를 위해, 자신의 MAC IP주소를 브로드캐스팅하는 프로토콜)

 

 

[yum 패키지 설치]

yum install -y libnl3-devel ipset-devel iptables-devel openssl-devel

 

[keepalived 설치]

# mkdir /keepalived

# cd /keepalived

# wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz --no-check-certificate

# tar xvfz keepalived-2.2.7.tar.gz

# mv keepalived-2.2.7 keepalived-2.2.7-install

# cd /keepalived/keepalived-2.2.7-install

# ./configure --prefix=/keepalived/keepalived-2.2.7

# make 

# make install

 

 

설치 완료 후

# cd /keepalived

# ln -s /keepalived/keepalived-2.2.7 keepalived

 

[sbin 등록]

cd /usr/sbin/

ln -s /keepalived/keepalived/sbin/keepalived keepalived

 

 

[keepalived config 생성 및 설정]

vi /keepalived/keepalived/etc/keepalived/keepalived.conf 

Server 1 Server2
! Configuration File for keepalived


global_defs {
   router_id HAProxy_HA1
}


vrrp_instance HAProxy01 {
   state MASTER
   interface eth0
   virtual_router_id 51
   priority 100
   authentication {
      auth_type PASS
      auth_pass 1234
   }
   virtual_ipaddress {
      10.10.1.3
   }
   track_script {
       check_haproxy
   }
}

vrrp_script check_haproxy {
   script "/sbin/pidof haproxy"
   interval 5
   weight 2
}
! Configuration File for keepalived


global_defs {
   router_id HAProxy_HA2
}


vrrp_instance HAProxy01 {
   state BACKUP
   interface eth0
   virtual_router_id 51
   priority 100
   authentication {
      auth_type PASS
      auth_pass 1234
   }
   virtual_ipaddress {
      10.10.1.3
   }
   track_script {
       check_haproxy
   }
}

vrrp_script check_haproxy {
   script "/sbin/pidof haproxy"
   interval 5
   weight 2
}

2022.01.29 - [IT Knowledge/HAProxy] - keepalived 설정 파일 옵션 정리

 

 

[sysconfig 수정]

vi /keepalived/keepalived/etc/sysconfig/keepalived

keepalived
# Options for keepalived. See `keepalived --help' output and keepalived(8) and
# keepalived.conf(5) man pages for a list of all options. Here are the most
# common ones :
#
# --vrrp-P    Only run with VRRP subsystem.
# --check-C    Only run with Health-checker subsystem.
# --dont-release-vrrp  -V    Dont remove VRRP VIPs & VROUTEs on daemon stop.
# --dont-release-ipvs  -I    Dont remove IPVS topology on daemon stop.
# --dump-conf-d    Dump the configuration data.
# --log-detail-D    Detailed log messages.
# --log-facility-S    0-7 Set local syslog facility (default=LOG_DAEMON)
#


KEEPALIVED_OPTIONS="-D -S 3 -f /keepalived/keepalived/etc/keepalived/keepalived.conf"

 

[systemd 등록]

# mkdir /keepalived/keepalived/etc/systemd

# mkdir /keepalived/keepalived/etc/systemd/system

# vi /keepalived/keepalived/etc/systemd/system/keepalived.service

keepalived.service
[Unit]
Description=LVS and VRRP High Availability Monitor
After= network-online.target syslog.target
Wants=network-online.target


[Service]
Type=forking
PIDFile=/var/run/keepalived.pid
KillMode=process
EnvironmentFile=-/keepalived/keepalived/etc/sysconfig/keepalived
ExecStart=/sbin/keepalived $KEEPALIVED_OPTIONS
ExecReload=/bin/kill -HUP $MAINPID


[Install]
WantedBy=multi-user.target

# cd /etc/systemd/system

# ln -s /keepalived/keepalived/etc/systemd/system/keepalived.service keepalived.service

 

[서비스 등록 & 시작]

# systemctl enable keepalived

# systemctl start keepalived

반응형

댓글