pool set(場所ごとのプール集合)を使うと、地理的ステアリングとほかのトラフィックステアリングポリシーを組み合わせられます。たとえば、特定のリージョンや国の中で Dynamic Latency ステアリングを適用できます。API で管理するロードバランサーでは、pool set で Geo steering を置き換えられます。
pool set では次ができます。
- 1 つの場所の中で、サポートされている任意のステアリングポリシーを適用する
- その場所にだけ適用するプールの重みを設定する
- グローバルのフォールバックプールではなく、その場所用のフォールバックプールを割り当てる
- 一致したプロキシトラフィックに対して固定の HTTP レスポンスを返す
pool set はロードバランサー上の順序付き配列として保存されます。Cloudflare は配列の順に評価し、match が成功した最初の pool set で止めます。その pool set が、リクエスト用のプール、ステアリングポリシー、重み、フォールバックプールを提供します。
1 つのデータセンターに一致する pool set が、リージョンに一致する pool set より自動的に優先されることはありません。配列は、より具体的なものからより広いものの順に並べてください。
match.default を true にして、デフォルトの pool set を最後に置きます。default マッチはすべてのリクエストに適用されます。pool set は先勝ちなので、この pool set が、それより前の pool set に一致しなかったリクエストを処理します。
{
"pool_sets": [
{
"name": "sjc-only",
"match": { "topology": { "pops": ["SJC"] } },
"overrides": { "pools": ["17b5962d775c646f3f9725cbc7a53df4"] }
},
{
"name": "default",
"match": { "default": true },
"overrides": { "pools": ["ff02c959d17f7bb2b1184a202e3c0af7"] }
}
]
}disabled が true の pool set はスキップされます。
match オブジェクトは、どのリクエストに pool set を適用するかを決めます。default または topology のいずれかを設定します。2 つを組み合わせることはできません。match がまったくない pool set は、すべてのリクエストに適用されます。
| フィールド | 説明 |
|---|---|
default |
true のとき、すべてのリクエストに一致します。topology と組み合わせることはできません。 |
topology |
場所で一致します。pops、countries、regions のうち少なくとも 1 つが必要です。 |
topology 内の各フィールドは、場所コードのリストを受け取ります。
| フィールド | 値 |
|---|---|
pops |
Cloudflare データセンターコード。リクエストを処理しているデータセンターと照合します |
countries |
ISO 3166-1 alpha-2 の国コード |
regions |
Cloudflare の リージョンコード。例: WNAM |
同一フィールド内のエントリは OR で結合されます。ドイツからのリクエストは "countries": ["FR", "DE", "GB"] に一致します。
たとえば、このトポロジーは 3 つのフィールドすべてに複数の値を設定しています。
{
"match": {
"topology": {
"pops": ["SJC", "IAD"],
"countries": ["US", "CA"],
"regions": ["WNAM", "ENAM"]
}
}
}リクエストが一致するのは、データセンターが SJC または IAD であり、国が US または CA であり、かつ リージョン階層に WNAM または ENAM が含まれる場合です。
その AND の動作を意図する場合以外は、topology あたりフィールドは 1 つにしてください。
regions のエントリは、リクエストのリージョン階層のどこかに現れれば一致します。そのため、より広いリージョンコードが、より狭いリージョンからのリクエストにも一致することがあります。
国のマッチングには、リクエストに対して解決された場所を使います。クライアントの場所を解決できない場合、国のマッチングはリクエストを処理している Cloudflare データセンターの国にフォールバックします。
overrides オブジェクトは、一致時に適用するルーティング動作を持ちます。各フィールドは任意ですが、fixed_response のない pool set は overrides.pools を設定する必要があります。
| フィールド | 説明 |
|---|---|
pools |
ルーティング先のプール ID です。このリクエストではロードバランサーのプール選択を完全に置き換えます。 |
pool_weights |
この pool set 内でのみ適用される、プールごとの重みです |
pool_default_weight |
pool_weights にエントリがない pools 内のプールに使う重みです |
fallback_pool |
この pool set の最終手段となるプールです。省略すると、ロードバランサーのフォールバックプールを使います。 |
steering_policy |
pools に適用するステアリングポリシーです |
pools は、場所からプールへのマップではなく、フラットなリストです。一致した pool set が、そのリクエストの候補プール一式を定義します。
pool set 内では、次のステアリングポリシーをサポートします。
| ポリシー | pool set 内での動作 |
|---|---|
off |
pools をフェイルオーバー順に使う |
random |
pool_weights を尊重してプールをランダムに選ぶ |
dynamic_latency |
ラウンドトリップ時間が最も短いプールを選ぶ |
proximity |
緯度と経度でリクエストに最も近いプールを選ぶ |
least_outstanding_requests |
重みと未完了リクエスト数でプールを選ぶ |
least_connections |
重みとオープン接続数でプールを選ぶ |
pool_weights と pool_default_weight は random、least_outstanding_requests、least_connections に適用されます。これらの重みはロードバランサーの random_steering の重みとは別なので、各 pool set は独立してプールに重みを付けられます。
steering_policy を省略すると、pool set はフェイルオーバー順を使います。
プロキシされたゾーンのロードバランサーでは、pool set が overrides.pools の代わりに fixed_response を返せます。一致した場所に対して HTTP ステータスやリダイレクトを返すときに使います。
{
"pool_sets": [
{
"name": "redirect-region",
"match": { "topology": { "countries": ["US"] } },
"fixed_response": {
"status_code": 302,
"location": "https://example.com/service-unavailable"
}
}
]
}DNS only のロードバランサーでは fixed_response を使わないでください。DNS レスポンスは HTTP ステータス、本文、リダイレクトフィールドを運べません。固定レスポンスが一致すると、レコードなしの NOERROR が返ります。
pool set は overrides.pools または fixed_response のいずれかを指定する必要があります。どちらもない pool set は拒否されます。トラフィックに一致したあと、送り先がなくなるためです。
pool set は標準のステアリングフィールドから独立しています。pool set を追加しても default_pools、region_pools、country_pools、pop_pools、steering_policy、random_steering、fallback_pool の読み取りや書き込みは行いません。これらのフィールドを設定しても pool set は作られません。
一致した pool set がそのリクエストのプール選択を置き換えるため、標準フィールドは pool set が一致したリクエストには効きません。どの pool set にも一致しないリクエストは、標準のステアリング設定にフォールスルーします。
すべてのリクエストが pool set に一致する想定でも、すべてのロードバランサーで default_pools は必須です。どの pool set にも一致しないリクエストの宛先になります。
pool set は カスタムルール より先に評価されます。一致した pool set がルーティング判断を確立し、そのうえでカスタムルールがオーバーライドを適用します。
fixed_response を返す pool set はそのレスポンスで完結するため、そのリクエストではカスタムルールは評価されません。
国のマッチングは、トップレベルのステアリングポリシーと location_strategy に依存します。戦略を設定している場合、Geo と Proximity ステアリングは EDNS Client Subnet(ECS)、リゾルバーの IP アドレス、または応答する Cloudflare データセンターを使えます。戦略を設定していない場合、Proximity は利用可能なら ECS を使い、Geo は応答するデータセンターを使います。ほかのトップレベルポリシーは応答するデータセンターを使います。
pool set はマッチを評価したあとで overrides.steering_policy を適用します。そのため、オーバーライドで国のマッチングに使う場所を変えることはできません。詳細は EDNS Client Subnet(ECS)のサポート を参照してください。
pool set には次の制限があります。
| 制限 | 値 |
|---|---|
| ロードバランサーあたりの pool set 数 | 1,000 |
name の文字数 |
200 |
pops、countries、regions の各リストのエントリ数 |
1,000 |
1 つの pops、countries、regions リスト内の重複エントリは拒否されます。
pool set は Update Load Balancer エンドポイントの pool_sets フィールドで管理します。PATCH リクエストを送るときの動作は次のとおりです。
pool_setsを省略すると、既存の pool set は変わりません"pool_sets": []を送ると、すべての pool set を削除します"pool_sets": nullを送っても変更はありません
この例を使う前に、参照するプールを作成してください。各例のプール ID は、アカウント内の ID に置き換えてください。
このリクエストは、西北米のトラフィックを重みで 2 つのプールに分割し、リージョン用のフォールバックプールを使います。ドイツのトラフィックには、レイテンシが最も低いプールを選びます。残りのトラフィックはデフォルトの pool set が処理します。ロードバランサーは別のグローバルフォールバックプールを使います。
/zones/{zone_id}/load_balancers/{load_balancer_id} へ、次の本文で PATCH リクエストを送ります。
{
"fallback_pool": "6f1ed002ab5595859014ebf0951522d9",
"pool_sets": [
{
"name": "wnam-active-active",
"match": { "topology": { "regions": ["WNAM"] } },
"overrides": {
"pools": [
"17b5962d775c646f3f9725cbc7a53df4",
"9290f38c5d07c2e2f4df57b1f61d4196"
],
"pool_weights": {
"17b5962d775c646f3f9725cbc7a53df4": 0.5,
"9290f38c5d07c2e2f4df57b1f61d4196": 0.5
},
"steering_policy": "random",
"fallback_pool": "2a28d35d1c00f000540fe739a04b3230"
}
},
{
"name": "de-lowest-latency",
"match": { "topology": { "countries": ["DE"] } },
"overrides": {
"pools": [
"0930eec54a4c7ae6616985b79f678210",
"c8b4f5a6d7e84910a2b3c4d5e6f70819"
],
"steering_policy": "dynamic_latency"
}
},
{
"name": "default",
"match": { "default": true },
"overrides": {
"pools": ["ff02c959d17f7bb2b1184a202e3c0af7"],
"steering_policy": "off"
}
}
]
}リクエスト完了後、ロードバランサーはこの設定でトラフィックをルーティングします。
| 順序 | マッチ | プール | ステアリングポリシー | フォールバックプール |
|---|---|---|---|---|
| 1 | 西北米(WNAM) |
17b5962d775c646f3f9725cbc7a53df4、9290f38c5d07c2e2f4df57b1f61d4196 |
ランダム、各 50% | 2a28d35d1c00f000540fe739a04b3230 |
| 2 | ドイツ(DE) |
0930eec54a4c7ae6616985b79f678210、c8b4f5a6d7e84910a2b3c4d5e6f70819 |
Dynamic Latency | グローバルフォールバック |
| 3 | 残りのすべてのトラフィック | ff02c959d17f7bb2b1184a202e3c0af7 |
フェイルオーバー順 | グローバルフォールバック |
グローバルフォールバックプールは 6f1ed002ab5595859014ebf0951522d9 です。
無効な pool set 設定は HTTP ステータス 400 と API エラーコード 1002 を返します。エラーメッセージが問題を説明し、次のいずれかの識別子を含むことがあります。
| メッセージ識別子 | 原因 |
|---|---|
POOL_SETS_TOO_LARGE |
1 つのロードバランサーに 1,000 を超える pool set がある |
POOL_SET_NO_INTENT |
pool set が overrides.pools も fixed_response も指定していない |
POOL_SET_DEFAULT_WITH_MATCH |
match が default と topology を組み合わせている |
POOL_SET_EMPTY_TOPOLOGY |
topology が pops、countries、regions のいずれも設定していない |
POOL_SET_TOPOLOGY_TOO_LARGE |
topology のリストが 1,000 エントリを超えている |
POOL_SET_POP_ENTITLEMENT |
アカウントにデータセンターステアリングの資格がない |
POOL_SET_REGION_ENTITLEMENT |
アカウントにリージョンステアリングの資格がない |
POOL_SET_COUNTRY_ENTITLEMENT |
アカウントに国ステアリングの資格がない |