ヘルスチェックの追加

Google Cloud Platform(GCP)ヘルスチェックは、インスタンスが「正常」で機能が利用できるかどうかを確認するものです。このドキュメントでは、負荷分散でのヘルスチェックについて説明します。

TCP、SSL、HTTP、HTTPS プロービングに構成できる新しいスタイルのヘルスチェック(HealthChecks)の詳細については、概要に直接進んでください。

以前の HttpHealthChecks リソースと HttpsHealthChecks リソースの詳細については、レガシー ヘルスチェックをご覧ください。現時点では、ネットワーク負荷分散のみでレガシー HttpHealthChecks が必要です。他のすべてのロードバランサは新しいスタイルのヘルスチェックを使用できます。

マネージド インスタンス グループを自動修復するときのヘルスチェックの使用について詳しくは、マネージド インスタンス グループのヘルスチェックを設定するをご覧ください。

概要

ヘルス チェッカーは指定された間隔でインスタンスをポーリングします。指定された回数続けてプローブに対するレスポンスに失敗したインスタンスには UNHEALTHY のマークが付けられます。このようなインスタンスには新しい接続が送信されませんが、既存の接続は継続できます。ヘルス チェッカーは異常なインスタンスのポーリングを続けます。インスタンスが指定された回数続けてプローブへのレスポンスに成功すると、そのインスタンスには再度 HEALTHY のマークが付けられ、新しい接続を受け取れるようになります。

サポートされているプロトコル

新しいスタイルのヘルスチェックは次のプロトコルをサポートします。

HTTP ヘルスチェックと HTTPS ヘルスチェック

ロードバランサからインスタンスへのトラフィックが HTTP プロトコルまたは HTTPS プロトコルを使用している場合、HTTP ヘルスチェックまたは HTTPS ヘルスチェックは、インスタンスが正常で、ウェブサーバーが稼働し、トラフィックが処理されているかどうかを確認します。

HTTP(S)ヘルスチェックが合格とみなされるためには、インスタンスがコード 200 の有効な HTTP レスポンスを返し、設定時間以内に接続を正常に閉じる必要があります。ヘルスチェックが指定された回数続けてこれを実行すると、そのインスタンスに対してステータス HEALTHY が戻されます。インスタンスが指定された回数のヘルスチェックに失敗した場合、そのインスタンスには UNHEALTHY のマークが付けられ、通知が送信されることはありません。UNHEALTHY インスタンスは新しい接続を受信しませんが、既存の接続は継続されます。UNHEALTHY インスタンスは引き続きヘルスチェック プローブを受信します。その後、インスタンスがヘルスチェックに合格する(指定された回数続けてヘルスチェックによる調査に正常にレスポンスする)と、インスタンスには HEALTHY のマークが付けられ、通知なしに新しい接続の受信を開始します。

TCP ヘルスチェックと SSL ヘルスチェック

TCP ヘルスチェックと SSL ヘルスチェックは、サービスが HTTP(S)接続ではなく TCP 接続または SSL 接続を必要とするときに使用できます。ヘルスチェックのタイプを SSL に設定すると、インスタンスへの接続に SSL 接続が使用されます。ヘルスチェックのタイプを TCP に設定すると、TCP 接続が使用されます。指定された回数連続してプローブに成功するとインスタンスのヘルスチェックは成功し、指定された回数連続してプローブに失敗すると、インスタンスのヘルスチェックは失敗します。ヘルスチェックに失敗したインスタンス上でも既存の接続は継続されます。TCP または SSL のヘルスチェックによるプローブでは、次のチェックのいずれかを使用します。

  • 単純なハンドシェーク(デフォルト): ヘルス チェッカーは単純な TCP ハンドシェークまたは SSL ハンドシェークのみを試みます。成功すると、インスタンスはそのプローブのラウンドに合格します。
  • リクエスト / レスポンス: TCP ハンドシェークまたは SSL ハンドシェークの完了後にヘルス チェッカーが送信するリクエスト ストリングを指定します。設定したレスポンス ストリングを返した場合、そのインスタンスはそのプローブのラウンドに合格します。リクエスト ストリングとレスポンス ストリングには、いずれも最大で 1,024 バイトを使用できます。

ヘルスチェックの頻度

