이 문서는 2023년 7월에 작성되었으며 Opensearch 2.8.0 버전입니다.

Opensearch의 Searchable Snapshot은 클러스터에서 삭제된 Index를 Snapshot으로 복원하여 데이터를 검색할 수 있도록 하는 기능을 수행합니다. Searchable Snapshot 기능을 사용하기 위해서는 Snapshot에 대한 사전 지식이 필요합니다. Snapshot 글을 먼저 참고하시면 진행하는데 많은 도움이 됩니다.

https://stdhsw.tistory.com/entry/Opensearch-Snapshot-AWS-S3%EB%B0%B1%EC%97%85-%EB%B0%8F-%EB%B3%B5%EA%B5%AC

 

클러스터 노드 구성

Opensearch에서 Searchable Snapshot 기능을 사용하기 위해서는 "search" role을 가진 노드가 필요합니다. 저는 한정된 자원으로 Master Node 1대, Data Node 2대, Search Node 1대로 클러스터를 구성하여 테스트하였습니다. (웬만하면 Master Role을 가진 노드를 3대 이상의 홀수 개수만큼 유지하는 것을 추천합니다.)

  Master Node Data Node Search Node
개수 1 2 1
Role master data
ingest
saerch

Master Node는 Opensearch의 클러스터를 관리하는 역할을 수행하며 Data Node는 실제 데이터가 저장되고 연산 기능을 수행합니다. Search Node는 Snapshot으로 부터 인덱스 데이터를 가져와 데이터를 검색할 수 있는 기능을 제공합니다.

Snapshot으로부터 데이터를 가져오는데 인덱스의 크기가 크면 매우 오래 걸릴 수 있으며 데이터를 가져오는 과정에서 네트워크 비용이 발생할 수 있습니다.

 

Snapshot 생성 시 설정

일반적인 스냅샷과 다르게 Searchable Snapshot 기능을 사용하기 위해서는 Snapshot 생성 시 "storage_type": "remote_snapshot"의 설정이 필요합니다.

PUT _snapshot/스냅샷레포지토리/스냅샷명?wait_for_completion=true
{
  "indices": "*",
  "ignore_unavailable": true,
  "include_global_state": false,
  "partial": false,
  "storage_type": "remote_snapshot"
}

storage_type에 대한 설정은 Opensearch 공식 Document에서는 다음과 같이 설명하였습니다.

 

local indicates that all snapshot metadata and index data will be downloaded to local storage.
remote_snapshot indicates that snapshot metadata will be downloaded to the cluster, but the remote repository will remain the authoritative store of the index data. Data will be downloaded and cached as necessary to service queries. At least one node in the cluster must be configured with the search role in order to restore a snapshot using the type remote_snapshot.
Defaults to local.

 

Searchable Snapshot API

평상시에는 인덱스가 존재하지 않고 필요시 Snapshot에서 복원하여 검색할 수 있도록 합니다.

POST _snapshot/스냅샷레포지토리/스냅샷명/_restore
{
  "indices": "복원인덱스",
  "storage_type": "remote_snapshot",  
  "rename_pattern": "(.+)",
  "rename_replacement": "searchable_$1",
  "index_settings": {
      "index.number_of_replicas": 0
  }
}
  • indices : 스냅샷에 포함된 복원할 인덱스
  • storage_type : search node로 복원하기 위한 설정
  • rename_pattern : searchable snapshot으로 복원한 인덱스의 새로운 이름 규칙
  • rename_replacement : 복원한 인덱스의 이름을 재지정합니다.
  • index.number_of_replicas : 복원한 인덱스의 Replica shard 개수를 설정합니다.

인덱스를 복원하면 "saerchable_원래인덱스명" 형식으로 인덱스가 복원됩니다.

 

복원 결과 샤드 구성

일반적인 인덱스의 Shard 개수는 4개로 설정하였고 Replica Shard는 1개씩 구성하도록 설정하였습니다.

Searchable Snapshot으로 복원한 인덱스는 데이터를 넣을 수 없고 검색 기능만 가능하기 때문에 Replica shard가 불필요하다고 판단하여 저는 복원한 인덱스에는 Replica shard를 구성하지 않았습니다. Searchable Snapshot으로 복원하면 Search Node에만 샤드가 구성되며 복원 완료 시 검색이 가능합니다.

 

 

공식 Opensearch Document

https://opensearch.org/docs/latest/tuning-your-cluster/availability-and-recovery/snapshots/snapshot-restore/

 

Take and restore snapshots

Take and restore snapshots

opensearch.org

+ Recent posts