Rolling обновление HAProxy (keepalived, 2 ноды)ОписаниеОбновляет обе ноды по очереди:
- проверяет health второй ноды
- обновляет текущую
- гарантирует, что одна нода всегда жива
---
1. Скриптnano /usr/local/sbin/haproxy-ha-upgrade.sh
#!/bin/bash
set -euo pipefail
export DEBIAN_FRONTEND=noninteractive
LOG="/var/log/haproxy-upgrade.log"
LOCK="/var/run/haproxy-upgrade.lock"
VIP="10.10.1.100"
PEER="haproxy-2" # поменять на вторую ноду
log() {
echo "[$(date '+%F %T')] $*" | tee -a "$LOG"
}
if [ -f "$LOCK" ]; then
exit 0
fi
touch "$LOCK"
trap "rm -f $LOCK" EXIT
# self check
curl -fs http://127.0.0.1/health || exit 1
# peer check
ssh "$PEER" "curl -fs http://127.0.0.1/health" || exit 1
# upgrade
apt update >> "$LOG" 2>&1
apt upgrade -y >> "$LOG" 2>&1
if [ -f /var/run/reboot-required ]; then
reboot
fi
sleep 30
curl -fs http://127.0.0.1/health || exit 1
---
2. systemd servicenano /etc/systemd/system/haproxy-upgrade.service
[Unit]
Description=HAProxy upgrade
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/haproxy-ha-upgrade.sh
---
3. systemd timernano /etc/systemd/system/haproxy-upgrade.timer
[Unit]
Description=HAProxy upgrade timer
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
---
4. Активацияsystemctl daemon-reload
systemctl enable --now haproxy-upgrade.timer
---
Важно- на второй ноде указать обратный PEER
- сделать разное время запуска (например 03:00 и 03:10)