Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

クイックスタート

最終更新 Markdown で表示Agent セットアップ

Load Balancing をすぐに使い始めます。より詳しい説明は ラーニングパス を参照してください。

このガイドは、Cloudflare の Load Balancing の構成要素 を把握していることを前提とします。



始める前に

次を確認してください。

  • 物理またはクラウド上の エンドポイント(オリジンサーバー、プライベートまたはパブリック IP アドレス、仮想 IP アドレス(VIP)など)を複数利用できる
  • どのアカウント種別でも アドオン として利用できる Load Balancing にアクセスできる
  • テスト用と本番用のホスト名が SSL/TLS 証明書 でカバーされている

モニターを作成する

モニターは、プール内の各エンドポイントの健全性を評価するために、定期的にヘルスモニターリクエストを発行します。

プールが異常になると、ロードバランサーはそのプールをエンドポイントのローテーションから外します。

モニターを設定する

モニターは、ロードバランサーの作成ワークフロー 内、または Monitors タブで作成できます。

  1. Load Balancing を開きます。

  2. Monitors タブを選びます。

  3. Create monitor を選びます。

  4. 次の情報を追加します。

    • Type: ヘルスモニターに使うプロトコルです
      • Enterprise 以外のお客様: HTTPHTTPSTCP から選びます。
      • Enterprise のお客様: HTTPHTTPSTCPUDP ICMPICMP PingSMTP から選びます。
    • Path: ヘルスモニターリクエストを送るエンドポイントのパスです
    • Port: ヘルスモニターの宛先ポートです

  5. 追加の設定は Advanced health monitor settings を選びます。

    • Interval:
      • デフォルトを大きくすると、フェイルオーバー時間を改善できますが、エンドポイントの負荷も増える場合があります。
      • 最小間隔(秒)は 60(Pro)、15(Business)、10(Enterprise)です。
    • TimeoutRetries:
      • ヘルスモニターリクエストが Timeout で指定した時間を超え(かつ、その超過回数が指定した Retries 回数を超えた)場合、unhealthy を返します。
    • Expected Code(s): 期待する HTTP レスポンスコード。個別に指定する(200302)か、範囲で指定します(たとえば 2xx と入力すると、200 番台のすべてのレスポンスコードが対象になります)。
    • Response Body:
      • レスポンス本文内の、大文字小文字を区別しない部分文字列を探します。
      • 値は比較的静的で、HTML ページの先頭 10 KB 以内にあることを確認してください。
    • Simulate Zone:
    • Follow Redirects:
      • 301 または 302 コードを unhealthy として報告する代わりに、ヘルスモニターリクエストは最終エンドポイントまでリダイレクトをたどります。
    • Configure Request Header(s):
      • エンドポイントが特定の受信ヘッダーを期待している場合に便利です。
    • Header:
      • ヘルスモニターで送信する HTTP リクエストヘッダーです。デフォルトで Host ヘッダーを設定することを推奨します。User-Agent ヘッダーは上書きできません。このパラメーターは HTTP および HTTPS モニターでのみ有効です。

  6. Save を選びます。

サーバーを準備する

ファイアウォールや Web サーバーが、設定したヘルスモニター、または Cloudflare IP アドレス に関連するリクエストをブロックしたり、レート制限したりしないようにしてください。

各ヘルスモニターの HTTP user-agent は "Mozilla/5.0 (compatible; Cloudflare-Traffic-Manager/1.0; +https://www.cloudflare.com/traffic-manager/; pool-id: $poolid)" です。$poolid関連するプール の先頭 16 文字です。

モニターを設定する

モニターのプロパティの一覧は、Create Monitor を参照してください。API 認証で困った場合は、Cloudflare API ドキュメント を参照してください。

Required API token permissions

At least one of the following token permissions is required:
  • Load Balancing: Monitors and Pools Write
