Puse este script juntos desde varios lugares. Lo que espero es que haga lo siguiente una vez que se ejecute:
- Pause todo el tráfico http "NUEVO" para los puertos 80 y 443 - solo "pause" ellos, no dé ningún error
- reinicie con gracia haproxy cuando se completen todas las solicitudes "en proceso"
- Deshabilite el tráfico http y continúe con sus actividades habituales.
¿Es así como funcionará? ¿Me he perdido algo? Tenemos miles de reglas acl basadas en ip, almacenadas en un archivo que hace referencia a un proxy y necesitamos volver a cargarlo varias veces por 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
Editar: Me encantaría probarlo de alguna manera, pero todavía no tenemos tráfico (con la excepción de mi prueba).
Fuentes:
http://www.forouzani.com/reload-haproxy-cfg-without-restarting.html