Saya menggabungkan naskah ini dari berbagai tempat. Apa yang saya harapkan adalah ini akan dilakukan setelah dijalankan:
- Jeda semua lalu lintas http "BARU" untuk port 80 dan 443 - cukup "pause" mereka, jangan berikan kesalahan apa pun
- Restart haproxy dengan anggun ketika semua permintaan "dalam proses" selesai
- Batalkan jeda lalu lintas http dan lanjutkan bisnis seperti biasa.
Apakah ini cara kerjanya? Apakah saya melewatkan sesuatu? Kami memiliki ribuan aturan acl berdasarkan ip, disimpan dalam file yang memiliki referensi haproxy dan kami perlu memuatnya kembali beberapa kali dalam satu menit.
#!/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
Sunting: Saya ingin mengujinya, tetapi kami belum memiliki traffic (dengan pengecualian saya sedang menguji).
Sumber:
http://www.forouzani.com/reload-haproxy-cfg-without-restarting.html