Create Monitorbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/load_balancers/monitors" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"type": "https",
		"description": "Login page monitor",
		"method": "GET",
		"path": "/health",
		"header": {
				"Host": [
						"example.com"
				],
				"X-App-ID": [
						"abc123"
				]
		},
		"port": 8080,
		"timeout": 3,
		"retries": 0,
		"interval": 90,
		"expected_body": "alive",
		"expected_codes": "2xx",
		"follow_redirects": true,
		"allow_insecure": true,
		"consecutive_up": 3,
		"consecutive_down": 2,
		"probe_zone": "example.com"
	}'

応答には、新しいモニターの完全な定義が含まれます。

応答json
{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "id": ":monitor-id",
    "created_on": "2021-01-01T05:20:00.12345Z",
    "modified_on": "2021-01-01T05:20:00.12345Z",
    "type": "https",
    "description": "Login page monitor",
    "method": "GET",
    "path": "/health",
    "header": {
      "Host": [
        "example.com"
      ],
      "X-App-ID": [
        "abc123"
      ]
    },
    "port": 8080,
    "timeout": 3,
    "retries": 0,
    "interval": 90,
    "expected_body": "alive",
    "expected_codes": "2xx",
    "follow_redirects": true,
    "allow_insecure": true,
    "consecutive_up": 3,
    "consecutive_down": 2,
    "probe_zone": "example.com"
  }
}
サーバーを準備する

ファイアウォールや Web サーバーが、設定したヘルスモニター、または Cloudflare IP アドレス に関連するリクエストをブロックしたり、レート制限したりしないようにしてください。

各ヘルスモニターの HTTP user-agent は "Mozilla/5.0 (compatible; Cloudflare-Traffic-Manager/1.0; +https://www.cloudflare.com/traffic-manager/; pool-id: $poolid)" です。$poolid関連するプール の先頭 16 文字です。

モニター設定の例

項目
Type HTTP
Path /
Port 80
Interval 60
Method GET
Timeout 5 秒
Retries 2
Expected Code(s) 200

プールを作成する

Cloudflare では、プールはエンドポイントとその整理方法を表します。そのため、プールは複数のエンドポイントのグループにも、プールあたり 1 つのエンドポイント(オリジンサーバーなど)にもできます。

DNS の用語に詳しい場合は、プールを「レコードセット」と考えると分かりやすいです。ただし Cloudflare は、正常とみなしたアドレスだけを返します。個別のプールにヘルスモニターを付けて、監視をカスタマイズできます。プールに付けられるのは、単一のモニターかモニターグループのどちらか一方だけです。両方は付けられません。

プールは、ロードバランサーの作成ワークフロー 内、または Pools タブで作成できます。

  1. Load Balancing を開きます。

  2. Pools タブを選び、Create pool を選びます。

  3. プールについて、次の情報を入力します。

    • 名前(一意である必要があります)
    • 名前の詳細を説明する説明
    • Endpoint Steering の選択。プールが各エンドポイントへトラフィックをルーティングする方法に影響します
  4. 各エンドポイントについて、次の情報を入力します。

    • 名前(一意である必要があります)
    • エンドポイントのアドレス、または関連するホスト名
    • (任意)Virtual Network。エンドポイントがプライベート IP アドレスの場合は必須です。
    • Weight
    • (任意)Add host header を選んで ホスト名 を指定します
    • (任意)トラフィックの送信先ポート
  1. プール内の追加エンドポイントについても、この手順を繰り返します。

  2. (任意)プールに Proximity Steering 用の座標を設定します。

  3. プールで、次の情報を更新します。

    • Health Threshold:

      Health Threshold は、プール全体を Healthy とみなし、ロードバランサーのプール順に従ってトラフィックを受け取るために必要な、健全なエンドポイント数です。この数を大きくするとプールの信頼性は上がりますが、unhealthy にもなりやすくなります。

    • Monitor: モニター を関連付けます
    • Health Monitor Regions: プールのヘルスを 複数のロケーション から確認するかどうかを選びます。精度は上がりますが、エンドポイントへのプローブトラフィックが発生することがあります
    • Pool Notifications: プールの有効化・無効化、またはプールやエンドポイントの ヘルスステータス の変化を通知するアラートを、新規作成または既存の確認ができます。
  4. 完了したら、Save を選びます。

