
フォールト トレランスを実現するために、Livestatus プラグインを使用して、Thruk と複数の nagios バックエンドの間で haproxy を実行しています。Thruk には接続タイムアウトがないため、バックエンドが「デッド」になると、Thruk のロードに非常に時間がかかり、通常は apache (fcgi 経由で Thruk にプロキシしている) のタイムアウトが発生します。
Thruk が外部コマンドを送信するときに問題が発生します。クライアントはサーバーからの応答を期待していないため、データを送信した後すぐに接続を閉じます。これにより、リモート サーバーへの接続がまだ確立されていない場合、haproxy が接続を切断するようです。その結果、次のようなログ エントリが表示されます。
127.0.0.1:48350 [07/Apr/2014:12:39:17.268] thruk_backend_nagios2_6557_6559 thruk_backend_nagios2_6557_6559/nagios2 0/-1/0 0 CC 0/0/0/0/0 0/0
CC は、haproxy がバックエンド サーバーに接続しようとしているときに、クライアントが予期せず接続を閉じたことを意味します。これが発生すると、haproxy はバックエンドへの接続を確立しようとし続けなくなり、クライアントが送信したデータは破棄されます。
tcp-smart-accept/connect オプションが役立つかもしれないと思いましたが、効果はありませんでした。
クライアントを変更したり、Thrukとhaproxyの間に何らかのストアアンドフォワードTCPプロキシを追加したりする以外に、ここでできることはありますか?クライアントがなくなっても、接続が確立されると、haproxyがクライアントのリクエストをバッファリングしてサーバーに送信するオプションはありますか?