클러스터 라우팅 및 Awareness API
클러스터 라우팅 및 Awareness API (Cluster Routing And Awareness API)
검색 트래픽을 zone 간에 어떻게 분산할지 제어하고 싶으시죠? awareness 속성 값에 가중치(weight)를 부여하면 돼요. zonal 배포나 이기종 클러스터, 혹은 비정상 zone에서 트래픽을 피하려는 경우에 특히 유용해요.
출처: 문서
본문
1.0에서 도입
검색 트래픽이 zone 간에 어떻게 라우팅되는지 제어하려면 awareness 속성 값에 가중치를 할당할 수 있어요. 이는 zonal 배포, 이기종 클러스터, 또는 비정상 zone에서 트래픽을 돌리는 데 유용해요.
사전 요구 사항 (Prerequisites)
이 API를 사용하기 전에 클러스터 awareness 속성과 노드 속성을 구성해야 해요. 이 작업은 opensearch.yml 파일에서 하거나 클러스터 설정 API를 통해 할 수 있어요.
예를 들어 opensearch.yml에서 zone과 rack awareness 속성을 구성하려면 쉼표로 구분된 목록으로 지정해요.
cluster.routing.allocation.awareness.attributes: zone,rack
또는 클러스터 설정 API로 awareness 속성을 구성할 수도 있어요.
PUT /_cluster/routing/awareness/zone/weights
{
"weights": {
"zone_1": "1",
"zone_2": "1",
"zone_3": "0"
},
"_version": -1
}
엔드포인트
PUT /_cluster/routing/awareness/{attribute}/weights
GET /_cluster/routing/awareness/{attribute}/weights?local
GET /_cluster/routing/awareness/{attribute}/weights
DELETE /_cluster/routing/awareness/{attribute}/weights
경로 파라미터
다음 표는 사용 가능한 경로 파라미터예요. 모든 경로 파라미터는 선택적이에요.
| Parameter | Data type | Description |
|---|---|---|
| attribute | String | 구성된 awareness 속성의 이름(예: zone)이에요. 경로에 지정된 속성은 가중치가 적용되는 awareness 속성을 결정해요. |
쿼리 파라미터
다음 표는 사용 가능한 쿼리 파라미터예요. 모든 쿼리 파라미터는 선택적이에요.
| Parameter | Data type | Description |
|---|---|---|
| local | Boolean | GET 요청에서만 제공할 수 있어요. true면 cluster manager 노드 대신 요청을 받은 노드에서 정보를 검색해요. 기본값은 false예요. |
요청 본문 필드
다음 표는 PUT과 DELETE 메서드에서 사용 가능한 요청 본문 필드예요.
| Parameter | Data type | Applicable method | Description |
|---|---|---|---|
| weights | Object | PUT | awareness 속성 값에 대한 사용자 정의 가중치를 지정해요. 가중치는 검색 요청이 zone 또는 다른 awareness 속성 값 간에 어떻게 분산되는지에 영향을 줘요. 가중치는 상대적이며 어떤 비율이든 사용할 수 있어요. 예를 들어 3개 zone에서 2:3:5 비율이면 요청의 20%, 30%, 50%가 각각 해당 zone으로 라우팅돼요. 가중치 0은 검색 트래픽을 받지 않도록 zone을 제외해요. PUT 메서드에 필수예요. |
| _version | Integer | PUT, DELETE | 낙관적 동시성 제어(OCC)에 사용돼요. 현재 버전이 일치할 때만 변경 사항이 적용되어 충돌하는 업데이트를 방지해요. 성공적인 PUT 또는 DELETE 작업 후 버전이 증가해요. 동시성 제어를 시작하려면 초기 요청에서 _version을 -1로 설정해야 해요. PUT과 DELETE 메서드에 필수예요. |
예시 요청: 가중치 라운드로빈 검색 (Weighted round-robin search)
다음 예시 요청은 두 zone 사이에 검색 트래픽에 대한 라운드로빈 샤드 할당을 만드는 동시에, 세 번째 zone은 어떤 트래픽도 받지 않도록 제외해요.
PUT /_cluster/routing/awareness/zone/weights
{
"weights": {
"zone_1": "1",
"zone_2": "1",
"zone_3": "0"
},
"_version": -1
}
이 요청 후 _version은 0으로 증가해요.
여러 awareness 속성에 대한 샤드 할당을 만들려면 각 속성에 대해 별도의 요청을 보내세요.
예시 요청: 구성 업데이트하기
PUT 요청은 지정된 awareness 속성에 대한 기존 가중치 구성을 완전히 대체해요. 요청에서 생략된 값은 구성에서 제거돼요. 예를 들어 다음 요청은 zone 1과 zone 3의 가중치를 업데이트하고 zone 2를 제거해요.
PUT /_cluster/routing/awareness/zone/weights
{
"weights": {
"zone_1": "2",
"zone_3": "1"
},
"_version": 0
}
이 요청 후 _version은 1로 증가해요.
예시 요청: 구성 보기
현재 가중치 구성과 그 버전을 보려면 다음 요청을 보내요. 반환된 버전 번호를 후속 업데이트나 삭제 요청에 사용해요.
GET /_cluster/routing/awareness/zone/weights
예시 응답
{
"weights": {
"zone_1": "2.0",
"zone_3": "1.0"
},
"_version": 1,
"discovered_cluster_manager": true
}
예시 요청: 구성 삭제하기
가중치 구성을 제거하려면 DELETE 요청에 현재 버전을 제공해요.
DELETE /_cluster/routing/awareness/zone/weights
{
"_version": 1
}
이 요청 후 _version은 2로 증가해요.
다음 단계
- zone commissioning에 대한 자세한 내용은 Cluster decommission을 참고하세요.
- allocation awareness에 대한 자세한 내용은 Cluster formation을 참고하세요.
더 알아보기 (Learn more)
- awareness 속성의 전반적인 개념과 설정 방법은 Cluster formation에서 다뤄요.
- zone을 정리(commission/decommission)하는 방법은 Cluster decommission 페이지에서 확인할 수 있어요.