プロパティの一覧は Create Pool を参照してください。API 認証のヘルプは Cloudflare API ドキュメント を参照してください。

Required API token permissions

At least one of the following token permissions is required:
  • Load Balancing: Monitors and Pools Write
Create Poolbash
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/load_balancers/pools" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"description": "Primary data center - Provider XYZ",
		"name": "primary-dc-1",
		"enabled": false,
		"load_shedding": {
				"default_percent": 0,
				"default_policy": "random",
				"session_percent": 0,
				"session_policy": "hash"
		},
		"minimum_origins": 2,
		"monitor": "f1aba936b94213e5b8dca0c0dbf1f9cc",
		"check_regions": [
				"WEU",
				"ENAM"
		],
		"origins": [
				{
						"name": "app-server-1",
						"address": "0.0.0.0",
						"enabled": true,
						"weight": 0.56,
						"header": {
								"Host": [
										"example.com"
								]
						}
				}
		],
		"origin_steering": {
				"policy": "random"
		},
		"notification_filter": {
				"origin": {
						"disable": false,
						"healthy": null
				},
				"pool": {
						"disable": false,
						"healthy": null
				}
		}
	}'

レスポンスには、新しいプールの完全な定義が含まれます。

レスポンスjson
{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "id": "17b5962d775c646f3f9725cbc7a53df4",
    "created_on": "2021-01-01T05:20:00.12345Z",
    "modified_on": "2021-01-01T05:20:00.12345Z",
    "description": "Primary data center - Provider XYZ",
    "name": "primary-dc-1",
    "enabled": false,
    "load_shedding": {
      "default_percent": 0,
      "default_policy": "random",
      "session_percent": 0,
      "session_policy": "hash"
    },
    "minimum_origins": 2,
    "monitor": "f1aba936b94213e5b8dca0c0dbf1f9cc",
    "check_regions": [
      "WEU",
      "ENAM"
    ],
    "origins": [
      {
        "name": "app-server-1",
        "address": "0.0.0.0",
        "enabled": true,
        "weight": 0.56,
        "header": {
          "Host": [
            "example.com"
          ]
        }
      }
    ],
    "origin_steering": {
      "policy": "random"
    },
    "notification_filter": {
      "origin": {
        "disable": false,
        "healthy": null
      },
      "pool": {
        "disable": false,
        "healthy": null
      }
    }
  }
}

プールを作成したあと、次のパラメーターを指定して 新しい通知を作成 することも必要です。

"alert_type": "load_balancing_health_alert",
"filters": {
  "pool_id": <<ARRAY_OF_INCLUDED_POOL_IDS>>,
  "new_health": <<ARRAY_OF_STATUS_TRIGGERS>> ["Unhealthy", "Healthy"],
  "event_source": <<ARRAY_OF_OBJECTS_WATCHED>> ["pool", "origin"]
}

プールのヘルスを確認する

プールにトラフィックを向ける前に、プールとモニターが正しく設定されていることを確認してください。ヘルスチェックのステータスは、最初のチェック結果が得られるまで unknown です。

ダッシュボードでプールのヘルスを確認するには、次の手順を行います。

  1. Load Balancing を開きます。
  2. Pools タブを選択します。
  3. プールと個々のエンドポイントについて、Health 列と Endpoint Health 列の値を確認します。

プールとエンドポイントのヘルスステータスの詳細は、プールが unhealthy になる仕組み を参照してください。

すべてのプールの最新ヘルスステータスを取得するには、List Pools コマンドを使い、プールとオリジン(エンドポイント)の healthy 値に注目してください。

特定のプールのヘルスをトラブルシューティングするには、Pool Health Details コマンドを使います。

想定外のヘルスステータス

正常なプールが異常とマークされる場合は、次を確認します。

テスト用サブドメインでロードバランサーを作成する

本番ドメインから始める代わりに、テスト用またはステージング用のドメインでロードバランサーを作成することを推奨します。インフラの構成によっては、モニターやプールを一時的に変更する場合があります。

