풀 세트
풀 세트 (Pool sets)
이 문서는 API를 통해 위치별 풀, 스티어링 정책, 가중치, 폴백 동작을 정의할 수 있게 해 주는 풀 세트(pool sets)에 대해 안내해요.
출처: 문서
본문
풀 세트를 사용하면 지리적 스티어링을 다른 트래픽 스티어링 정책과 결합할 수 있어요. 예를 들어 특정 지역이나 국가 안에서 Dynamic Latency(동적 대기 시간) 스티어링을 적용할 수 있죠. API로 관리하는 로드 밸런서의 경우, 풀 세트가 Geo 스티어링을 대체할 수 있어요.
풀 세트로 할 수 있는 것들:
- 하나의 위치 안에서 지원되는 모든 스티어링 정책을 적용
- 해당 위치에만 적용되는 풀 가중치 설정
- 전역 폴백 풀 대신 해당 위치에 대한 폴백 풀 지정
- 일치하는 프록시(proxied) 트래픽에 대해 고정 HTTP 응답 반환
참고
대시보드에서 관리하는 단순한 지리적 장애 조치에는 Geo 스티어링을 사용해요. Geo 스티어링은 각 위치의 풀을 장애 조치 순서로 평가하고 하나의 전역 폴백 풀을 사용해요. 위치 내에서 풀 간에 트래픽을 나눌 수는 없어요.
풀 세트가 평가되는 방식
풀 세트는 로드 밸런서에 정렬된 배열로 저장돼요. Cloudflare는 배열 순서대로 이를 평가하며, match가 성공하는 첫 번째 풀 세트에서 멈춰요. 그 풀 세트가 해당 요청에 대한 풀, 스티어링 정책, 가중치, 폴백 풀을 제공해요.
단일 데이터 센터와 일치하는 풀 세트가 지역과 일치하는 것보다 자동으로 우선하지는 않아요. 배열을 가장 구체적인 것부터 가장 덜 구체적인 것 순으로 정렬하세요.
match.default를 true로 설정해 기본 풀 세트를 마지막에 배치해요. default 매치는 모든 요청에 적용돼요. 풀 세트는 첫 매치 승리(first-match wins) 방식을 사용하므로, 이 풀 세트가 이전 풀 세트와 일치하지 않은 요청을 처리해요:
{
"pool_sets": [
{
"name": "sjc-only",
"match": { "topology": { "pops": ["SJC"] } },
"overrides": { "pools": ["17b5962d775c646f3f9725cbc7a53df4"] }
},
{
"name": "default",
"match": { "default": true },
"overrides": { "pools": ["ff02c959d17f7bb2b1184a202e3c0af7"] }
}
]
}
disabled가 true로 설정된 풀 세트는 건너뛰어져요.
매치 조건 (Match conditions)
match 객체는 풀 세트가 어떤 요청에 적용되는지 결정해요. default 또는 topology 중 하나를 설정하며 둘은 결합할 수 없어요. match가 전혀 없는 풀 세트는 모든 요청에 적용돼요.
| Field | Description |
|---|---|
default |
true일 때 모든 요청과 일치해요. topology와 결합할 수 없어요. |
topology |
위치로 일치해요. pops, countries, regions 중 최소 하나가 필요해요. |
토폴로지 매칭
topology 안에서 각 필드는 위치 코드 목록을 받아요:
| Field | Values |
|---|---|
pops |
요청을 처리하는 데이터 센터와 대조되는 Cloudflare 데이터 센터 코드 |
countries |
ISO 3166-1 alpha-2 국가 코드 |
regions |
WNAM 같은 Cloudflare 지역 코드 |
하나의 필드 안의 항목들은 OR로 결합돼요. 독일의 요청은 "countries": ["FR", "DE", "GB"]와 일치해요.
주의
필드는 NOT이 아닌 AND로 결합돼요. "countries": ["US"]와 "regions": ["WNAM"]을 모두 설정한 topology는 미국에 있고 그리고 WNAM 지역에 있는 요청만 일치해요. 두 위치 중 하나와 일치시키려면 별도의 풀 세트 두 개를 사용하세요.
예를 들어, 이 토폴로지는 세 필드 모두에 여러 값을 설정해요:
{
"match": {
"topology": {
"pops": ["SJC", "IAD"],
"countries": ["US", "CA"],
"regions": ["WNAM", "ENAM"]
}
}
}
요청의 데이터 센터가 SJC 또는 IAD이고, 국가가 US 또는 CA이며, 그리고 지역 계층에 WNAM 또는 ENAM이 포함될 때 일치해요.
특별히 그 AND 동작을 원하지 않는다면 topology당 필드를 하나만 설정하세요.
regions 항목은 요청의 지역 계층 어디에든 나타나면 일치하므로, 더 넓은 지역 코드가 더 좁은 지역의 요청과 일치할 수 있어요.
국가 매칭은 요청에 대해 해석된 위치를 사용해요. 클라이언트 위치를 해석할 수 없으면, 국가 매칭은 요청을 처리하는 Cloudflare 데이터 센터의 국가로 대체돼요.
오버라이드 (Overrides)
overrides 객체는 매치 시 적용되는 라우팅 동작을 담아요. 필드는 선택적이지만, fixed_response가 없는 풀 세트는 overrides.pools를 설정해야 해요.
| Field | Description |
|---|---|
pools |
라우팅할 풀 ID. 이 요청에 대해 로드 밸런서의 풀 선택을 완전히 대체해요. |
pool_weights |
이 풀 세트 안에서만 적용되는 풀별 가중치 |
pool_default_weight |
pool_weights에 항목이 없는 pools의 풀에 대한 가중치 |
fallback_pool |
이 풀 세트의 마지막 수단 풀. 생략하면 로드 밸런서의 폴백 풀이 사용돼요. |
steering_policy |
pools에 적용되는 스티어링 정책 |
pools는 위치를 풀로 매핑한 맵이 아니라 단순한 목록이에요. 일치한 풀 세트가 요청에 대한 전체 후보 풀 집합을 정의해요.
풀 세트 내 스티어링 정책
풀 세트 안에서 지원되는 스티어링 정책:
| Policy | Behavior within the pool set |
|---|---|
off |
장애 조치 순서로 pools 사용 |
random |
pool_weights를 존중하며 풀을 무작위로 선택 |
dynamic_latency |
가장 낮은 왕복 시간(RTT)을 가진 풀 선택 |
proximity |
위도와 경도로 요청에 가장 가까운 풀 선택 |
least_outstanding_requests |
가중치와 미처리 요청 수로 풀 선택 |
least_connections |
가중치와 열린 연결 수로 풀 선택 |
pool_weights와 pool_default_weight는 random, least_outstanding_requests, least_connections에 적용돼요. 이 가중치는 로드 밸런서의 random_steering 가중치와는 별개이므로, 각 풀 세트는 풀에 독립적으로 가중치를 부여할 수 있어요.
steering_policy를 생략하면 풀 세트는 장애 조치 순서를 사용해요.
고정 응답 (Fixed responses)
프록시된 존 로드 밸런서의 경우, 풀 세트는 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 전용 로드 밸런서에는 fixed_response를 사용하지 마세요. DNS 응답은 HTTP 상태, 본문, 리다이렉트 필드를 전달할 수 없어요. 일치하는 고정 응답은 레코드 없이 NOERROR를 반환해요.
풀 세트는 overrides.pools 또는 fixed_response 중 하나를 반드시 지정해야 해요. 둘 다 없으면 거부되는데, 트래픽과 일치한 후 보낼 곳이 없기 때문이에요.
다른 스티어링 설정과의 관계
풀 세트는 표준 스티어링 필드와 독립적이에요. 풀 세트를 추가해도 default_pools, region_pools, country_pools, pop_pools, steering_policy, random_steering, fallback_pool을 읽거나 쓰지 않으며, 그 필드들을 구성한다고 풀 세트가 만들어지지도 않아요.
일치한 풀 세트가 요청에 대한 풀 선택을 대체하므로, 표준 필드는 풀 세트가 일치하는 요청에는 영향을 주지 않아요. 어떤 풀 세트와도 일치하지 않는 요청은 표준 스티어링 구성으로 넘어가요.
default_pools는 모든 요청이 풀 세트와 일치할 것으로 기대하더라도 모든 로드 밸런서에서 여전히 필수예요. 어떤 풀 세트와도 일치하지 않는 요청의 목적지가 되기 때문이에요.
사용자 정의 규칙 (Custom rules)
풀 세트는 사용자 정의 규칙보다 먼저 평가돼요. 일치한 풀 세트가 라우팅 결정을 세우고, 사용자 정의 규칙이 그 위에 오버라이드를 적용해요.
fixed_response를 반환하는 풀 세트는 완전한 응답이므로, 그 요청에 대해서는 사용자 정의 규칙이 평가되지 않아요.
DNS 전용 로드 밸런서
국가 매칭은 최상위 스티어링 정책과 location_strategy에 의존해요. 전략이 구성되면 Geo와 Proximity 스티어링은 EDNS Client Subnet(ECS), 리졸버 IP 주소, 또는 응답하는 Cloudflare 데이터 센터를 사용할 수 있어요. 전략이 없으면 Proximity는 가능할 때 ECS를 사용하고, Geo는 응답하는 데이터 센터를 사용해요. 다른 최상위 정책은 응답하는 데이터 센터를 사용해요.
풀 세트는 매치를 평가한 후 overrides.steering_policy를 적용해요. 따라서 오버라이드는 국가 매칭에 사용되는 위치를 바꿀 수 없어요. 자세한 내용은 EDNS Client Subnet(ECS) 지원을 참고해요.
제한 (Limits)
풀 세트에는 다음 제한이 적용돼요:
| Limit | Value |
|---|---|
| 로드 밸런서당 풀 세트 | 1,000 |
name의 문자 수 |
200 |
pops, countries, regions 목록당 항목 수 |
1,000 |
하나의 pops, countries, regions 목록 안의 중복 항목은 거부돼요.
주의
풀 세트가 참조하는 풀은 모든 풀 세트에서 이를 제거할 때까지 삭제할 수 없어요. 이는 overrides.pools, overrides.pool_weights, overrides.fallback_pool의 풀에 적용돼요.
API로 풀 세트 구성하기
풀 세트는 Update Load Balancer 엔드포인트의 pool_sets 필드를 통해 관리돼요. PATCH 요청을 보낼 때:
pool_sets를 생략하면 기존 풀 세트가 변경되지 않아요"pool_sets": []를 보내면 모든 풀 세트가 제거돼요"pool_sets": null을 보내면 아무 변경이 없어요
예시 요청
이 예시를 사용하기 전에 참조된 풀을 만드세요. 각 예시 풀 ID를 계정의 ID로 바꾸세요.
이 요청은 북아메리카 서부 트래픽을 가중치에 따라 두 풀로 나누고 지역 폴백 풀을 사용해요. 독일 트래픽에는 가장 낮은 대기 시간 풀을 선택해요. 기본 풀 세트가 나머지 모든 트래픽을 처리해요. 로드 밸런서는 별도의 전역 폴백 풀을 사용해요.
다음 본문으로 /zones/{zone_id}/load_balancers/{load_balancer_id}에 PATCH 요청을 보내세요:
Requestjson
{
"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"
}
}
]
}
결과 동작
요청이 완료된 후 로드 밸런서는 이 구성으로 트래픽을 라우팅해요:
| Order | Match | Pools | Steering policy | Fallback pool |
|---|---|---|---|---|
| 1 | 북아메리카 서부 (WNAM) |
17b5962d775c646f3f9725cbc7a53df4, 9290f38c5d07c2e2f4df57b1f61d4196 |
Random, 각각 50% | 2a28d35d1c00f000540fe739a04b3230 |
| 2 | 독일 (DE) |
0930eec54a4c7ae6616985b79f678210, c8b4f5a6d7e84910a2b3c4d5e6f70819 |
Dynamic Latency | Global fallback |
| 3 | 나머지 모든 트래픽 | ff02c959d17f7bb2b1184a202e3c0af7 |
장애 조치 순서 | Global fallback |
전역 폴백 풀은 6f1ed002ab5595859014ebf0951522d9예요.
검증 오류 (Validation errors)
잘못된 풀 세트 구성은 HTTP 상태 400과 API 오류 코드 1002를 반환해요. 오류 메시지는 문제를 설명하며 다음 식별자 중 하나를 포함할 수 있어요:
| Message identifier | Cause |
|---|---|
POOL_SETS_TOO_LARGE |
하나의 로드 밸런서에 풀 세트가 1,000개 넘음 |
POOL_SET_NO_INTENT |
풀 세트가 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 |
계정이 국가 스티어링 자격이 없음 |
더 알아보기 (Learn more)
풀 세트는 위치별로 세밀한 스티어링 정책·가중치·폴백을 구성할 수 있게 해 줘요. API 기반 고급 라우팅이 필요할 때 Geo 스티어링 대신 사용하면 돼요.