このHAProxyの「再起動スクリプト」は正常に機能しますか?


9

このスクリプトをさまざまな場所からまとめました。私が期待しているのは、一度実行すると次のことを行うことです:

  1. ポート80と443のすべての「新しい」httpトラフィックを一時停止します-それらを「一時停止」するだけで、エラーは発生しません
  2. すべての「処理中」の要求が完了したときにhaproxyを正常に再起動します
  3. 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

https://github.com/Mirantis/openstack-lbaas/issues/3

パケット損失ゼロのHAProxyグレースフルリロード

回答:


4

それらの記事に基づいて、それはうまくいくはずです。

常にエミュレートできるトラフィックがないことを覚えておいてください。

Apacheベンチマークツールを使用して、偽のトラフィックを配置します。

最悪のシナリオをテストするために、ロードするページのロードに数秒かかることを確認してください。

あなたが提供する設定が正しく機能することを証明するクックブックを作成しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.