Microsoft IIS バックエンドによるクロスリージョン負荷分散

このチュートリアルでは、Google Compute Engine の HTTP(S) ロードバランサ サービスを使用して、異なる Compute Engine のリージョンにある複数の Microsoft インターネット インフォメーション サービス(IIS)ウェブサーバーにトラフィックを分散する方法について説明します。

シナリオ

ここでは、サイト www.example.com のトラフィックを負荷分散します。受信リクエストを最も近いリージョンにルーティングしながら、障害の発生時やリージョンのインスタンスの上限に達した際には、次に近いリージョンの正常なインスタンスにリクエストがフェイルオーバーされるようにする必要があります。

このシナリオで構成する HTTP(S) ロードバランサでは、1 つのグローバル IP アドレスからリクエストを受け取ります。この IP アドレスで、接続の種類が HTTP と HTTPS のどちらであるかに応じて受信リクエストをルーティングできます。HTTPS リクエストの場合は、リクエストを送信したクライアントとロードバランサの間で SSL/TLS 暗号化が実装されます。

次の図に、このロードバランサのアーキテクチャを示します。

クロスリージョン負荷分散の図

このロードバランサは、構成の柔軟性を高めるために複数のコンポーネントで構成されます。各コンポーネントの詳細については、HTTP(S) 負荷分散の概要をご覧ください。

事前準備

このチュートリアルの前提条件は次のとおりです。

  • Windows マシンを使用している。
  • Google Cloud Platform Console プロジェクトを作成済みである。
  • Cloud SDK をインストール済みである。この SDK に含まれる gcloud コマンドライン ツールを使用して Google Cloud Platform とやり取りします。
  • gcloud auth login を実行して、Cloud Platform に対して認証済みである。
  • Fusion LabsChrome RDP for Google Cloud Platform 拡張機能をインストール済みである。

  • HTTP(S) 負荷分散の概要を読んで内容を理解している。

  • 使用するプロジェクトを、gcloud ツールがやり取りするデフォルトのプロジェクトとして設定済みである。まだ設定していない場合は次のコマンドを実行してください。

    PS C:\> gcloud config set --project <project_name>
    

バックエンド インスタンスを設定する

このセクションでは、異なるリージョンに 2 つのバックエンド サービスを作成します。各バックエンド サービスに 2 つのバックエンド インスタンスを含め、それぞれ Windows Server 2012 で Microsoft IIS ウェブサーバーを実行します。サーバーを 1 つずつ手動で構成する手間を省くため、1 つのサーバー インスタンスからディスク イメージを作成し、そのイメージを使用して残りのサーバー インスタンスを作成します。

ソースイメージ インスタンスを作成する

ソースイメージとして使用するインスタンスを作成します。

  1. ローカル Windows マシンで PowerShell を開きます。
  2. us-central1 リージョンに新しい Windows Server 2012 インスタンスを作成し、そのインスタンスに rdp-tag タグと www-tag タグを追加します。後で、これらのタグをターゲットにしたファイアウォール ルールを作成して、インスタンスへの外部アクセスを有効にします。

    PS C:\> gcloud compute instances create src-img ^
         --zone us-central1-f --image windows-2012-r2 ^
         --tags rdp-tag,www-tag

ソースイメージ インスタンスを作成したら、インスタンスへの外部アクセスを許可するファイアウォール ルールを設定します。

  1. rdp-tag というタグが付いたすべてのインスタンスのポート 3389 への外部アクセスを許可するファイアウォール ルールを作成します。このルールにより、ソースイメージ インスタンスと rdp-tag タグを使用する以降のすべてのインスタンスに RDP を使用してアクセスできるようにします。

    PS C:\> gcloud compute firewall-rules create rdp-rule ^
         --allow tcp:3389 --source-ranges 0.0.0.0/0 ^
         --target-tags rdp-tag
  2. www-tag のタグが付いたすべてのインスタンスのポート 80 への外部アクセスを許可する別のファイアウォール ルールを作成します。このルールにより、ソースイメージ インスタンスと www-tag タグを使用する以降のすべてのインスタンスで HTTP トラフィックを送受信できるようにします。

     PS C:> gcloud compute firewall-rules create www-rule ^
         --allow tcp:80 --source-ranges 0.0.0.0/0 ^
         --target-tags www-tag

ソースイメージ インスタンスを構成する

