본문 바로가기

IT/AWS

AWS OpenSearch 주요 구성 요소

728x90
반응형

 

OpenSearch의 기본 구조

OpenSearch는 여러 개의 노드가 모여 클러스터를 형성하고, 데이터를 샤드 단위로 나누어 저장하는 구조를 갖고 있다. 검색 요청이 들어오면 여러 노드가 협력하여 데이터를 검색한 후 최종 결과를 반환하는 방식이다.

OpenSearch의 기본 개념을 정리하면 다음과 같다.

  • 도메인 (Domain): OpenSearch 인스턴스를 구성하는 기본 단위.
  • 클러스터 (Cluster): 여러 개의 노드가 모여 하나의 OpenSearch 시스템을 형성.
  • 노드 (Node): 데이터를 저장하고 검색 요청을 처리하는 개별 서버.
  • 샤드 & 레플리카 (Shard & Replica): 데이터를 분산 저장하고 장애 발생 시 복구할 수 있도록 복제본 유지.
  • 인덱스 & 문서 (Index & Document): 데이터를 저장하는 기본 단위.
  • 쿼리 엔진 (Query Engine): 검색 요청을 실행하고 결과를 반환.

이제 각각의 요소를 하나씩 살펴보자.


도메인(Domain)

 

AWS에서 OpenSearch는 도메인(Domain)이라는 개념으로 관리된다.


도메인은 OpenSearch 를 구성하는 가장 기본적인 단위로,

클러스터의 이름과 네트워크 설정, 보안 정책, 데이터 저장 위치 등의 정보가 포함된다.

OpenSearch를 사용할 때는 도메인을 먼저 생성해야 하며, 도메인 내부에서 데이터가 저장되고 검색 요청이 처리된다.

OpenSearch 도메인은 AWS 콘솔에서 생성할 수 있으며, 생성 후 엔드포인트를 통해 API 요청을 실행할 수 있다.

 

도메인의 주요 설정 요소

  • 이름: OpenSearch 클러스터의 식별자.
  • 엔진 버전: OpenSearch의 버전 선택 가능.
  • 네트워크 설정: VPC 내부에서만 접근할지, 퍼블릭 액세스를 허용할지 결정.
  • 보안 설정: IAM 역할, 액세스 정책, 인증 방식 설정 가능.
  • 인스턴스 유형: 데이터 노드, 마스터 노드의 하드웨어 스펙 결정.
  • 스토리지 설정: EBS 볼륨 크기 및 자동 확장 여부 설정 가능.

 


클러스터(Cluster)


클러스터는 데이터를 저장하고 관리하는 가장 큰 단위다.

하나의 클러스터는 여러 개의 노드로 구성되며, 각 노드는 특정한 역할을 수행한다.

 

도메인과 클러스터의 차이

도메인은 관리를 위한 논리적 개념이라고 하면, 클러스터는 기술적 개념이라고 이해할 수 있다.

도메인이 클러스터를 포함한 개념이며, 클러스터의 네트워크 설정, 인스턴스 유형, 보안 정책 등까지 포함한다.

 

AWS에서 OpenSearch 도메인을 생성하면, 내부적으로 OpenSearch 클러스터가 자동으로 생성이 된다. 이 클러스터가 데이터를 저장하고, 검색요청을 처리하는 기능을 하는 것이다.

 


노드(Node)


OpenSearch 클러스터는 여러 개의 노드Node로 구성되며, 각 노드는 특정한 역할을 담당한다.

 

마스터 노드

= 전용 프라이머리 노드, 매니저 노드 등으로 혼용되는 듯?

클러스터 상태 유지, 노드 관리(리더 선출, 장애 복구 ), 샤드 할당을 담당한다.

 

0, 3, 5개로 구성할 수 있는데 리더 선출 과정에서 과반수의 동의를 얻는 과정이 있기 때문에 짝수와 1개로는 구성할 수 없다.

마스터 노드가 없으면 데이터 노드가 클러스터 관리를 하게 된다. 이러한 경우 검색 성능 저하 가능성이 있기 때문에 운영 환경에서는 전용 마스터노드를 구성하는 것을 권장한다.

 

데이터 노드

실제 데이터를 저장하고 검색 요청을 처리하는 핵심 노드.

1개 이상 필수로 구성해야 하며 운영 환경에서는 3개 이상으로 구성하는 것을 권장한다.

 

 

++ 노드 개수는 비용과 직결된다. 각 노드마다 EC2와 EBS 스토리지가 연결되며 EC2 사용 시간 및 EBS 스토리지 볼륨의 누적 크기에 대해 요금이 청구된다.

 


https://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/managedomains-dedicatedmasternodes.html

 

Amazon OpenSearch Service의 전용 관리자 노드 - Amazon OpenSearch Service

클러스터에 새 관리자 노드를 선택하는 데 필요한 쿼럼이 없는 경우 클러스터에 대한 쓰기 및 읽기 요청이 모두 실패합니다. 이 동작은 OpenSearch의 기본값과 다릅니다.

docs.aws.amazon.com

 

 

 

 


샤드(Shard)와 레플리카(Replica)


OpenSearch는 데이터를 효율적으로 저장하고 검색하기 위해 샤드라는 개념을 사용한다.

  • 샤드 (Primary Shard): 원본 데이터를 저장하는 기본 단위.
  • 레플리카 샤드 (Replica Shard): 기본 샤드의 복제본으로, 장애 발생 시 데이터를 보호하는 역할을 한다.


기본적으로 OpenSearch는 샤드 개수를 인덱스를 생성할 때 설정하며, 이후에는 변경할 수 없다.

 

인덱스 생성 예제

PUT ecommerce_products
{
	"settings": {
		"number_of_shards":3,
		"number_of_replicas": 1
	}
}

 

데이터를 3개의 노드 분산 저장하며, 각 샤드의 레플리카를 1개씩 유지하도록 인덱스를 생성한다.


인덱스(Index)와 문서(Document)


인덱스는 OpenSearch에서 데이터를 저장하는 기본 단위이다. 관계형 DB에서 Table과 비슷한 개념이라고 볼 수 있다.

각 인덱스 내부에는 문서(Document)가 저장된다. 관계형 DB에서 Row와 유사하다.

모든 문서는 JSON 형식으로 표현된다.

위에서 생성한 인덱스에 아래와 같이 문서를 삽입할 수 있다.

PUT ecommerce_products/_doc/1
{
	"name": "Apple MacBook Pro",
	"category": "Laptop",
	"price": 2500000,
	"stock": 10
}



이제 저장된 데이터를 검색하려면 다음과 같은 명령어를 실행하면 된다.

GET ecommerce_products/_search
{
	"query": {
	"match_all": {}
	}
}



728x90
반응형