ゼロダウンタイムアップロード/ IISでのロールバック


17

これがこの質問をする正しい方法であるかどうかはわかりませんが、基本的に私がやりたいことは次のとおりです:

1.)変更セットをIISのサイトにプッシュします。
2.)ユーザーを中断しないでください。
3.)楽にロールバックできます。

だから、私は起こる必要があることを知っているいくつかのことがあります:

1.)Procセッション外-処理済み
2.)Procキャッシュ外-処理済み

したがって、残っている質問は次のとおり
です。1.)ユーザーを中断させないようにするにはどうすればよいですか?ファイルをビンにアップロードするだけの場合、アプリはリサイクルされ、オンラインに戻るまで10秒以上かかります
2.)どうすれば簡単にロールバックできますか?

考えられる解決策は、IISに2つのサイト、1つはパブリック、もう1つはプライベートに設定することだと考えていました。アップロードはプライベートになり、ウォームアップされます。ウォームアップ後、サイトは交換されます。ロールバックでは、アップロードせずにプライベートにスワップするだけです。

これは理論的には健全に思えますが、そのメカニズムはよくわかりません。何か案は?


@NickatUship:Webサイトがホストされているサーバーは1つだけですか?そうでない場合、秒を追加する可能性はありますか?
MattB

@NickatUship:また、どのIISバージョンを使用していますか?
-MattB

ロードバランサーでこれを潜在的に解決できます-それは本当です。サーバー自体で何かできるようになりたいと思っていました-それは私たちのフローにとってはよりうまくいくでしょう。IIS 7を使用しています
。– ChickenMilkBomb

ダウンタイムゼロのデプロイにグローバルURL書き換えルールを使用できるかどうか疑問に思います1)* .domain.comをIISのアプリである* .arbitrarysiteA.comに書き換えます2.) 4.アップ)* .siteB.comに書き換えを切り替える
ChickenMilkBomb

回答:


29

この問題にどのようにアプローチするかを以下に示します。これは以前にやったことがないことを念頭に置いてください。これは、開発環境で少しテストした概念です。これと選択した言語のスクリプトを使用して、かなり堅牢なフレームワークをセットアップできるはずです。基本的に、ゲットーの負荷分散環境をセットアップし、それを使用して新しいサイトと古いサイトを切り替えます。

セットアップするには、次のものが必要です。

  • IIS Application Request Routing(ARR)モジュール
  • IIS Web展開ツール(msdeploy)
  • 3つの異なるIIS Webサイト(3つの異なるIPアドレスを使用-ポートまたはホストヘッダーを使用するだけではここでは機能しない場合があります)

最初にARRをインストールします。

IISで3つのWebサイトをセットアップします。

  • Webサイト1は、ユーザーが実際に接続するサイトになりますhttp://192.168.1.1/。これは、ARRサイトでもあります。これが指すように空のディレクトリを設定し、独自のアプリプールに配置するだけです。これらの指示に従ってタイムアウトしないようにアプリプールを設定します。
  • Webサイト2および3は、実際にコンテンツをホストするサイトになります。これらは独自のIP上にある必要があり、ARRの動作方法により、Webサイト1とは異なるポート上にある必要がhttp://192.168.1.2:8080ありhttp://192.168.1.3:8080ます。また、独自のアプリプール内にあり、ファイルシステム上の異なるディレクトリを指している必要があります(ただし、通常、両方のディレクトリのコンテンツは同じです)

ARRをインストールすると、IISマネージャーに「サーバーファーム」という新しいカテゴリが作成されます。これを右クリックして、新しいファームを作成します。

  • あなたにとって意味のある名前を付けてください
  • サーバーとしてWebserver 2とWebserver 3を追加します-「詳細設定」ボタンをクリックし、「applicationRequestRouting」カテゴリを開いて、各サーバーのhttpPortを8080に変更してください。
  • ウィザードを終了します-URL書き換えルールを作成するかどうかを尋ねられます-[はい]をクリックします
  • これでサーバーファームができました。構成を完了するには、ファームに移動して[プロキシ構成]ボタンをクリックします。[応答ヘッダーのホストを逆に書き換える]をオンにして、変更を適用します。
  • IISマネージャーで、ルートレベルのサーバーカテゴリに移動し、[URL書き換え]ボタンをクリックすると、ファーム用に作成されたルールがあります。
    • ルールをダブルクリックして設定を取得します
    • 条件ボックスを開きます
    • {SERVER_PORT}8080に一致しない新しい条件を追加します
    • 変更を適用する

この時点で、あなたはあなたのリクエストを達成するために必要なものの基本を手に入れました。あなたがに行く場合はhttp://192.168.1.1/、あなたのウェブサイトは、ウェブサイト1またはサイト2のいずれかから取得しますが、それは他のサイトがあることを完全にシームレスになります。