高可用性を確保するため、GCP は個々のヘルス チェッカーの冗長コピーを作成します。この冗長ヘルスチェックはインスタンスのプローブも行います。失敗したヘルス チェッカーがあると、遅延を発生させずに冗長ヘルス チェッカーが引き継ぎます。

インスタンスのログを調べると、設定よりも頻繁にヘルスチェックのポーリングが発生していることがわかります。これは、冗長ヘルス チェッカーも設定に従っているからです。これらの冗長ヘルス チェッカーは自動的に作成され、ユーザーが別途設定することはできません。

ヘルスチェックの作成と処理

ヘルスチェックの作成

Console


gcloud コマンドライン ツールを使用して、ヘルスチェックを作成します。

gcloud


gcloud compute health-checks create [tcp | ssl | http | https] my-health-check \
    [--check-interval=CHECK_INTERVAL; default="5s"] \
    [--description=DESCRIPTION] \
    [--healthy-threshold=HEALTHY_THRESHOLD; default="2"] \
    [--host=HOST] \
    [--port=PORT; default="80"] \
    [--port-name=PORT_NAME] \
    [--proxy-header=PROXY_HEADER; default="NONE"] \
    [--request-path=REQUEST_PATH; default="/"] \
    [--timeout=TIMEOUT; default="5s"] \
    [--unhealthy-threshold=UNHEALTHY_THRESHOLD; default="2"]

すべてのパラメータの完全な説明については、SDK ドキュメントをご覧ください。

API


API にリクエストを行うには、次の URI に POST リクエストを送信します。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks

{
  "name" : [NAME]
}

リクエストのボディには、最低でも name フィールドが含まれている必要があります。

すべてのパラメータの完全な説明については、API ドキュメントをご覧ください。

ヘルスチェックの一覧表示

現在のプロジェクト内のヘルスチェックを一覧表示します。

Console


  1. Google Cloud Platform Console で、既存のヘルスチェックを一覧表示できます。
    [ヘルスチェック] ページに移動

gcloud


gcloud compute health-checks list

NAME            PROTOCOL
my-health-check SSL

API


https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks

ヘルスチェックの記述

特定のヘルスチェックに関する詳細情報を提供します。

Console


  1. Google Cloud Platform Consoleの [ヘルスチェック] ページに移動します。
    [ヘルスチェック] ページに移動
  2. ヘルスチェックをクリックします。

gcloud


gcloud compute health-checks describe my-health-check

checkIntervalSec: 5
creationTimestamp: '2016-02-20T20:47:26.034-08:00'
description: ''
healthyThreshold: 2
id: '1423984233044836273'
kind: compute#healthCheck
name: my-health-check
selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-health-check
sslHealthCheck:
  port: 443
timeoutSec: 5
type: SSL
unhealthyThreshold: 2

API


https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/[HEALTH_CHECK]

ヘルスチェックの更新

ヘルスチェックでパラメータを変更するには、次のコマンドを実行し、いずれかの create パラメータで渡します。指定したすべてのパラメータが変更されます。指定されていないパラメータは、同じまま変化しません。

Console


  1. Google Cloud Platform Consoleの [ヘルスチェック] ページに移動します。
    [ヘルスチェック] ページに移動
  2. 更新するヘルスチェックの名前をクリックします。
  3. [編集] をクリックします。
  4. 更新が必要なすべてのフィールドを更新します。
  5. [保存] をクリックします。

gcloud


gcloud compute health-checks update [tcp|ssl|http|https] [NAME]
    [--options]

例:

gcloud compute health-checks update ssl my-health-check \
    --description "SSL health check"

Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-health-check].

API


API では、標準の PUT リクエストを使用してヘルスチェックを更新することも、PATCH を使用してヘルスの一部を更新することもできます。PATCH では指定したフィールドのみが更新されます。

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/[HEALTH_CHECK]

ヘルスチェックのソース IP とファイアウォール ルール

ネットワーク負荷分散

ヘルスチェックがネットワーク負荷分散で使用されると、ヘルスチェックのプローブは、209.85.152.0/22209.85.204.0/2235.191.0.0/16 の範囲にあるアドレスから発生します。これらの接続を、負荷分散されるすべてのインスタンスに許可するファイアウォール ルールを作成する必要があります。

HTTP(S)、SSL プロキシ、TCP プロキシ、内部負荷分散

