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

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

シナリオ

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

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

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

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

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

始める前に

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

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

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

  • Cloud プロジェクトを gcloud ツールが操作するデフォルトのプロジェクトに設定している。

    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 タグを追加します。後で、これらのタグをターゲットにしたファイアウォール ルールを作成して、インスタンスへの外部アクセスを有効にします。

    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 を使用してアクセスできるようにします。

    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 トラフィックを送受信できるようにします。

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

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

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

  1. Google Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. ソースイメージ インスタンス(src-img)の名前をクリックします。

  3. [Windows パスワードを設定] ボタンをクリックします。

  4. [新しい Windows パスワードの設定] ダイアログで、ユーザー名を追加して [設定] をクリックし、インスタンスのユーザー アカウントを作成します。

  5. 表示されたパスワードをコピーし、ダイアログを閉じます。

  6. インスタンスのコンソール ページで [RDP] をクリックします。

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

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

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

    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 に新しいホームページを作成します。

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

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

Cloud Console で、[VM インスタンス] ページに移動します。

[VM インスタンス] に移動

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

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

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

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

    GCESysprep

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

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

    gcloud compute instances delete src-img --keep-disks boot
  4. インスタンスを削除したら、削除せずに残したルート永続ディスクから新しいイメージを作成します。

    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 を使用するインスタンス テンプレートを作成します。

gcloud compute instance-templates create win-be-tmpl \
    --tags rdp-tag,www-tag \
    --image win-be-img

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

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

マネージド インスタンス グループを作成するには:

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

    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 についても同様に処理します。

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

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

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

    [VM インスタンス] に移動

  2. 各バックエンドの外部 IP をクリックして、前の手順で作成したホームページが表示されることを確認します。

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

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

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

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

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

    gcloud beta compute backend-services add-backend be-srv \
       --instance-group us-be-group \
       --zone us-central1-f
    
    gcloud beta compute backend-services add-backend be-srv \
       --instance-group eu-be-group \
       --zone europe-west1-d
  4. あらゆるインスタンスへの受信リクエストをすべて振り向けるデフォルトの URL マップを作成します。

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

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

    次のコマンドを実行して SSL 証明書リソースを作成します。

    gcloud beta compute ssl-certificates create www-cert \
       --certificate CRT_FILE_PATH \
       --private-key KEY_FILE_PATH

    以下を置き換えます。

    • CRT_FILE_PATH: 証明書のローカル ファイルのパス
    • KEY_FILE_PATH: 秘密鍵のファイルパス
  6. URL マップにリクエストをルーティングするターゲットの HTTP プロキシと HTTPS プロキシを作成します。プロキシはロードバランサの一部であり、HTTPS 負荷分散用の SSL 証明書を保持するため、この手順で証明書も読み込みます。

    gcloud compute target-http-proxies create http-lb-proxy \
       --url-map lb-map
    
    gcloud beta compute target-https-proxies create https-lb-proxy \
       --url-map lb-map \
       --ssl-certificate www-cert
  7. ロードバランサで確実にトラフィックを受信するように、ロードバランサのグローバル転送ルールにグローバル静的 IP アドレスを割り当てる必要があります。

    グローバル静的 IP リソースを作成するには、次のコマンドを実行します。

    gcloud compute addresses create lb-ip --global

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

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

    gcloud compute forwarding-rules create http-fwd-rule \
       --address LB_IP_ADDR \
       --global \
       --target-http-proxy http-lb-proxy \
       --port-range 80
    
    gcloud beta compute forwarding-rules create https-fwd-rule \
       --address LB_IP_ADDR \
       --global \
       --target-https-proxy https-lb-proxy \
       --port-range 443

    LB_IP_ADDR を前の手順で作成した静的 IP アドレスに置き換えます。

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

gcloud compute backend-services get-health be-srv

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

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

次のようにバックエンドにトラフィックを送信します。

  1. Cloud Console で、[負荷分散] ページに移動します。

    [負荷分散] に移動

  2. デフォルトのホームページを表示するには、[受信トラフィック] 列で IP アドレスをクリックします。

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

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

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

    gcloud compute firewall-rules update www-rule \
       --source-ranges 130.211.0.0/22 \
       --target-tags www-tag
  2. Cloud Console で、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

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

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

正常なインスタンス間での負荷分散の方法を確認するには、リージョン内の 1 つ以上のインスタンスで停止のシミュレーションを実施できます。

インスタンスでのリクエストの受信を停止するには:

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

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

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

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

    netsh advfirewall firewall delete rule name="Outage Test"

クリーンアップ

Microsoft IIS チュートリアルが終了したら、Google Cloud で作成したリソースをクリーンアップして、今後割り当ての消費や課金が発生しないようにします。次のセクションで、リソースを削除または無効にする方法を説明します。

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

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

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

  1. Cloud Console で [リソースの管理] ページに移動します。

    [リソースの管理] に移動

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

インスタンスを削除する

Compute Engine インスタンスを削除するには:

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

    [VM インスタンス] に移動

  2. 削除するインスタンスをクリックします。
  3. [削除] をクリックしてインスタンスを削除します。

永続ディスクを削除する

Compute Engine ディスクを削除するには:

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

    [ディスク] に移動

  2. 削除するディスクのチェックボックスをクリックします。
  3. [削除] をクリックしてディスクを削除します。

次のステップ

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

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

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

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