OpenSearch Service 클러스터에서 할당되지 않은 샤드 문제를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon OpenSearch Service 클러스터에 할당되지 않은 샤드가 있습니다.

간략한 설명

다음과 같은 이유로 OpenSearch Service에 샤드가 할당되지 않을 수 있습니다.

  • 장애가 발생한 클러스터 노드
  • 잘못 구성된 복제본 수
  • 샤드가 인 메모리 잠금을 가져오지 못함
  • 샤드 제한 초과
  • 디스크 공간 문제
  • 디스크 사용량 왜곡 및 샤딩 전략
  • ClusterBlockException 오류

해결 방법

샤드가 할당되지 않은 이유 파악

할당되지 않은 샤드를 식별하고 추가 세부 정보를 확인하려면 다음 단계를 수행하세요.

1.할당되지 않은 샤드를 나열합니다.

curl -XGET 'domain-endpoint/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | grep UNASSIGNED

참고: 세분화된 액세스 제어(FGAC)가 활성화된 상태에서 AWS Identity and Access Management(IAM) 보안 인증 또는 데이터베이스 보안 인증을 사용하는 경우 추가 단계가 필요합니다. IAM 또는 데이터베이스 사용자 보안 인증을 사용하여 OpenSearch Service API에 대한 요청에 서명해야 합니다.

2.샤드가 할당되지 않은 이유에 대한 세부 정보를 검색합니다.

curl -XGET 'domain-endpoint/_cluster/allocation/explain?pretty'

3.(선택 사항) Kibana 또는 OpenSearch 대시보드를 사용하는 경우 다음 API를 실행합니다.

GET _cluster/allocation/explain

장애가 발생한 클러스터 노드

클러스터 노드에 장애가 발생하면 샤드가 할당되지 않을 수 있습니다. 클러스터의 CPU 사용량이 높거나 하드웨어 장애가 발생하여 클러스터 노드에 장애가 발생할 수 있습니다. 클러스터에 과부하가 결렸는지 확인하려면 CPUUtilization 및 JVMMemoryPressure 지표를 확인하세요. 클러스터에 과부하가 걸리면 클러스터로 들어오는 트래픽을 줄일 수 있습니다. 관련 지침은 OpenSearch Service 클러스터의 높은 JVM 메모리 사용량 문제를 해결하려면 어떻게 해야 하나요?를 참조하세요.

노드가 가동되면 샤드가 자동으로 다시 할당됩니다. 클러스터가 빨간색 또는 노란색 상태로 유지될 경우 다음과 비슷한 오류가 발생할 수 있습니다.

 "unassigned_info" : {  "reason" : "MANUAL_ALLOCATION",  "at" : "2022-03-18T02:45:42.730Z",  "details" : """failed shard on node [xxxxxxxxxx]: shard  failure, reason [corrupt file (source: [flush])], failure  FlushFailedEngineException[Flush failed]; nested:  CorruptIndexException[codec footer mismatch (file truncated?): actual  footer=0 vs expected footer=-1071082520   """,  "last_allocation_status" : "no_valid_shard_copy"  },  "can_allocate" : "no_valid_shard_copy",  "allocate_explanation" : "cannot allocate because all found copies of the shard are either stale or corrupt",

다음 단계에 따라 스냅샷을 사용하여 이러한 인덱스를 삭제하고 복원할 수 있습니다.

1.빨간색 인덱스 식별 및 삭제:

GET _cat/indices?health=red
DELETE /index-name

2.성공적인 스냅샷 확인:

GET _cat/snapshots/cs-automated-enc

3.스냅샷에서 인덱스 복원:

POST _snapshot/Repository-name/snapshot-ID/_restore
{
 "indices": "index-name"
}

자세한 내용은 스냅샷 복원을 참조하세요.

잘못 구성된 복제본 수

복제본 샤드의 수가 데이터 노드 수보다 많은 경우 샤드가 할당되지 않습니다. 기본 샤드와 복제본 샤드를 동일한 노드에 할당할 수 없기 때문입니다.

이 문제를 해결하려면 다음 명령 중 하나를 사용하여 노드 수를 늘리거나 복제본 수를 줄여야 합니다.

참고: “n” 값을 원하는 값으로 변경합니다.

curl -XPUT 'domain-endpoint/<indexname>/_settings' -H 'Content-Type: application/json' -d' {  "index" : {  "number_of_replicas" : n  } }
PUT <index-name>/_settings
  {
      "index" : {
        "number_of_replicas" : n
      }
  }

참고: 복제본 샤드가 있는 단일 노드 클러스터는 항상 노란색 클러스터 상태로 초기화됩니다. OpenSearch Service에서 복제본을 할당할 수 있는 다른 사용 가능한 노드가 없기 때문에 단일 노드 클러스터는 이러한 방식으로 초기화됩니다.

샤드가 인 메모리 잠금을 가져오지 못함

