web-dev-qa-db-ja.com

優雅なApacheの再起動とKeep-Alive接続

Apacheをすばやく再起動して構成の変更を適用する方法を見つけようとしています。目標は次のとおりです。

  1. 現在処理されているリクエストを配布せずに再起動
  2. これは可能な限りアトミックに行います。つまり、再起動時から受信したすべての新しいリクエストに新しい構成を適用する必要があります。古いバージョンで新しいリクエストを処理しないでください。

Apacheには、最初の目標を満たす正常な再起動コマンドがあります。再起動コマンドは即時であり、既存の要求は影響を受けません。ただし、再起動はアトミックではありません。キープアライブ状態のサーバーへの既存の接続がある場合、それらが送信する以下のすべての要求は、古い構成の古いプロセスによって処理されます。

私の場合、Apacheサーバーはロードバランサーの背後にあり、1つの接続で数百のリクエストを送信する可能性があります。そのため、再起動後、新しい構成がすべての新しいリクエストに適用されるまでに長い時間がかかります。

これを修正する方法はありますか?現在のリクエストの処理が終了した後、Apacheに古いプロセスへの既存のKeep-Alive接続を閉じさせますか?

1
sagi

KeepAliveOffをオンにして、正常に再起動し、しばらくオフにして、構成を変更してから、もう一度正常に再起動します。これは、変更前にDNSエントリのTTLを減らす方法に似ています。

2
200_success

MaxKeepAliveReqestsと KeepAliveTimeout を十分に低く設定して、クライアントがキープアライブを使用できるようにしますが、それらの接続を長く維持しないようにするにはどうでしょうか。

0
Justin Ellison