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 ✅
No comments to display
No comments to display