Ho messo insieme questa sceneggiatura da vari luoghi. Ciò che spero è che una volta eseguito eseguirà le seguenti operazioni:
- Metti in pausa tutto il traffico "NUOVO" http per le porte 80 e 443 - basta "metterle in pausa", non dare alcun errore
- riavviare graziosamente haproxy quando tutte le richieste "in process" sono state completate
- Annulla la pausa dal traffico http e continua a lavorare normalmente.
È così che funzionerà? Ho perso qualcosa? Abbiamo migliaia di regole acl basate su ip, memorizzate in un file che fa riferimento al proxy e dobbiamo ricaricarlo più volte al minuto.
#!/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
Modifica: mi piacerebbe in qualche modo testarlo, ma non abbiamo ancora alcun traffico (ad eccezione di me test).
fonti:
http://www.forouzani.com/reload-haproxy-cfg-without-restarting.html