私は.NETのバックグラウンドを持っており、嫌いなものと並んで、好きなものがたくさんあります。 IISは、一般的に、私が嫌っていたものの1つでした。
ただし、IISの非常に優れた機能の1つは、サーバーノードに「ドレインストップ」を設定できることです。これにより、すべての新しいトラフィックが他のノードにリダイレクトされますが、現在オンラインになっているユーザーは、シャットダウンする前のセッションIIS完全に。
これは、ユーザーセッションを中断せずに展開を行う場合に非常に便利でした。
私の新しい会社では、私たちは.NETではなく、それを愛しています。私たちはJRubyで作業しており、EC2ではフロントエンドとしてApacheを使用し、バックエンドとしてTomcatを使用してJava)しています。
Tomcat、Nginx、またはApacheで同様の機能を提供するソリューションに出くわしたことがありますか?
私はいくつかの検索をしましたが、有用なものを思い付くことができませんでした。 Axis2はどうですか?誰かがそれについて何か経験がありますか?
ローカルのApacheサイトをシャットダウンして、現在のユーザーに現在のタスクを完了させる場合は、Apacheを正常に停止します。ユーザーを別の運用Webサイトにリダイレクトして、ユーザーが続行できるようにする他のアーキテクチャー(ロードバランサーなど)があると想定します。
Apacheサイトから:
信号:WINCH apachectl -kgraceful-stop
「WINCHまたはgraceful-stopシグナルにより、親プロセスは、現在のリクエストの後に終了するように(または、何も提供していない場合はすぐに終了するように)子にアドバイスします。その後、親はPidFileを削除し、すべてのポートでのリッスンを停止します。親は引き続き実行し、リクエストを処理している子を監視します。すべての子が終了して終了するか、GracefulShutdownTimeoutで指定されたタイムアウトに達すると、親も終了します。タイムアウトに達すると、残りの子はすべて終了します。 TERMシグナルを送信して、強制的に終了させます。
TERMシグナルは、「正常な」状態になると、親プロセスとすべての子を即座に終了します。ただし、PidFileが削除されるため、apachectlまたはhttpdを使用してこのシグナルを送信することはできません。 「」
実際には、単に
Apache2ctl graceful
apacheプロセスを正常に再起動して、新しい構成をロードできるようにします
ここでは、たとえば、本番環境にwww.v1があり、開発版がwww.v2にあるとします。
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/vhosts/example.com/www.v1
[...]
</VirtualHost>
<VirtualHost *:80>
ServerName dev.exemple.com
DocumentRoot /var/www/vhosts/example.com/www.v2
[...]
</VirtualHost>
これで、開発者を本番環境に移行する準備ができましたか?構成を編集します(ログローテーションが行われるときにApacheの再起動/グレースフルウォッチを実行するまでオンラインで何も変更されません。「Apache2ctlgraceful」がスローされます)
<VirtualHost *:80>
ServerName old.example.com
DocumentRoot /var/www/vhosts/example.com/www.v1
[...]
</VirtualHost>
<VirtualHost *:80>
ServerName www.exemple.com
DocumentRoot /var/www/vhosts/example.com/www.v2
[...]
</VirtualHost>
すべての準備ができたと感じたら...新しいバージョンが新しいドメイン名で機能することを確認してください;)
Apache2ctl graceful
そして、マギが起こるはずです:)
「Apache2ctlgraceful」は自動的に「Apache2ctlconfigtest」を実行し、Apache構成に明らかな間違いを犯してもクラッシュしないことに注意してください