次に、ソースイメージ インスタンスの新しい Windows ユーザーを作成し、RDP 接続を確立します。

  1. ウェブブラウザで GCP Console[VM インスタンス] ページに移動し、ソースイメージ インスタンスの名前(src-img)をクリックします。
  2. [Windows パスワードを設定] ボタンをクリックします。
  3. [新しい Windows パスワードの設定] ダイアログで、ユーザー名を追加して [設定] をクリックし、インスタンスのユーザー アカウントを作成します。
  4. 表示されたパスワードをコピーし、ダイアログを閉じます。
  5. インスタンスのコンソール ページで [RDP] をクリックします。

    • Chrome RDP 拡張機能をインストール済みの場合は、拡張機能ウィンドウが開きます。インスタンスに接続することを確認し、ユーザー名とパスワードを入力して [OK] をクリックすると、インスタンスへの接続が確立されます。
    • Chrome RDP 拡張機能をインストールしない場合は、インスタンスの RDP ファイルをダウンロードします。このファイルを Windows リモート デスクトップ接続やサードパーティのクライアントで使用することで、インスタンスに接続できます。

ソースイメージ インスタンスとの RDP 接続を確立したら、IIS をインストールしてデフォルトのホームページを追加します。

  1. ソースイメージ インスタンスで、管理者として PowerShell を開きます。
  2. PowerShell で、次のコードを貼り付けて IIS サービスと依存関係をインストールします。

    PS C:\> Dism /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-StaticContent /FeatureName:IIS-DefaultDocument /FeatureName:IIS-DirectoryBrowsing /FeatureName:IIS-HttpErrors /FeatureName:IIS-HealthAndDiagnostics /FeatureName:IIS-HttpLogging /FeatureName:IIS-LoggingLibraries /FeatureName:IIS-RequestMonitor /FeatureName:IIS-Security /FeatureName:IIS-RequestFiltering /FeatureName:IIS-HttpCompressionStatic /FeatureName:IIS-WebServerManagementTools /FeatureName:IIS-ManagementConsole /FeatureName:WAS-WindowsActivationService /FeatureName:WAS-ProcessModel /FeatureName:WAS-NetFxEnvironment /FeatureName:WAS-ConfigurationAPI /All
  3. サービスをインストールしたら、IIS のデフォルトのウェブ ディレクトリ C:\inetpub\wwwroot に新しいホームページを作成します。

    PS C:\> Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html

ソースイメージ インスタンスからコンテンツを配信できることを確認する

ウェブブラウザで VM インスタンス ページにアクセスします。インスタンスの外部 IP をクリックして、前の手順で作成したホームページが表示されることを確認します。

ソースイメージ インスタンスから再利用可能な Windows Server 2012 イメージを作成する

ソースイメージ インスタンスが適切に構成され、コンテンツを配信できることを確認したら、インスタンスのルート永続ディスクから再利用可能なディスク イメージを作成します。

  1. ソースイメージ インスタンスで、管理者として PowerShell を開きます。
  2. システムのクローンを作成する準備として、次のコマンドを実行します。

     PS C:> GCESysprep

    GCESysprep のオペレーションが完了すると、RDP セッションが自動的に切断されます。

  3. ローカルマシンで次のコマンドを実行して、ソース インスタンスを削除します。ただし、インスタンスのルート永続ディスクは残します。

     PS C:> gcloud compute instances delete src-img --keep-disks boot

  4. インスタンスを削除したら、削除せずに残したルート永続ディスクから新しいイメージを作成します。

     PS C:> gcloud compute images create win-be-img --source-disk src-img --source-disk-zone us-central1-f

ソースイメージを使用してインスタンス テンプレートを作成する

構成した Windows サーバーからディスク イメージを作成したら、そのイメージをインスタンス テンプレートのソースイメージとして使用できます。このテンプレートは、後で構成する 2 つのマネージド インスタンス グループで新しいインスタンスを作成するときに使用します。

ローカルマシンで次のコマンドを実行してインスタンス テンプレートを作成します。ソースイメージには win-be-img、インスタンス タグには rdp-tagwww-tag を使用します。

PS C:\> gcloud compute instance-templates create win-be-tmpl ^
    --tags rdp-tag,www-tag ^
    --image win-be-img

各リージョンのマネージド インスタンス グループを作成する