HTTP(S)、SSL プロキシ、TCP プロキシまたは内部負荷分散でヘルスチェックを使用した場合、ヘルスチェック プローブを範囲 130.211.0.0/2235.191.0.0/16 のアドレスから受信します。これらの接続を、負荷分散されるすべてのインスタンスに許可するファイアウォール ルールを作成する必要があります。

ヘルスチェックを許可するファイアウォール ルールの設定

ヘルス チェッカーからヘルスチェックのプローブを許可するファイアウォール ルールを設定します。

Console


  1. Google Cloud Platform Console で [ファイアウォール ルール] ページに移動します。
    [ファイアウォール ルール] ページに移動
  2. [ファイアウォール ルールの作成] をクリックします。
  3. [名前] を allow-health-check に設定します。
  4. [VPC ネットワーク] を my-custom-network に設定します。
  5. [ソースフィルタ] を IP ranges に設定します。
  6. [ソース IP 範囲] を 130.211.0.0/22 および 35.191.0.0/16 に設定します。
  7. [許可対象プロトコルとポート] を tcp に設定します。
  8. [ターゲットタグ] を health-check-tag に設定します。
  9. [作成] をクリックします。

gcloud


gcloud compute firewall-rules create allow-health-check \
    --network my-custom-network \
    --source-ranges 130.211.0.0/22,35.191.0.0/16 \
    --target-tags health-check-tag \
    --allow tcp

NAME                NETWORK            SRC_RANGES                    RULES  SRC_TAGS  TARGET_TAGS
allow-health-check  my-custom-network  130.211.0.0/22,35.191.0.0/16  tcp              health-check-tag

API


POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls
{
  "kind": "compute#firewall",
  "name": "allow-health-check",
  "sourceRanges": [
    "130.211.0.0/22",
    "35.191.0.0/16"
  ],
  "sourceTags": [],
  "targetTags": [
    "health-check-tag"
    ],
      "allowed": [
    {
      "IPProtocol": "tcp"
    }
  ],
  "network": "projects/[PROJECT_ID]/global/networks/my-custom-network"
}

レガシー ヘルスチェック

レガシー ヘルスチェックは、通常のヘルスチェックと同様に機能しますが、個々のヘルスチェックは特定のプロトコル(HTTP または HTTPS)に限定されます。

  • HTTP ヘルスチェック: ネットワーク負荷分散に必要です。既存の HTTP 負荷分散設定は、引き続きレガシー ヘルスチェックを使用できますが、レガシー ヘルスチェックを新しいスタイルのヘルスチェックと置き換えることをおすすめします。
  • HTTPS ヘルスチェック: 既存の HTTPS 負荷分散構成は、引き続きレガシー ヘルスチェックを使用できますが、レガシー ヘルスチェックを新しいスタイルのヘルスチェックと置き換えることをおすすめします。

HTTP または HTTPS ヘルスチェックが合格とみなされるためには、インスタンスがコード 200 の有効な HTTP レスポンスを返し、timeoutSec 以内に接続を正常に閉じる必要があります。

レガシー ヘルスチェックの作成

gcloud コマンドライン ツールを使用してヘルスチェック オブジェクトを作成するには、http-health-checks create サブコマンドまたは https-health-checks create サブコマンドを使用します。

Console


  1. Google Cloud Platform Consoleの [ヘルスチェック] ページに移動します。
    [ヘルスチェック] ページに移動
  2. [名前] を追加します。
  3. 必要に応じてその他のフィールドを設定します。
  4. [作成] をクリックします。

gcloud


gcloud compute http-health-checks create NAME
    [--check-interval CHECK_INTERVAL; default="5s"]
    [--description DESCRIPTION]
    [--healthy-threshold HEALTHY_THRESHOLD; default="2"]
    [--host HOST]
    [--port PORT; default="80"]
    [--request-path REQUEST_PATH; default="/"]
    [--timeout TIMEOUT; default="5s"]
    [--unhealthy-threshold UNHEALTHY_THRESHOLD; default="2"]

または

