Amazon Elasticsearch Service(Amazon ES) 도메인이 "Processing(처리 중)" 상태로 멈춘 이유는 무엇입니까?

최종 업데이트 날짜: 2020년 8월 21일

구성을 변경한 후 Amazon Elasticsearch Service(Amazon ES) 도메인이 "Processing(처리 중)" 상태에서 멈췄습니다. 도메인이 멈추는 이유는 무엇이며, 도메인이 다시 멈추지 않도록 하려면 어떻게 해야 합니까?

간략한 설명

다음과 같은 몇 가지 이유로 Amazon ES 도메인이 "Processing(처리 중)" 상태로 멈출 수 있습니다.

Amazon ES 도메인에서 추가로 문제 해결을 수행하기 전에 샤드 및 샤드 할당 수를 확인하는 것이 가장 좋습니다.

샤드 재할당 및 필수 파라미터 업데이트에 대한 자세한 내용은 Elasticsearch 웹 사이트의 Index-level shard allocation filtering을 참조하십시오.

​해결 방법

고르지 않은 노드 분포

Amazon ES는 스냅샷 복구, 도메인 구성 변경, 복제 수준 변경, 노드 장애 및 노드 시작 중에 샤드를 마이그레이션합니다. 파란색/녹색 배포 중에 클러스터에 샤드가 너무 많으면 샤드 마이그레이션 프로세스가 느려질 수 있습니다. CPU 사용률이 높고 JVM 메모리 압력이 높으면 마이그레이션 프로세스 속도가 느려지므로 클러스터가 “Processing(처리 중)” 상태에서 멈출 수 있습니다. 따라서 샤드 수에 걸쳐 충분한 노드가 고르게 분산되지 않으면 샤드는 “Unassigned(할당되지 않음)”이 됩니다. 파란색/녹색 배포에 대한 자세한 내용은 구성 변경 사항을 참조하십시오.

Elasticsearch 클러스터가 “Processing(처리 중)” 상태에서 멈추면 클러스터의 샤드 수를 줄이는 것이 좋습니다. 적절한 샤드 수 지정에 대한 자세한 내용은 샤드 수 선택을 참조하십시오.

샤드가 마이그레이션 중인지 확인하려면 다음 명령 구문을 입력하십시오.

$ curl -XGET "ES_Endpoint/_cat/recovery?v&active_only"

참고: 명령을 다시 실행하기 전에 몇 분 정도 기다리십시오. 출력에 변경 사항이 있는 경우 샤드를 아직 마이그레이션하는 중인 것입니다.

그런 다음, 각 노드에 할당된 샤드 수와 사용 중인 디스크 공간의 양을 확인하십시오.

$ curl -XGET ES_Endpoint/_cat/allocation?v

참고: 이 명령 구문은 디스크 사용량이 높거나 JVM 메모리 압력으로 인해 클러스터 노드가 실패했는지 여부도 나타냅니다.

할당되지 않은 샤드

클러스터의 샤드 수 및 인덱스 수를 확인하려면 다음 명령 구문을 사용합니다.

$ curl -XGET ES_Endpoint/_cat/indices
$ curl -XGET ES_Endpoint/_cat/shards

할당되지 않은 샤드 수를 식별한 후 도메인의 불필요한 샤드 수를 최소화합니다. 샤드 계산에 대한 자세한 내용은 Get Started with Amazon Elasticsearch Service: How Many Shards Do I Need?를 참조하십시오.

클러스터의 샤드 수 줄이기

클러스터의 샤드 수나 오버헤드를 줄이려면 이전 인덱스 또는 오래된 인덱스를 모두 제거하십시오.

$ curl -XDELETE ES_Endpoint/oldindex1,oldindex2

인덱스 로테이션을 구성한 경우 각 로테이션 시 샤드 세트가 새로 생성됩니다. 기본적으로 Amazon ES는 인덱스당 5개의 기본 샤드와 모든 기본 샤드에 대해 1개의 복제본 샤드를 생성합니다. 이 인덱스 회전으로 인해 결국 리더 노드가 과부하될 수 있습니다. 과부하를 방지하고 향후 샤드 증가를 제어하려면 인덱스 회전 전략을 변경하거나 인덱스 템플릿을 사용하는 것이 좋습니다.

참고: 새 인덱스를 생성하거나 기존 데이터를 다시 인덱싱할 때만 샤드 수를 지정할 수 있습니다. 문서를 인덱싱하기 전에 샤드 수를 선택하십시오.

새 인덱스의 샤드 수를 지정하려면 다음 명령을 실행하십시오.

$ curl -XPUT ES_Endpoint/index-name -H 'Content-Type: application/ json' -d'
{
      "settings": {
            "index": {
                    "number_of_shards": 3,
                    "number_of_replicas": 1                   
       }        
}'

참고: Amazon ES는 기존 인덱스의 기본 샤드 수를 변경할 수 없습니다. Amazon ES의 데이터 인덱싱에 대한 자세한 내용은 인덱싱 소개를 참조하십시오.

기존 인덱스를 재구성하려면 다음 작업을 수행하십시오.

1.    새 인덱스 템플릿을 생성하고 정의하십시오. 다음 구문은 클러스터에 생성되는 새 샤드 수를 지정합니다.

$ curl -XPUT ES_Endpoint/_template/template_1 -H 'Content-Type: application/json' -d'
{
      "index_patterns": ["*"],
      "settings": {
            "number_of_shards": 3,
            "number_of_replicas": 1     
      }
}'

2.    _reindex API 작업(Amazon ES 버전 5.1 이상)을 호출하여 다시 인덱싱하십시오. 다음 구문은 인덱스 템플릿에 새 샤드 수를 지정하여 데이터를 새 인덱스로 옮깁니다.

$ curl -XPOST ES_Endpoint/_reindex -H 'Content-Type: application/json' -d '
{
      "source": {   
            "index": "old_index"
      },
      "dest": {
            "index": "new_index"
      }   
}'

중요: 액세스 정책에 AWS Identity and Access Management(IAM) 사용자 또는 역할이 포함되어 있으면 Amazon Elasticsearch Service API에 대한 HTTP 요청에 서명해야 합니다.

3.    새 인덱스와 이전 인덱스의 문서 수가 동일한지 확인하십시오.

$ curl -XGET ES_Endpoint/_cat/indices/old_index,new_index?v

4.    새 인덱스와 이전 인덱스의 문서 수가 동일한 것으로 표시되면 이전 인덱스를 삭제해도 됩니다.

$ curl -XDELETE ES_Endpoint/old_index

5.    구성 업데이트를 다시 실행하십시오. 구성 변경에 대한 자세한 내용은 구성 변경 정보를 참조하십시오.