テストドメインから始めると、本番トラフィックを流す前に、すべてが正しく動作していることを確認できます。

ダッシュボードで Public または Private のロードバランサーを作成するには:

Public ロードバランサーを作成する

  1. Load Balancing を開き、Create load balancer を選択します。

  2. Load Balancer SetupPublic load balancer を選択します。

  3. このロードバランサーを追加する Web サイトを選びます。

  4. Hostname ページで次を行います。

    • Hostname を入力します。ロードバランサーが応答する DNS 名です。レコードの優先順位の詳細は 負荷分散の DNS レコード を参照してください。
    • Data Localization のドロップダウンから、ドメインで使う リージョン を選びます。
    • オレンジ色の雲アイコンを切り替えて プロキシモード を更新します。トラフィックの経路と広告する IP アドレスが変わります。
    • ロードバランサーの説明を追加します。
    • セッションベースの負荷分散 を使う場合は、Session Affinity スイッチをオンにします。
    • Adaptive Routing を使う場合は、Adaptive Routing スイッチをオンにします。
  5. Next を選択します。

  6. Add a Pool ページで次を行います。

    • 既存のプールを 1 つ以上選ぶか、新しいプールを作成 します。
    • トラフィックステアリングOff にする場合は、ロードバランサー内のプールを並べ替えてフォールバック順を調整します。
    • 必要に応じて Fallback Pool を更新します。
    • トラフィックステアリングを Random にする場合は、各プールへ送るトラフィックの割合を決める Weights を(API 経由で)設定できます。
  7. Next を選択します。

  8. Monitors ページで次を行います。

    • プールに付いているモニターを確認します。
    • 必要に応じて、既存のモニターを付けるか、新しいモニターを作成 します。
  9. Next を選択します。

  10. Traffic Steering ページで トラフィックステアリング のオプションを選び、Next を選択します。

  11. Custom Rules ページで、既存のルールを選ぶか 新しいルールを作成 します。

  12. Next を選択します。

  13. Review ページで次を行います。

    • 設定を確認し、必要に応じて変更します。
    • Save as Draft または Save and Deploy を選びます。

Private ロードバランサーを作成する

  1. Load Balancing を開き、Create load balancer を選択します。

  2. Load Balancer SetupPrivate load balancer を選択します。

  3. ロードバランサーを Cloudflare のプライベート IP、または指定した IP アドレスに関連付け、説明を作成します。

  4. Add a Pool ページで次を行います。

    • 既存のプールを 1 つ以上選ぶか、新しいプールを作成 します。
    • トラフィックステアリングOff にする場合は、ロードバランサー内のプールを並べ替えてフォールバック順を調整します。
    • 必要に応じて Fallback Pool を更新します。
    • トラフィックステアリングを Random にする場合は、各プールへ送るトラフィックの割合を決める Weights を(API 経由で)設定できます。
  5. Next を選択します。

  6. Monitors ページで次を行います。

    • プールに付いているモニターを確認します。
    • 必要に応じて、既存のモニターを付けるか、新しいモニターを作成 します。
  7. Next を選択します。

  8. Traffic Steering ページで トラフィックステアリング のオプションを選び、Next を選択します。

  9. Next を選択します。

  10. Review ページで次を行います。

    • 設定を確認し、必要に応じて変更します。
    • Save as Draft または Save and Deploy を選びます。

プロパティの一覧は、Create Load Balancer を参照してください。API 認証で困ったときは、Cloudflare API のドキュメント を参照してください。

Required API token permissions

At least one of the following token permissions is required:
  • Load Balancers Write