gcloud compute https-health-checks create NAME
    [--check-interval CHECK_INTERVAL; default="5s"]
    [--description DESCRIPTION]
    [--healthy-threshold HEALTHY_THRESHOLD; default="2"]
    [--host HOST]
    [--port PORT; default="443"]
    [--request-path REQUEST_PATH; default="/"]
    [--timeout TIMEOUT; default="5s"]
    [--unhealthy-threshold UNHEALTHY_THRESHOLD; default="2"]

API


API にリクエストを行うには、次の URI に POST リクエストを送信します。

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks

{
  "name" : [NAME]
}

または

POST https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpsHealthChecks

{
  "name" : [NAME]
}

リクエストのボディには、最低でも name フィールドが含まれている必要があります。

レガシー ヘルスチェックの更新

gcloud コマンドライン ツールで既存のヘルスチェックのプロパティを更新するには、http-health-checks update サブコマンドを使用します。リクエストの値によって、ヘルスチェックの既存の値が更新されます。

Console


  1. Google Cloud Platform Consoleの [ヘルスチェック] ページに移動します。
    [ヘルスチェック] ページに移動
  2. 更新するヘルスチェックの名前をクリックします。
  3. [編集] をクリックします。
  4. 更新が必要なすべてのフィールドを更新します。
  5. [保存] をクリックします。

gcloud


gcloud compute http-health-checks update [HEALTH_CHECK]
    [--check-interval CHECK_INTERVAL]
    [--description DESCRIPTION]
    [--healthy-threshold HEALTHY_THRESHOLD]
    [--host HOST]
    [--port PORT]
    [--request-path REQUEST_PATH]
    [--timeout TIMEOUT]
    [--unhealthy-threshold UNHEALTHY_THRESHOLD]
    

または

gcloud compute https-health-checks update [HEALTH_CHECK]
    [--check-interval CHECK_INTERVAL]
    [--description DESCRIPTION]
    [--healthy-threshold HEALTHY_THRESHOLD]
    [--host HOST]
    [--port PORT]
    [--request-path REQUEST_PATH]
    [--timeout TIMEOUT]
    [--unhealthy-threshold UNHEALTHY_THRESHOLD]
    

API


API では、標準の PUT リクエストを使用してヘルスチェックを更新することも、PATCH を使用してヘルスの一部を更新することもできます。PATCH では指定したフィールドのみが更新されます。

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/[HEALTH_CHECK]

または

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpsHealthChecks/[HEALTH_CHECK]

リクエスト ボディには、このヘルスチェックを更新するための希望するフィールドと値を含める必要があります。

レガシー ヘルスチェックの一覧表示

gcloud コマンドライン ツールでヘルスチェックを一覧表示するには、HTTP ヘルスチェックでは http-health-checks list サブコマンドを、HTTPS ヘルスチェックでは https-health-checks list サブコマンドを使用します。

Console


  1. Google Cloud Platform Consoleの [ヘルスチェック] ページに移動します。
    [ヘルスチェック] ページに移動
  2. ヘルスチェックをクリックします。

gcloud


gcloud compute http-health-checks list

または

gcloud compute https-health-checks list

API


https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks

または

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpsHealthChecks

レガシー ヘルスチェックの記述

gcloud コマンドライン ツールで特定のレガシー ヘルスチェックに関する情報を取得するには、HTTP ヘルスチェックでは http-health-checks describe サブコマンドを、HTTPS ヘルスチェックでは https-health-checks describe サブコマンドを使用します。

Console


  1. Google Cloud Platform Consoleの [ヘルスチェック] ページに移動します。
    [ヘルスチェック] ページに移動
  2. ヘルスチェックをクリックします。

gcloud


gcloud compute http-health-checks describe [HEALTH_CHECK]

または

gcloud compute https-health-checks describe [HEALTH_CHECK]

API


https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpHealthChecks/[HEALTH_CHECK]

または

https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/httpsHealthChecks/[HEALTH_CHECK]

ヘルスチェックと設定の関連付け

ヘルスチェック リソースを作成しても、そのヘルスチェック リソースがロードバランサへ自動的に適用されるわけではありません。ヘルスチェックの追加後、そのヘルスチェックをターゲット プールまたはバックエンド サービスに関連付けてから、ヘルスチェックを実行する必要があります。

ヘルスチェックをバックエンド サービスで使用する前に、ヘルスチェックのプローブがインスタンスに到達できるファイアウォール ルールを設定する必要があります。