次に、各リージョンのマネージド インスタンス グループを作成します。インスタンス グループを作成すると、前の手順で定義したインスタンス テンプレートに基づいて、それぞれ 2 つの同一インスタンスが追加されます。これらのインスタンス グループは、後でロードバランサを構成するときにバックエンド ターゲットとして使用します。

マネージド インスタンス グループを作成する手順は次のとおりです。

  1. ローカルマシンで次のコマンドを実行して、ゾーン us-central1-f に新しいマネージド インスタンス グループを作成し、そのグループに 2 つの同一インスタンスを追加します。

     PS C:> gcloud compute instance-groups managed create us-be-group ^
          --base-instance-name us ^
          --size 2 ^
          --zone us-central1-f ^
          --template win-be-tmpl

  2. ゾーン europe-west1-d についても同様に処理します。

    PS C:\> gcloud compute instance-groups managed create eu-be-group ^
          --base-instance-name eu ^
          --size 2 ^
          --zone europe-west1-d ^
          --template win-be-tmpl

バックエンド インスタンスが実行されていることを確認する

ウェブブラウザで VM インスタンス ページにアクセスします。各バックエンドの外部 IP をクリックして、前の手順で作成したホームページが表示されることを確認します。

負荷分散サービスを作成して構成する

Compute Engine 負荷分散サービスは複数のコンポーネントで構成されます。このセクションでは、それらのコンポーネントを作成して連携させます。

  1. ローカルマシンで次のコマンドを実行して新しいヘルスチェックを作成します。このヘルスチェックは、ロードバランサでバックエンド インスタンスの状態をチェックする際に使用します。

    PS C:\> gcloud compute http-health-checks create basic-check
  2. バックエンド サービスを作成します。

    PS C:\> gcloud compute backend-services create be-srv ^
          --protocol HTTP --http-health-check basic-check
  3. インスタンス グループをバックエンド サービスのバックエンド ターゲットとして追加します。

    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group us-be-group --zone us-central1-f
    PS C:\> gcloud beta compute backend-services add-backend be-srv ^
          --instance-group eu-be-group --zone europe-west1-d
  4. すべてのインスタンスへのすべての受信リクエストを転送するデフォルトの URL マップを作成します。

    PS C:\> gcloud compute url-maps create lb-map --default-service be-srv
  5. SSL 証明書リソースを作成します。このリソースは、ロードバランサでトラフィックの暗号化と復号に使用します。

    秘密鍵と認証局が発行した SSL 証明書を入手済みの場合は、次のコマンドを実行すると、それらを使用して新しい SSLCertificate リソースを作成できます。それ以外の場合は、テスト用の自己署名証明書を作成して使用できます。詳しくは SSL 証明書を参照してください。

    次のコマンドを実行して SSL 証明書リソースを作成します。<crt_file_path> は証明書のローカル ファイルパス、<key_file_path> は秘密鍵のファイルパスに置き換えてください。

    PS C:\> gcloud beta compute ssl-certificates create www-cert ^
    --certificate  --private-key 
  6. URL マップにリクエストをルーティングするターゲットの HTTP プロキシと HTTPS プロキシを作成します。プロキシはロードバランサの一部であり、HTTPS 負荷分散用の SSL 証明書を保持するため、この手順で証明書も読み込みます。

     PS C:> gcloud compute target-http-proxies create http-lb-proxy ^
          --url-map lb-map
     PS C:> gcloud beta compute target-https-proxies create https-lb-proxy ^
          --url-map lb-map --ssl-certificate www-cert

  7. ロードバランサで確実にトラフィックを受信するように、ロードバランサのグローバル転送ルールにグローバル静的 IP アドレスを割り当てる必要があります。グローバル静的 IP リソースを作成するには、次のコマンドを実行します。

     PS C:> gcloud compute addresses create lb-ip --global

    IP アドレスはメモしておいてください。

  8. それぞれ受信 HTTP リクエストと受信 HTTPS リクエストを処理するグローバル転送ルールを 2 つ作成します。それぞれの転送ルールにより、IP アドレス、IP プロトコル、ポートの指定に応じて、作成したいずれかのターゲット プロキシにトラフィックが送信されます。

    次のコマンドの <lb_ip_addr> は、前の手順で作成した静的 IP アドレスで置き換えてください。

    PS C:\> gcloud compute forwarding-rules create http-fwd-rule ^
          --address  --global ^
          --target-http-proxy http-lb-proxy --port-range 80
    PS C:\> gcloud beta compute forwarding-rules create https-fwd-rule ^
          --address  --global ^
          --target-https-proxy https-lb-proxy --port-range 443

