J'ai assemblé ce script à partir de divers endroits. Ce que j'espère, c'est qu'il fera ce qui suit une fois exécuté:
- Mettre en pause tout le trafic http "NOUVEAU" pour les ports 80 et 443 - juste "mettre en pause", ne donnez aucune erreur
- redémarrer gracieusement haproxy lorsque toutes les demandes "en cours" sont terminées
- Annulez la pause du trafic http et continuez comme d'habitude.
Est-ce ainsi que cela fonctionnera? Ai-je raté quelque chose? Nous avons des milliers de règles acl basées sur ip, stockées dans un fichier qui référence haproxy et nous devons le recharger plusieurs fois par minute.
#!/bin/sh
# hold/pause new requests
iptables -I INPUT -p tcp --dport 80 --syn -j DROP
iptables -I INPUT -p tcp --dport 443 --syn -j DROP
sleep 1
# gracefully restart haproxy
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
# allow new requests to come in again
iptables -D INPUT -p tcp --dport 80 --syn -j DROP
iptables -D INPUT -p tcp --dport 443 --syn -j DROP
Edit: J'adorerais le tester d'une manière ou d'une autre, mais nous n'avons pas encore de trafic pour le moment (à l'exception de mes tests).
Sources:
http://www.forouzani.com/reload-haproxy-cfg-without-restarting.html