샤드가 샤드 할당을 위한 인 메모리 잠금을 가져오지 못한 경우 다음 오류가 발생합니다.

"failed_allocation_attempts" : 5,  "details" : "failed shard on node []: failed to create shard, failure IOException[failed to obtain in-memory shard lock]; nested: ShardLockObtainFailedException[[][5]: obtaining shard lock timed out after 5000ms]; ", . . "explanation" : "shard has exceeded the maximum number of retries [5] on failed allocation attempts - manually call [/_cluster/reroute?retry_failed=true] to retry, [unassigned_info[[reason=ALLOCATION_FAILED], at[], failed_attempts[5], delayed=false, details[failed shard on node [xxxxxxxxxxx]: failed to create shard, failure IOException[failed to obtain in-memory shard lock]; nested: ShardLockObtainFailedException[[xxxxxxxxx][5]: obtaining shard lock timed out after 5000ms]; ], allocation_status[no_attempt]]]"

오류를 해결하려면 최대 재시도 설정을 늘리세요.

PUT /<index-name>/_settings {  "index.allocation.max_retries": 10 }

샤드 제한 초과

OpenSearch Service 버전 7.x 이상의 cluster.max_shards_per_node 설정에서 기본 한도는 샤드 1,000개입니다. cluster.max_shards_per_node 설정을 기본값인 샤드 1,000개로 유지하는 것이 가장 좋습니다. OpenSearch Service에서 샤드를 할당하는 방법을 제어하도록 샤드 할당 필터를 설정하면 필터링된 노드가 충분하지 않아 샤드가 할당되지 않을 수 있습니다. 이러한 노드 부족을 방지하려면 노드 수를 늘리세요.

참고: “n” 값을 원하는 값으로 변경합니다. 모든 기본 샤드의 복제본 수가 데이터 노드 수보다 적어야 합니다.

PUT _cluster/settings {  "index" : {  "cluster.max_shards_per_node" : n  } }

자세한 내용은 샤드 수 선택을 참조하세요.

디스크 공간 문제

디스크 기반 샤드 할당 설정으로 인해 샤드가 할당되지 않을 수도 있습니다. 예를 들어 cluster.routing.allocation.disk.watermark.low 지표가 50GB로 설정된 경우 지정된 양의 디스크 공간을 샤드 할당에 사용할 수 있어야 합니다. 자세한 내용은 디스크 기반 샤드 할당 설정(Elasticsearch 웹사이트)을 참조하세요.

현재 디스크 기반 샤드 할당 설정을 확인하려면 다음 구문을 사용하세요.

$ curl -XGET domain-endpoint/_cluster/settings?include_defaults=true&flat_settings=true

디스크 공간 문제를 해결하려면 다음 접근 방식을 고려하세요.

  • 노란색 및 빨간색 클러스터의 불필요한 인덱스 모두 삭제
  • 빨간색 클러스터의 빨간색 인덱스 삭제
  • EBS 볼륨 스케일 업
  • 데이터 노드 추가

참고: 클러스터가 빨간색 상태일 때는 클러스터의 구성을 변경하지 마세요. 빨간색 클러스터 상태일 때 도메인을 재구성하려고 하면 “처리 중” 상태로 멈출 수 있습니다.

디스크 사용량 왜곡 및 샤딩 전략

다음과 같은 이유로 디스크 사용량이 크게 왜곡될 수 있습니다.

  • 클러스터의 샤드 크기가 고르지 않습니다.
  • 노드에서 사용 가능한 디스크 공간입니다.
  • 샤드 할당 전략이 잘못되었습니다.

기본적으로 Amazon OpenSearch Service는 각 인덱스를 5개의 기본 샤드로 나누는 5:1의 샤딩 전략을 사용합니다. 각 인덱스 내에는 각 기본 샤드에도 자체 복제본이 있습니다. OpenSearch Service는 자동으로 기본 샤드와 복제본 샤드를 별도의 데이터 노드에 할당하고 장애 발생 시 백업이 있는지 확인합니다.

OpenSearch Service 클러스터의 샤드 할당을 재조정하고 샤딩 전략을 업데이트할 수 있습니다. 자세한 내용은 Amazon OpenSearch Service 클러스터의 고르지 않은 샤드 배포를 재조정하려면 어떻게 해야 합니까?를 참조하세요.

ClusterBlockException 오류

인덱스를 생성하거나 OpenSearch Service 도메인에 데이터를 쓰려고 하면 다음과 비슷한 ClusterBlockException 오류가 발생할 수 있습니다.

"reason": "blocked by: [FORBIDDEN/6/cluster read-only (api)];",
"type": "cluster_block_exception"

이 문제를 해결하려면 OpenSearch Service의 403 "index_create_block_exception" 또는 "cluster_block_exception" 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

관련 정보

Amazon OpenSearch Service 문제 해결

AWS 공식
AWS 공식업데이트됨 10달 전