グローバル転送ルールを作成した後、構成が反映されるまでに数分かかることがあります。進行状況を確認するには、Google Cloud Platform Console で構成をモニタリングするか、ローカルマシンで次のコマンドを実行します。

PS C:\> gcloud compute backend-services get-health be-srv

バックエンドにトラフィックを送信する

負荷分散サービスの構成が完了したので、転送ルールへのトラフィックの送信を開始できます。また、別のインスタンスに分散されるトラフィックを監視できます。

バックエンドにトラフィックを送信する手順は次のとおりです。

  1. GCP Console[HTTP(S) load balancer] ページを開きます。
  2. [Incoming traffic] 列で IP アドレスをクリックします。デフォルトのホームページが表示されます。

バックエンドへのアクセスを制限する

ここまでの作業に問題がないことを確認したら、インスタンスで負荷分散サービスからの HTTP(S) トラフィックのみを受け入れるようにファイアウォール ルールを変更します。

  1. ローカルマシンで、次のコマンドを実行して www-rule ファイアウォール ルールを更新します。許可する IP の範囲を 130.211.0.0/22 に制限します。これは HTTP(S) 負荷分散ヘルスチェックの IP 範囲です。

    PS C:\> gcloud compute firewall-rules update www-rule ^
           --source-ranges 130.211.0.0/22 ^
           --target-tags www-tag
  2. ウェブブラウザで VM インスタンス ページにアクセスします。

  3. 各インスタンスをクリックして、インスタンスにアクセスできなくなったことを確認します。

停止のシミュレーションを行う

1 つのリージョン内の 1 つ以上のインスタンスについて停止のシミュレーションを実施できます。このシミュレーションによって、停止したインスタンス以外の正常なインスタンス間で負荷がどのように分散されるかを確認することができます。

次の手順でインスタンスでのリクエストの受信を停止します。

  1. インスタンスへの RDP 接続を確立します。
  2. インスタンスで、管理者として PowerShell を開きます。
  3. 次のコマンドを実行して、インスタンスに適用する新しいファイアウォール ルールを作成します。このコマンドを実行すると、ヘルス チェッカーからのヘルスチェック トラフィックがブロックされ、ロードバランサからインスタンスへの新しい HTTP 接続もすべて阻止されます。

    PS C:\> netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22
  4. ローカルマシンで次のコマンドを実行して、インスタンスのステータスが UNHEALTHY になったことを確認します。

    PS C:\> gcloud compute backend-services get-health be-srv
  5. インスタンスのステータスが UNHEALTHY になったら、ロードバランサにリクエストを送信します。正常なインスタンスからのみレスポンスが返されます。

  6. 停止のシミュレーションが終了したら、ファイアウォール ルールを削除してインスタンスの接続を復元します。停止したインスタンスで管理者として PowerShell を開き、次のコマンドを実行してルールを削除します。

    PS C:\> netsh advfirewall firewall delete rule name="Outage Test"

クリーンアップ

このチュートリアルを完了したら、Google Cloud Platform で作成したリソースをクリーンアップして、今後料金が発生しないようにします。以下のセクションで、このようなリソースを削除または無効にする方法を説明します。

Cloud Platform プロジェクトを削除する

課金を停止する最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. GCP Console で [プロジェクト] ページに移動します。

    プロジェクト ページに移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

インスタンスを削除する

Compute Engine インスタンスを削除する手順は次のとおりです。

  1. GCP Console の [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. 削除するインスタンスの隣のチェックボックスをオンにします。
  3. ページの上部にある、[削除] ボタンをクリックし、インスタンスを削除します。

永続ディスクを削除する

Compute Engine ディスクを削除する方法は次のとおりです。

  1. GCP Console で [ディスク] ページに移動します。

    [ディスク] ページに移動

  2. 削除したいディスクの隣にあるチェックボックスをオンにします。
  3. ページの上部にある [削除] ボタンをクリックし、ディスクを削除します。

次のステップ

Compute Engine での Windows の使用方法の詳細を確認する

Compute Engine での Windows インスタンスの操作に関するドキュメントをご覧ください。

他のチュートリアルを試す

Google Cloud Platform のその他の機能を試すには、チュートリアルをご覧ください。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント