이 튜토리얼에서는 Keepalived와 HAProxy를 사용하여 애플리케이션의 고가용성과 로드 밸런싱을 설정하는 방법을 설명합니다. 이 설정을 통해 장애 조치 메커니즘을 구현하고 여러 서버에 걸쳐 들어오는 트래픽을 분산시킬 수 있습니다.
환경은 Rocky 9.4에서 진행 했습니다.
1단계: 방화벽 및 SELinux 비활성화
먼저 방화벽을 비활성화하고 SELinux를 허용 모드로 설정합니다:
systemctl disable firewalld --now
setenforce 0
2단계: Keepalived 설치
장애 조치 프로세스를 관리할 Keepalived를 설치합니다:
sudo dnf install keepalived -y
비로컬 바인딩을 활성화합니다:
echo "net.ipv4.ip_nonlocal_bind=1" >> /etc/sysctl.confsysctl -p
3단계: Keepalived 구성
마스터 서버 설정:
keepalived.conf 파일을 생성하고 구성합니다:
bash코드 복사
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
cat << EOF > /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy {
script "pidof haproxy" # HAProxy 프로세스 확인
interval 2 # 체크 간격 (초)
weight 2
}
vrrp_instance VI_1 {
interface ens18 # 네트워크 인터페이스 이름
state MASTER # 이 서버를 MASTER로 설정
virtual_router_id 51 # VRRP 그룹 ID (모든 노드에서 동일)
priority 101 # 우선순위 (MASTER가 BACKUP보다 높아야 함)
advert_int 1 # 광고 간격 (초)
authentication {
auth_type PASS
auth_pass cloud1234 # 인증 암호
}
virtual_ipaddress {
192.168.135.80 # 가상 IP 주소
}
track_script {
chk_haproxy # HAProxy 상태 체크 스크립트
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
EOF
백업 서버 설정:
백업 서버에도 동일한 설정 파일을 만드는데, state와 priority만 다릅니다.
bash코드 복사
cat << EOF > /etc/keepalived/keepalived.conf
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
interface ens18
state BACKUP # 이 서버를 BACKUP으로 설정
virtual_router_id 51
priority 100 # 우선순위 (MASTER보다 낮게 설정)
advert_int 1
authentication {
auth_type PASS
auth_pass cloud1234
}
virtual_ipaddress {
192.168.135.80
}
track_script {
chk_haproxy
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
EOF
4단계: 알림 스크립트 설정
장애 조치 시 실행될 알림 스크립트를 만듭니다:
bash코드 복사
cat <<EOF > /etc/keepalived/notify.sh
#!/bin/bash
TYPE="\$1"
case \$TYPE in
master)
systemctl restart haproxy
;;
backup)
systemctl restart haproxy
;;
fault)
systemctl stop haproxy
;;
*)
echo "Usage: \$0 {master|backup|fault}"
exit 1
;;
esac
EOF
sudo chmod +x /etc/keepalived/notify.sh
keepalived 서비스를 활성화하고 시작합니다:
systemctl enable keepalived --no
5단계: HAProxy 설치 및 구성
HAProxy를 설치합니다:
sudo dnf install haproxy -y
기존 구성 파일을 백업하고 새 구성 파일을 생성합니다:
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
cat << EOF > /etc/haproxy/haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend main
bind 192.168.135.80:80
default_backend app_servers
backend app_servers
balance roundrobin
server server1 192.168.135.81:80 check
server server2 192.168.135.82:80 check
EOF
HAProxy 서비스를 활성화하고 시작합니다:
systemctl enable haproxy --now
이제 Keepalived와 HAProxy를 통해 고가용성 및 로드 밸런싱이 설정되었습니다. 각 서버의 상태를 지속적으로 모니터링하고 장애 발생 시 자동으로 전환됩니다.
이 글이 여러분의 시스템 설정에 도움이 되길 바랍니다!