Load Balancing をすぐに使い始めます。より詳しい説明は ラーニングパス を参照してください。
このガイドは、Cloudflare の Load Balancing の構成要素 を把握していることを前提とします。
次を確認してください。
- 物理またはクラウド上の エンドポイント(オリジンサーバー、プライベートまたはパブリック IP アドレス、仮想 IP アドレス(VIP)など)を複数利用できる
- どのアカウント種別でも アドオン として利用できる Load Balancing にアクセスできる
- テスト用と本番用のホスト名が SSL/TLS 証明書 でカバーされている
モニターは、プール内の各エンドポイントの健全性を評価するために、定期的にヘルスモニターリクエストを発行します。
プールが異常になると、ロードバランサーはそのプールをエンドポイントのローテーションから外します。
モニターは、ロードバランサーの作成ワークフロー 内、または Monitors タブで作成できます。
-
Load Balancing を開きます。
-
Monitors タブを選びます。
-
Create monitor を選びます。
-
次の情報を追加します。
- Type: ヘルスモニターに使うプロトコルです
- Enterprise 以外のお客様: HTTP、HTTPS、TCP から選びます。
- Enterprise のお客様: HTTP、HTTPS、TCP、UDP ICMP、ICMP Ping、SMTP から選びます。
- Path: ヘルスモニターリクエストを送るエンドポイントのパスです
- Port: ヘルスモニターの宛先ポートです
- Type: ヘルスモニターに使うプロトコルです
-
追加の設定は Advanced health monitor settings を選びます。
- Interval:
- デフォルトを大きくすると、フェイルオーバー時間を改善できますが、エンドポイントの負荷も増える場合があります。
- 最小間隔(秒)は 60(Pro)、15(Business)、10(Enterprise)です。
- Timeout と Retries:
- ヘルスモニターリクエストが Timeout で指定した時間を超え(かつ、その超過回数が指定した Retries 回数を超えた)場合、unhealthy を返します。
- Expected Code(s): 期待する HTTP レスポンスコード。個別に指定する(
200、302)か、範囲で指定します(たとえば2xxと入力すると、200番台のすべてのレスポンスコードが対象になります)。 - Response Body:
- レスポンス本文内の、大文字小文字を区別しない部分文字列を探します。
- 値は比較的静的で、HTML ページの先頭 10 KB 以内にあることを確認してください。
- Simulate Zone:
- ロードバランサーが存在するゾーンと同じゾーンを使うことを推奨します。
- ヘルスモニターリクエストの egress ゾーン設定を変更し、Authenticated Origin Pulls (mTLS)、Argo Smart Routing、Bring your own CA (mTLS)、Dedicated CDN Egress IPs、HTTP/2 to Origin などの機能との互換性を確保します。
- Follow Redirects:
301または302コードを unhealthy として報告する代わりに、ヘルスモニターリクエストは最終エンドポイントまでリダイレクトをたどります。
- Configure Request Header(s):
- エンドポイントが特定の受信ヘッダーを期待している場合に便利です。
- Header:
- ヘルスモニターで送信する HTTP リクエストヘッダーです。デフォルトで Host ヘッダーを設定することを推奨します。User-Agent ヘッダーは上書きできません。このパラメーターは HTTP および HTTPS モニターでのみ有効です。
- Interval:
-
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
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"
}'応答には、新しいモニターの完全な定義が含まれます。
{
"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 タブで作成できます。
-
Load Balancing を開きます。
-
Pools タブを選び、Create pool を選びます。
-
プールについて、次の情報を入力します。
- 名前(一意である必要があります)
- 名前の詳細を説明する説明
- Endpoint Steering の選択。プールが各エンドポイントへトラフィックをルーティングする方法に影響します
-
各エンドポイントについて、次の情報を入力します。
- 名前(一意である必要があります)
- エンドポイントのアドレス、または関連するホスト名
- (任意)Virtual Network。エンドポイントがプライベート IP アドレスの場合は必須です。
- Weight
- (任意)Add host header を選んで ホスト名 を指定します
- (任意)トラフィックの送信先ポート
-
プール内の追加エンドポイントについても、この手順を繰り返します。
-
(任意)プールに Proximity Steering 用の座標を設定します。
-
プールで、次の情報を更新します。
- Health Threshold:
Health Threshold は、プール全体を Healthy とみなし、ロードバランサーのプール順に従ってトラフィックを受け取るために必要な、健全なエンドポイント数です。この数を大きくするとプールの信頼性は上がりますが、unhealthy にもなりやすくなります。
- Monitor: モニター を関連付けます
- Health Monitor Regions: プールのヘルスを 複数のロケーション から確認するかどうかを選びます。精度は上がりますが、エンドポイントへのプローブトラフィックが発生することがあります
- Pool Notifications: プールの有効化・無効化、またはプールやエンドポイントの ヘルスステータス の変化を通知するアラートを、新規作成または既存の確認ができます。
- Health Threshold:
-
完了したら、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
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
}
}
}'レスポンスには、新しいプールの完全な定義が含まれます。
{
"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 です。
ダッシュボードでプールのヘルスを確認するには、次の手順を行います。
- Load Balancing を開きます。
- Pools タブを選択します。
- プールと個々のエンドポイントについて、Health 列と Endpoint Health 列の値を確認します。
プールとエンドポイントのヘルスステータスの詳細は、プールが unhealthy になる仕組み を参照してください。
すべてのプールの最新ヘルスステータスを取得するには、List Pools コマンドを使い、プールとオリジン(エンドポイント)の healthy 値に注目してください。
特定のプールのヘルスをトラブルシューティングするには、Pool Health Details コマンドを使います。
正常なプールが異常とマークされる場合は、次を確認します。
- エンドポイントとプールが異常になる仕組み を確認します。
- トラブルシューティング を参照してください。
本番ドメインから始める代わりに、テスト用またはステージング用のドメインでロードバランサーを作成することを推奨します。インフラの構成によっては、モニターやプールを一時的に変更する場合があります。
テストドメインから始めると、本番トラフィックを流す前に、すべてが正しく動作していることを確認できます。
ダッシュボードで Public または Private のロードバランサーを作成するには:
-
Load Balancing を開き、Create load balancer を選択します。
-
Load Balancer Setup で Public load balancer を選択します。
-
このロードバランサーを追加する Web サイトを選びます。
-
Hostname ページで次を行います。
- Hostname を入力します。ロードバランサーが応答する DNS 名です。レコードの優先順位の詳細は 負荷分散の DNS レコード を参照してください。
- Data Localization のドロップダウンから、ドメインで使う リージョン を選びます。
- オレンジ色の雲アイコンを切り替えて プロキシモード を更新します。トラフィックの経路と広告する IP アドレスが変わります。
- ロードバランサーの説明を追加します。
- セッションベースの負荷分散 を使う場合は、Session Affinity スイッチをオンにします。
- Adaptive Routing を使う場合は、Adaptive Routing スイッチをオンにします。
-
Next を選択します。
-
Add a Pool ページで次を行います。
- 既存のプールを 1 つ以上選ぶか、新しいプールを作成 します。
- トラフィックステアリング を Off にする場合は、ロードバランサー内のプールを並べ替えてフォールバック順を調整します。
- 必要に応じて Fallback Pool を更新します。
- トラフィックステアリングを Random にする場合は、各プールへ送るトラフィックの割合を決める Weights を(API 経由で)設定できます。
-
Next を選択します。
-
Monitors ページで次を行います。
- プールに付いているモニターを確認します。
- 必要に応じて、既存のモニターを付けるか、新しいモニターを作成 します。
-
Next を選択します。
-
Traffic Steering ページで トラフィックステアリング のオプションを選び、Next を選択します。
-
Custom Rules ページで、既存のルールを選ぶか 新しいルールを作成 します。
-
Next を選択します。
-
Review ページで次を行います。
- 設定を確認し、必要に応じて変更します。
- Save as Draft または Save and Deploy を選びます。
-
Load Balancing を開き、Create load balancer を選択します。
-
Load Balancer Setup で Private load balancer を選択します。
-
ロードバランサーを Cloudflare のプライベート IP、または指定した IP アドレスに関連付け、説明を作成します。
-
Add a Pool ページで次を行います。
- 既存のプールを 1 つ以上選ぶか、新しいプールを作成 します。
- トラフィックステアリング を Off にする場合は、ロードバランサー内のプールを並べ替えてフォールバック順を調整します。
- 必要に応じて Fallback Pool を更新します。
- トラフィックステアリングを Random にする場合は、各プールへ送るトラフィックの割合を決める Weights を(API 経由で)設定できます。
-
Next を選択します。
-
Monitors ページで次を行います。
- プールに付いているモニターを確認します。
- 必要に応じて、既存のモニターを付けるか、新しいモニターを作成 します。
-
Next を選択します。
-
Traffic Steering ページで トラフィックステアリング のオプションを選び、Next を選択します。
-
Next を選択します。
-
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
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
}
}'レスポンスには、新しいロードバランサーの完全な定義が含まれます。
{
"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
}
}
}テストドメインへサンプルリクエストを送りながら、ロードバランシング分析 ページを確認し、想定どおりにリクエストが分散されていることを確かめます。
ロードバランサーを設定し、正常に動作することを確認したら、本番のドメインまたはサブドメインに載せられます。
- プールやモニターを更新した場合は、プールの健全性を再度確認し、想定どおりに動作していることを確かめます。
- 本番ホスト名の DNS レコードが正しい 優先順位 になっており、SSL/TLS 証明書 でカバーされていることを確認します。
- ロードバランサーが本番トラフィックを受け取るように設定します。次のいずれかです。
- 既存ロードバランサーの Hostname を編集する。
- ロードバランサーへトラフィックを送る
CNAMEレコードを更新する。
ロードバランサーは本番トラフィックを受け取る状態です(分析 で確認できます)。
製品のセットアップ自体は完了しています。次の提案も検討してください。
このサービスは 使用量ベースの課金 です。想定外の請求を避けるため、使用量ベースの課金通知の設定を推奨します。
通知を設定する手順は次のとおりです。
-
Cloudflare ダッシュボードで Notifications ページを開きます。
Notifications を開く ↗ -
Alert Type が Usage Based Billing の項目で Select を選びます。
-
次の情報を入力します。
- Name
- Product
- Notification limit(正確な指標は製品によって異なります)
- Notification email
-
Save を選びます。
ロードバランサーのトラフィック振り分けをさらにカスタマイズしたり、ほかの Cloudflare 製品と連携したりできます。