このスクリプトをさまざまな場所からまとめました。私が期待しているのは、一度実行すると次のことを行うことです:
- ポート80と443のすべての「新しい」httpトラフィックを一時停止します-それらを「一時停止」するだけで、エラーは発生しません
- すべての「処理中」の要求が完了したときにhaproxyを正常に再起動します
- httpトラフィックを一時停止解除し、通常どおりビジネスを継続します。
これはどのように実行されますか?何か逃したことがありますか?ipに基づく何千ものaclルールがhaproxyが参照するファイルに保存されており、毎分数回リロードする必要があります。
#!/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
編集:どういうわけかそれをテストしたいのですが、現時点ではトラフィックはありません(テストを除いて)。
出典:
http://www.forouzani.com/reload-haproxy-cfg-without-restarting.html