Skip to main content

Reconfiguração automática do haproxy.cfg do HAPROXY - 2

chatGPT

 

Perfeito! Abaixo está um script que monitora alterações no arquivo haproxy.cfg via inotify e executa um reload automático nos containers HAProxy quando detectar mudanças — ideal para quem está usando GlusterFS com bind mount no Docker Swarm.

✅ Objetivo
Monitorar:

bash
/opt/aplicativos/haproxy/haproxy.cfg
Quando houver qualquer modificação, o script:

Valida a nova configuração com haproxy -c

Executa kill -HUP 1 no processo do HAProxy dentro de cada container ativo

✅ Pré-requisitos
Instale o inotify-tools no node onde o script vai rodar:
bash
Copiar
Editar
sudo apt install inotify-tools
📜 Script: watch-haproxy-reload.sh
bash
Copiar
Editar
#!/bin/bash

WATCH_FILE="/opt/aplicativos/haproxy/haproxy.cfg"
IMAGE="haproxytech/haproxy-debian:3.3"

echo "[INFO] Monitorando $WATCH_FILE por alterações..."

inotifywait -m -e close_write "$WATCH_FILE" | while read -r path event file; do
    echo "[INFO] Detecção de alteração em $file — iniciando validação e reload..."

    CONTAINERS=$(docker ps --filter "ancestor=$IMAGE" --format "{{.ID}}")

    if [ -z "$CONTAINERS" ]; then
        echo "[WARN] Nenhum container com imagem $IMAGE em execução."
        continue
    fi

    for cid in $CONTAINERS; do
        echo "→ Validando config dentro do container $cid..."
        if docker exec "$cid" haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg; then
            echo "✓ Configuração válida. Recarregando HAProxy no container $cid..."
            docker exec "$cid" kill -HUP 1
            echo "✅ Reload concluído para $cid"
        else
            echo "❌ Configuração inválida. Nenhum reload feito."
        fi
    done
done
✅ Como usar
1. Salve o script
bash
Copiar
Editar
sudo nano /usr/local/bin/watch-haproxy-reload.sh
Cole o conteúdo acima, salve e torne executável:

bash
Copiar
Editar
sudo chmod +x /usr/local/bin/watch-haproxy-reload.sh
2. Execute em background (em 1 só node basta)
bash
Copiar
Editar
nohup /usr/local/bin/watch-haproxy-reload.sh >> /var/log/haproxy-watch.log 2>&1 &
Ou adicione no /etc/rc.local ou systemd para subir automaticamente no boot.

🛡️ Segurança e estabilidade
Use em apenas 1 node do Swarm para evitar reloads duplicados.

O reload é suave (com SIGHUP), não derruba conexões abertas.

Você pode integrar isso com o script cron também, se quiser backup/rollback.

✅ Resumo do que você tem agora:
Item Status
GlusterFS replicando haproxy.cfg ✅
Containers Docker Swarm usando bind mount ✅
Reload automático com inotify ✅
Validação de configuração antes do reload ✅