ターゲット プールまたはバックエンド サービスに複数のインスタンスが含まれることがあります。インスタンスごとに異なるヘルスチェック パラメータを定義することはできません。定義できるのは、ターゲット プールまたはバックエンド サービス内のすべてのインスタンスに適用されるヘルスチェック パラメータのみです。

ネットワーク負荷分散

ヘルスチェックは、既存のターゲット プールに追加することも、新しいターゲット プールに追加することもできます。この例では、ヘルスチェック オブジェクトを既存のターゲット プールに追加します。

gcloud compute target-pools add-health-checks [TARGET_POOL] \
    --http-health-check [HEALTH_CHECK]

HTTP(S)、TCP プロキシ、SSL プロキシ、内部負荷分散

バックエンド サービス オブジェクトを作成するときは、ヘルスチェックを作成する必要があります。詳細については、バックエンド サービスのドキュメントをご覧ください。

異常なインスタンスの取り扱い

インスタンスが異常になるときに、既存のヘルスチェックに登録された方法では異常にならないことがあります。このとき、負荷分散サービスはそのインスタンスに新しいリクエストを送信し続けます。

ヘルス チェッカーの IP アドレスをブロックすると、インスタンスのヘルスチェックを強制的に失敗させることができます。これでインスタンスをシャットダウンせずにトラブルシューティングを行うことができます。

iptables がインストールされたインスタンスに対しては、次のコマンドが機能します。

ネットワーク ロードバランサ インスタンスでは、次のコマンドを実行します。このコマンドではヘルスチェック トラフィックのブロックのみが行われます。ヘルスチェックに失敗するまで、他のすべてのトラフィックはそのインスタンスに通常通り到達し続けます。

$ sudo iptables -I INPUT 1 -m state --state NEW -s 169.254.169.254 \
-p tcp --destination-port 80 -j REJECT  \
--reject-with tcp-reset # Network load balancing

TCP ロードバランサ インスタンスまたは HTTP ロードバランサ インスタンスについては、デフォルト ポート(80)を使用してヘルスチェックを行う場合、次のコマンドを実行します。ヘルスチェックに別のポートを使用している場合は、コマンドの 80 を実際のヘルスチェック ポートに変更します。

同じポートを使用して正常性とサーバー トラフィックをチェックすると、ヘルスチェックに失敗する前でもインスタンスへの新たな接続が阻止されます。別のポートを使用している場合は、ヘルスチェックに失敗しても新しい接続を受信できます。

$ sudo iptables -I INPUT 1 -m state --state NEW -s 35.191.0.0/16 \
-p tcp --destination-port 80 -j REJECT  \
--reject-with tcp-reset # HTTP load balancing
$ sudo iptables -I INPUT 1 -m state --state NEW -s 130.211.0.0/22 \
-p tcp --destination-port 80 -j REJECT  \
--reject-with tcp-reset # HTTP load balancing

SSL ロードバランサ インスタンスまたは HTTPS ロードバランサ インスタンスについては、デフォルト ポート(443)を使用してヘルスチェックを行う場合、次のコマンドを実行します。このコマンドでは、ヘルスチェック接続がブロックされるだけでなく、ロードバランサからインスタンスへの新しい接続がすべて阻止されます。

$ sudo iptables -I INPUT 1 -m state --state NEW -s 35.191.0.0/16 \
-p tcp --destination-port 443 -j REJECT  \
--reject-with tcp-reset # HTTPS load balancing
$ sudo iptables -I INPUT 1 -m state --state NEW -s 130.211.0.0/22 \
-p tcp --destination-port 443 -j REJECT  \
--reject-with tcp-reset # HTTPS load balancing

インスタンスを復元するには同じコマンドを再実行しますが、-I INPUT 1 ではなく -D INPUT とします。

該当する iptables コマンドをシャットダウン スクリプトに追加し、インスタンスがさらに正常にシャットダウンされるようにすることもできます。正常にシャットダウンするには、スクリプトでヘルスチェックをブロックしてから、ヘルスチェックが失敗するまで十分な時間だけ待ち、その後他のサービスをシャットダウンするようにします。スクリプトがどの程度の時間待つ必要があるかは、ヘルスチェックの設定によって異なります。

詳細については、シャットダウン スクリプトの実行をご覧ください。

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

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

Compute Engine ドキュメント