アプリケーションの新しいバージョンをデプロイするときにできることは次のとおりです。

  • ファーム内のサーバーのドレインストップ1(サーバーファームツールで[監視と管理]に移動し、サーバーを選択して[サーバーを正常に使用不可にする]を選択します)
  • 新しいバージョンのサイトをオフラインのシステムに展開します
  • 代替IP /ポートを使用してオフラインのサイトをウォームアップします
  • サイトを再びファームで利用できるようにします
  • 他のサーバーに対してプロセスを繰り返します

このすべてをスクリプト化することについて話をすると、Web Deploymentツールが役立ちます。アプリケーションのパッケージを非常に簡単に作成し、コマンドラインから展開できます。また、問題がある場合は、そのパッケージを簡単にロールバックできます。ARRは、dllを使用してスクリプト化することもMicrosoft.Web.Administrationできます。

もう1つ-実際にWindows 2008 R2(IIS 7.5)を使用している場合は、アプリケーションウォームアップモジュールを確認してください。これにより、ウォームアップ部分も簡単になります。


素晴らしい-ありがとう、マット。これをすべて置くだけでも+1。調査し、取締役会に戻ります。
ChickenMilkBomb

完璧..
だまされた

1
これが、IISアプリケーションのゼロダウンタイム展開の答えです。これを行う方法とPowerShellを自動化する方法に関する詳細なチュートリアルを作成しました。
カヴン

10

MattBは水からそれを打ちました。+1詳細については返信しますが、彼の主張を引き受けるつもりはありません。彼が言ったことに付け加えます。

私は彼が説明したものと同様の設定をしており、それはうまく機能しています。ARRは、1台のサーバー上でも実行できます。

ただし、いくつか追加します。

Mattが推奨するように、2つのサイトを作成します。yoursite.com01やyoursite.com02のような名前を付けます。

2つのURL書き換えルールを作成します。1つはwww.yourdomain.com用、もう1つはstaging.yourdomain.com用です。実稼働環境では、値(^ www.yourdomain.com $)|(yourIP)で{HTTP_HOST}を使用します。(または任意のバインディング)ステージングには、(^ staging.yourdomain.com $)の値で{HTTP_HOST}を使用します。ルールyoursite.comおよびstaging.yoursite.comを呼び出します。

Rule = yoursite.comをsite = yoursite.com01にバインドし、rule = staging.yoursite.comをsite = yoursite.com02にバインドします。

staging.yoursite.comでFTPをセットアップします。

本番トラフィックは、Rule = staging.yoursite.comおよびSite = yoursite.com01に移動します。反対に停滞。

任意の時点でステージングにデプロイ、テスト、事前スピンアップ、他の人にテストなどを行うことができます。日中に実行することは重要ではありません。毎回同じFTPアカウントにデプロイします。ビルドサーバーに最適です。

次に、ライブの準備ができたら、次の3つの変更を行います。-FTPバインディングをyoursite.com02からyoursite.com01に移動します-URL書き換えルールyoursite.comをyoursite.com02を指すように変更します-URL書き換えルールステージングを変更します。 yoursite.comを指すyoursite.com01

すぐにロールバック機能を使用して、ゼロダウンタイム、即時切り替えが可能になりました!

考慮すべき唯一の落とし穴は、プロセス外セッション状態です。スワップ中にセッション状態が失われないように、状態サーバーが両方のサイトIDを受け入れることを確認してください。

また、これはWebのみであり、データベースではないことに注意してください。

スクリプトを作成するには、構成エディターを使用します。必要な変更を行い、「スクリプトを生成」をクリックします。C#、appcmd、またはAHAdminコードが提供されます。

インスタンスをスワップするためのWebページのフロントエンドを使用して、これを数か月間使用してきましたが、振り返ることはありません。従来の展開と比較して、展開が非常に更新されます。


@Scott-フォローアップに感謝します。投稿したことは、これまで一度もやったことがないので一般的なことではありません。
-MattB

ダウンタイムを招くことなくURL書き換えルールを変更することはあまり成功していません。大部分の時間は次のとおりです。トラフィックの多いサーバーでURL書き換えルールを変更すると、CPUが5〜10秒間100%に急上昇し、タイムアウトやユーザーからの遅延が発生する可能性があります。
カヴン

1
@kavunはい、それには真実があります。過去数年間の何らかのバージョンアップデートで、グローバルレベルのURL書き換えルールにより、すべてのサイトでappdomainがリサイクルされるようになりました。以前はそうではありませんでした。したがって、同じサーバー上にASP.NETサイトがある場合、影響がある可能性があります。ただし、これ専用のARRサーバーがある場合、appdomainリサイクルのペナルティは最小限であり、このような優れたソリューションを引き続き使用できます。
スコットフォーサイス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.