web-dev-qa-db-ja.com

このHAProxyの「再起動スクリプト」は私が思うようにうまく機能しますか?

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

  1. ポート80および443のすべての「新しい」httpトラフィックを一時停止します-それらを「一時停止」するだけで、エラーは発生しません
  2. すべての「処理中」のリクエストが完了したら、haproxyを正常に再起動します
  3. Httpトラフィックの一時停止を解除し、通常どおりビジネスを続行します。

これはどのように実行されますか?私は何かを逃したことがありますか? ipに基づく何千ものACLルールがあり、haproxyが参照するファイルに保存されており、1分間に数回リロードする必要があります。

#!/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/

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

9
Mike Curry

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

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

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

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

私はあなたのために cookbook を作成しました。これは、あなたが提供する構成が正しく機能することを証明します。

4
Tk421