#!/bin/bash
# 실습 #13 ⑤ — HAProxy + Keepalived 페어 (LB SPOF 제거)
# HAProxy 가 죽으면 VIP 자동 이전 → Active-Passive LB 페어 구성
set -e

CFG="$(dirname "$0")/configs/05_keepalived_haproxy_pair.conf"

# 1) HAProxy + Keepalived 설치
sudo apt install -y haproxy keepalived

# 2) 기본 HAProxy 설정 (이미 있으면 그대로)
if [ ! -s /etc/haproxy/haproxy.cfg ] || ! grep -q "frontend" /etc/haproxy/haproxy.cfg; then
    sudo tee /etc/haproxy/haproxy.cfg >/dev/null <<'EOF'
global
    daemon
    maxconn 4096
defaults
    mode http
    timeout connect 5s
    timeout client 30s
    timeout server 30s
frontend lab_fe
    bind *:80
    default_backend lab_be
backend lab_be
    server be1 127.0.0.1:8001 check
    server be2 127.0.0.1:8002 check
EOF
fi
sudo systemctl enable --now haproxy

# 3) Keepalived (HAProxy track_script 포함)
sudo cp "$CFG" /etc/keepalived/keepalived.conf
sudo systemctl restart keepalived
sleep 2

echo
echo "=== 정상 (HAProxy 살아있음) ==="
ip addr show eth0 | grep "inet " | head -3
echo "→ VIP 192.168.56.100 부착되어야 정상 (MASTER priority 150)"
echo
echo "=== HAProxy 종료 시뮬 — VIP 가 BACKUP 으로 이전 ==="
sudo systemctl stop haproxy
echo "→ 8초 대기..."
sleep 8
ip addr show eth0 | grep "inet " | head -3
echo "→ priority 120 (150-30) → BACKUP(100) 보다는 여전히 높음"
echo "→ BACKUP 노드 priority 가 130 이상이어야 자동 이전 (실습에선 양쪽 다 동일 conf 사용 권장)"
echo
echo "=== HAProxy 복구 ==="
sudo systemctl start haproxy
sleep 6
ip addr show eth0 | grep "inet " | head -3
