Amazon EC2 Elastic Load Balancingの背後に5つのWebサーバー(Apache/mod_Perl)があります。Webサーバーにコードをデプロイするときに、これを実行しています。
サーバーがシャットダウンすると、ELBはサーバーにリクエストを配信しないと思いますが、リクエストは引き続き処理されますか?
より良いアプローチは
しかし、私の地元のサーバーから(1)と(2)を実行するにはどうすればよいですか? AWS APIを使用する必要がありますか?またはそれを行う他の簡単な方法?
ありがとう。
私はApache/mod_Perlを負荷分散されたEC2インスタンスとして実行し、あなたが言うように定期的にコードのアップグレードを行います。私のプロセスは次のとおりです。
AWSのドキュメントでは、ローテーションからインスタンスを追加および削除する方法について説明しています APIまたはコンソールのいずれかを使用して、選択します。私のアプローチでは、Webサーバーが正常にローテーションから外れるため、特定のユーザー要求が強制終了されるかどうかについて心配する必要はありません。 @ cyberx86で説明したように、コマンドapachectl -k graceful
を使用して、各リクエストが処理された後にApacheサーバーをシャットダウンできます。
これを実現する別の方法があります。各サーバーでアップグレードするものがいくつかある場合。同じ操作で5台のサーバーを更新するのは非常に無駄になります。
負荷分散とスケーリンググループを作成します。接続ドレインが有効になっていることを確認します。
私のアップグレードステップがあります。
いくつかのガイド:
自動スケーリンググループの負荷分散
接続のドレイン
新しいコードでオンラインになる新しく作成されたインスタンスをサポートするようにデプロイを変更できる場合-実際にELBからインスタンスを削除し、60秒待ってから(AmazonのELBがバックエンドとクライアントへの接続を閉じます)、インスタンスを終了します-そして、AmazonのAuto Scaling Groupを利用して、新しいインスタンスを作成します。このプロセスを自動化するオープンソースツールを作成しました。awsmissingtools.comで入手できます。「AWS-HA-Release」というツールを探してください。