Create Load Balancerbash
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/load_balancers" \
	--request POST \
	--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
	--json '{
		"description": "Load Balancer for lb.example.com",
		"name": "lb.example.com",
		"enabled": true,
		"ttl": 30,
		"fallback_pool": "17b5962d775c646f3f9725cbc7a53df4",
		"default_pools": [
				"17b5962d775c646f3f9725cbc7a53df4",
				"9290f38c5d07c2e2f4df57b1f61d4196",
				"00920f38ce07c2e2f4df50b1f61d4194"
		],
		"proxied": true,
		"steering_policy": "random_steering",
		"session_affinity": "cookie",
		"session_affinity_attributes": {
				"samesite": "Auto",
				"secure": "Auto",
				"drain_duration": 100,
				"zero_downtime_failover": "sticky"
		},
		"session_affinity_ttl": 5000,
		"adaptive_routing": {
				"failover_across_pools": true
		},
		"location_strategy": {
				"prefer_ecs": "always",
				"mode": "resolver_ip"
		},
		"random_steering": {
				"pool_weights": {
						"de90f38ced07c2e2f4df50b1f61d4194": 0.3,
						"9290f38c5d07c2e2f4df57b1f61d4196": 0.5
				},
				"default_weight": 0.2
		}
	}'

レスポンスには、新しいロードバランサーの完全な定義が含まれます。

Responsejson
{
  "success": true,
  "errors": [],
  "messages": [],
  "result": {
    "id": "699d98642c564d2e855e9661899b7252",
    "created_on": "2021-01-01T05:20:00.12345Z",
    "modified_on": "2021-01-01T05:20:00.12345Z",
    "description": "Load Balancer for lb.example.com",
    "name": "lb.example.com",
    "enabled": true,
    "ttl": 30,
    "fallback_pool": "17b5962d775c646f3f9725cbc7a53df4",
    "default_pools": [
      "17b5962d775c646f3f9725cbc7a53df4",
      "9290f38c5d07c2e2f4df57b1f61d4196",
      "00920f38ce07c2e2f4df50b1f61d4194"
    ],
    "proxied": true,
    "steering_policy": "random_steering",
    "session_affinity": "cookie",
    "session_affinity_attributes": {
      "samesite": "Auto",
      "secure": "Auto",
      "drain_duration": 100,
      "zero_downtime_failover": "sticky"
    },
    "session_affinity_ttl": 5000,
    "random_steering": {
      "pool_weights": {
        "de90f38ced07c2e2f4df50b1f61d4194": 0.3,
        "9290f38c5d07c2e2f4df57b1f61d4196": 0.5
      },
      "default_weight": 0.2
    }
  }
}

任意 - ロードバランシング分析を確認する

テストドメインへサンプルリクエストを送りながら、ロードバランシング分析 ページを確認し、想定どおりにリクエストが分散されていることを確かめます。

本番トラフィックをルーティングする

ロードバランサーを設定し、正常に動作することを確認したら、本番のドメインまたはサブドメインに載せられます。

  1. プールやモニターを更新した場合は、プールの健全性を再度確認し、想定どおりに動作していることを確かめます。
  2. 本番ホスト名の DNS レコードが正しい 優先順位 になっており、SSL/TLS 証明書 でカバーされていることを確認します。
  3. ロードバランサーが本番トラフィックを受け取るように設定します。次のいずれかです。
    • 既存ロードバランサーの Hostname を編集する。
    • ロードバランサーへトラフィックを送る CNAME レコードを更新する。

任意 - 次のステップ

ロードバランサーは本番トラフィックを受け取る状態です(分析 で確認できます)。

製品のセットアップ自体は完了しています。次の提案も検討してください。

使用量ベースの通知

このサービスは 使用量ベースの課金 です。想定外の請求を避けるため、使用量ベースの課金通知の設定を推奨します。

通知を設定する手順は次のとおりです。

  1. Cloudflare ダッシュボードで Notifications ページを開きます。

    Notifications を開く ↗
  2. Alert TypeUsage Based Billing の項目で Select を選びます。

  3. 次の情報を入力します。

    • Name
    • Product
    • Notification limit(正確な指標は製品によって異なります)
    • Notification email
  4. Save を選びます。

追加の設定オプション

ロードバランサーのトラフィック振り分けをさらにカスタマイズしたり、ほかの Cloudflare 製品と連携したりできます。

役に立ちましたか?