Neptune 전체 텍스트 검색 문제 해결 - Amazon Neptune

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Neptune 전체 텍스트 검색 문제 해결

참고

OpenSearch 클러스터에서 세분화된 액세스 제어를 활성화한 경우 Neptune 데이터베이스에서도 IAM 인증을 활성화해야 합니다.

Neptune에서 OpenSearch로의 복제 관련 문제를 진단하려면 폴러 Lambda 함수에 대한 CloudWatch Logs를 참조하세요. 이러한 로그는 스트림에서 읽은 레코드 수와 OpenSearch에 성공적으로 복제된 레코드 수에 대한 세부 정보를 제공합니다.

또한 LoggingLevel 환경 변수를 변경하여 Lambda 함수의 LOGGING 수준을 변경할 수도 있습니다.

참고

LoggingLevelDEBUG로 설정하면 StreamPoller를 통해 Neptune에서 OpenSearch로 데이터를 복제하면서 삭제된 스트림 레코드 및 각 레코드가 삭제된 이유와 같은 추가 세부 정보를 볼 수 있습니다. 이는 누락된 레코드가 있는 경우 유용할 수 있습니다.

Neptune 스트림 소비자 애플리케이션은 문제를 진단하는 데 도움이 될 수 있는 CloudWatch의 2가지 지표를 게시합니다.

  • StreamRecordsProcessed – 애플리케이션에서 시간 단위당 처리된 레코드 수입니다. 애플리케이션 실행 속도를 추적하는 데 도움이 됩니다.

  • StreamLagTime – 처리 중인 스트림 레코드의 현재 시간과 커밋 시간 간의 시간 차이(밀리초)입니다. 이 지표는 소비자 애플리케이션이 얼마나 지연되고 있는지 보여줍니다.

또한 복제 프로세스와 관련된 모든 지표는 CloudWatch 템플릿을 사용하여 애플리케이션을 인스턴스화할 때 제공된 ApplicationName과 동일한 이름으로 CloudWatch의 대시보드에 표시됩니다.

또한 폴링이 연속해서 두 번 이상 실패할 때마다 트리거되는 CloudWatch 경보를 만들도록 선택할 수도 있습니다. 애플리케이션을 인스턴스화할 때 CreateCloudWatchAlarm 필드를 true로 설정하여 이를 수행할 수 있습니다. 그런 다음 경보가 트리거될 때 알림을 받을 이메일 주소를 지정합니다.

스트림에서 레코드를 읽는 동안 실패한 프로세스 문제 해결

스트림에서 레코드를 읽는 동안 프로세스가 실패할 경우 다음 사항을 갖추고 있는지 확인합니다.

  • 스트림이 클러스터에서 활성화되었습니다.

  • Neptune 스트림 엔드포인트가 다음과 같이 올바른 형식입니다.

    • Gremlin 또는 openCypher의 경우: https://your cluster endpoint:your cluster port/propertygraph/stream 또는 그 별칭, https://your cluster endpoint:your cluster port/pg/stream

    • SPARQL의 경우: https://your cluster endpoint:your cluster port/sparql/stream

  • DynamoDB 엔드포인트가 VPC에 대해 구성되었습니다.

  • 모니터링 엔드포인트가 VPC 서브넷에 대해 구성되었습니다.

OpenSearch에 데이터를 쓰는 동안 실패한 프로세스 문제 해결

OpenSearch에 레코드를 쓰는 동안 프로세스가 실패할 경우 다음 사항을 갖추고 있는지 확인합니다.

  • Elasticsearch 버전이 7.1 이상이거나 OpenSearch 2.3 이상입니다.

  • OpenSearch는 VPC의 폴러 Lambda 함수에서 액세스할 수 있습니다.

  • OpenSearch에 연결된 보안 정책은 인바운드 HTTP/HTTPS 요청을 허용합니다.

기존 복제 설정에서 Neptune과 OpenSearch 간의 동기화 불능 문제 해결

ExpiredStreamException 또는 데이터 손상으로 인해 Neptune 데이터베이스와 OpenSearch 도메인 간에 동기화 불능 문제가 발생하는 경우 아래 단계를 통해 Neptune 데이터베이스와 OpenSearch 도메인을 최신 데이터와 다시 동기화할 수 있습니다.

이 접근 방식은 OpenSearch 도메인의 모든 데이터를 삭제하고 Neptune 데이터베이스의 현재 상태에서 다시 동기화하므로, Neptune 데이터베이스에서 데이터를 다시 로드할 필요가 없습니다.

  1. 스트림 폴러 프로세스 비활성화(일시 중지)에 설명된 대로 복제 프로세스를 비활성화합니다.

  2. 다음 명령을 사용하여 OpenSearch 도메인에서 Neptune 인덱스를 삭제합니다.

    curl -X DELETE "(your OpenSearch endpoint)/amazon_neptune"
  3. 데이터베이스의 복제본을 생성합니다(Neptune의 데이터베이스 복제 참조).

  4. 스트림 API 엔드포인트에 대해 다음과 같은 종류의 명령을 실행하여 복제된 데이터베이스의 스트림에서 최신 eventID를 가져옵니다(자세한 내용은 Neptune 스트림 REST API 호출 참조).

    curl "https://(your neptune endpoint):(port)/(propertygraph or sparql)/stream?iteratorType=LATEST"

    응답에서 lastEventId 객체의 commitNumopNum 필드 값을 기록해 둡니다.

  5. Github의 export-neptune-to-elasticsearch 도구를 사용하여 복제된 데이터베이스를 OpenSearch 도메인으로 한 번에 동기화할 수 있습니다.

  6. 복제 스택에 대한 DynamoDB 표로 이동합니다. 표 이름은 AWS CloudFormation 템플릿에서 지정한 애플리케이션 이름(기본값 NeptuneStream)에 -LeaseTable 접미사가 붙어 구성됩니다. 즉, 기본 표 이름은 NeptuneStream-LeaseTable입니다.

    표에는 행이 하나만 있어야 하므로, 스캔하여 표 행을 탐색할 수 있습니다. 위에 기록해 둔 commitNumopNum 값을 사용하여 다음과 같이 변경하세요.

    • 표의 checkpoint 필드 값을 commitNum에 대해 기록해 둔 값으로 변경합니다.

    • 표의 checkpointSubSequenceNumber 필드 값을 opNum에 대해 기록해 둔 값으로 변경합니다.

  7. 스트림 폴러 프로세스 재활성화에 설명된 대로 복제 프로세스를 다시 활성화합니다.

  8. 복제된 데이터베이스와 export-neptune-to-elasticsearch 도구용으로 생성된 AWS CloudFormation 스택을 삭제합니다.