web-dev-qa-db-ja.com

ダウンタイムなしのアップロード/ IIS

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

1.)IISのサイトにチェンジセットをプッシュします。
2。)ユーザーの邪魔をしないでください。
3。)楽にロールバックできる。

ですから、私が知っていることがいくつかあります。

1.)Procセッション外-処理済み
2。)Procキャッシュが不足しています-処理済み

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

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

これは理論的には正しいように思われますが、メカニズムについてはよくわかりません。何か案は?

17
ChickenMilkBomb

これが私がこの問題に取り組む方法です-私がこれまでにこれを行ったことがないことを覚えておいてください、それは私が私の開発環境で少しテストした概念にすぎません。これと選択した言語のスクリプトを使用して、かなり堅牢なフレームワークをセットアップできるはずです。基本的に、ゲットーの負荷分散環境をセットアップし、それを使用して新しいサイトと古いサイトを切り替えます。

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

まず、ARRをインストールします。

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

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

ARRをインストールすると、IIS Manager "Server Farms"という新しいカテゴリが作成されます。それを右クリックして、新しいファームを作成します。

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

この時点で、あなたは私たちがあなたの要求を達成するために必要なものの基本を持っています。 _http://192.168.1.1/_にアクセスすると、Webサイト1またはWebサイト2からWebサイトを取得できますが、他のサイトがあることは完全にシームレスです。

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

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

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

もう1つ、実際にWindows 2008 R2(IIS 7.5)を使用している場合は、 アプリケーションウォームアップ モジュールを参照してください-ウォーミングアップ部分を作成する必要がありますこれはあなたにとっても簡単です。

29
MattB

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

私は彼が説明したのと同様の設定をしていて、それはうまくいきます。 ARRは、単一のサーバー上でも実行する方法です。

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

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

2つのURL書き換えルールを作成します。 1つはwww.yourdomain.com用で、もう1つはstaging.yourdomain.com用です。本番環境では、値が(^ www.yourdomain.com $)|(yourIP)の{HTTP_Host}を使用します。 (または任意のバインディング)ステージングの場合、{HTTP_Host}に値(^ staging.yourdomain.com $)を使用します。ルール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.com01を指すyoursite.com

これで、ダウンタイムがゼロになり、すぐに切り替えられ、すぐにロールバック機能が利用できるようになりました。

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

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

スクリプトについては、構成エディターを使用してください。必要な変更を加えてから、[スクリプトの生成]をクリックします。それはあなたにC#、appcmdまたはAHAdminコードを与えるでしょう。

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

10