2017-11-12 10 views
0

私は、デプロイメントファイルでカスタムタスクを使用して、自動拡張環境にRailsアプリケーションをデプロイしています(基本的に、Ruby aws sdkを使用して、これらのインスタンスは、実際のターゲットグループの下に登録して、私のアプリは、私カピストラーノの展開中にアプリケーションのLoad Balancer(ELBv2)Capistrano - ALBターゲットグループへのデプロイ時にインスタンスが保留中であるとマークする

からこれらのTGにトラフィックを分散している

環境およびそれらのインスタンスにデプロイ)は、deploy:restartタスクが再起動するように求められます新しいアプリケーションを使用するためのサーバー(私はPhusion Passengerを使用しています)。再起動は非常に長くなる可能性があるので(最大1分)、カスタム再起動waitオプションを60秒追加して、サービスを継続的に使用できるようにサーバーを1つずつ再起動するようにしました。

しかし、欠落して上記の遅延を無駄にする唯一の事は、私のターゲットグループに「不健全」または「保留中」としてマークされていないため、この時間中にALBがこれらのインスタンスに要求を送信し続けることです。

私は情報の最後のピース

一つをhttps://github.com/thattommyhall/capistrano-elbのようないくつかのライブラリが、残念ながら彼らは非常に古くなっているとALBsで動作するように作られていない見てのTG

ている:私カピストラーノのdeployタスクが実際に異なる役割をマッチング複数のマシンにデプロイします。

  • APIサーバー(ALB + TG前後フェーシング、上述したように)
  • 労働ANS SC hedulers(それらのいずれかのALB特別な注意の後ろではありませんが取られなければならない)

だから私の(サブ)質問(s)がされて(いる)

  • がフラグにそれが可能ですTGの背後にあるインスタンスは手動で「保留中」ですか?そうでない場合は、の直後にregisterと同じことを達成するでしょうか?

  • インスタンスが:apiロールのインスタンスに対して上記のことを行うには、インスタンスがすべてAWSクラウドにあり、IAMロールを持つものが1つのターゲットグループの下にあるとします(実際には役に立ちます私はいくつかのトリックは、同じインスタンスのために、いくつかのTGをサポートするために得ることができれば)

答えて

0

私は現在、ライフサイクルフックを自動スケーリングの設定だし、おそらく、この後にになりますが、それ以外の可能な解決策(そのI天国」 t検証済み)は

  • ターゲットの登録を解除します(CLI)。

  • (オプション)ターゲットが登録解除されるのを待ちます(CLI)。

  • は乗客を再開

    :restartコマンド

  • (任意で)再び(CLI)のターゲットを登録します。

  • サービス対象(CLI)を待つ。

  • 実行速度がサーバの再起動時間/ヘルスチェックの効率に依存するであろう

次のインスタンスに同じフックに進みます。プロダクションに十分なサーバーがある場合は、より良い解決策になる可能性があります。待ち時間をスキップし、常にxサーバーの「ウィンドウ」をオンラインにすることです。

ie。 5台のサーバがあり、再起動するのに30秒かかるとしたら、15秒ごとにサーバを登録解除して再起動登録すれば、いつでも2台のサーバが稼働していることを確認できます(ヘルスチェックでは、 15秒以内に健康)

関連する問題