GW LABS

기초부터 다지는 ElasticSearch 운영 노하우 (3) - ElasticSearch 기본 개념 본문

Book-Review/Programing

기초부터 다지는 ElasticSearch 운영 노하우 (3) - ElasticSearch 기본 개념

GeonWoo Kim 2022. 8. 24. 11:48

4.1 클러스터와 노드의 개념

  • 클러스터: ElasticSearch 프로세스들을 논리적으로 결합하여 하나의 ElasticSearch 프로세스처럼 사용할 수 있게 해주는 기술
    • name: 노드의 이름
    • cluster_name: 클러스터의 이름
    • cluster_uuid: 클러스터의 UUID. 클러스터의 속한 모든 노드가 동일 값을 갖는다.
  • 노드: 하나하나의 ElasticSearch 프로세스
    • 마스터: 클러스터의 메타데이터 관리. 마스터 노드는 클러스터에서 한 대이다. 마스터 노드의 역할을 할 수 있는 노드가 있지만 실제 마스터 노드는 한 대이다.
    • 데이터: 사용자의 문서를 저장
    • 인제스트: 사용자의 문서가 저장되기 전 문서 내용을 사전처리
    • 코디네이트: 사용자의 요청을 데이터 노드로 전달하고, 데이터 노드로부터 결과를 취합

 

4.2 인덱스와 타입

  • 인덱스: 사용자의 데이터가 저장되는 논리적인 공간
    • 인덱스의 이름은 클러스터 내에서 유일해야 한다.
  • 타입: 인덱스안의 데이터를 유형별로 논리적으로 나눠 놓은 공간
    • 6.x 버전 이후로는 인덱스의 타입은 1개만 지원한다.
      • 이번 버전에서는 인덱스에 존재하는 서로 다른 타입에서 동일한 이름의 JSON 문서 필드를 만들 수 있었는데, 여기에서 의도치 않은 검색 결과가 나타나는 문제가 발생했다.

 

4.3 샤드와 세그먼트

  • 샤드: 인덱스에 색인되는 문서들이 저장되는 논리적인 공간
    • 샤드는 프라이머리/레플리카 구조를 통해서 가용성을 확보한다.
    • 최초 인덱스 생성시 프라이머리 샤드 개수를 신중하게 설정해야 한다.
  • 세그먼트: 샤드의 데이터들을 가지고 있는 물리적인 파일
    • 세그먼트는 기존에 기록한 데이터를 업데이트 하지 않는다.
      • CRUD 작업시 관련 내용을 모두 파일에 기록한다.
      • Delete는 불용처리 하기 때문에 실제 데이터는 세그먼트에 남아있다.
    • 세그먼트 병합: 불용처리된 문서를 빼고 사용할 세그먼트만 병합하는 백그라운드 작업
      • 여기에서 불용처리된 세그먼트들이 실제로 삭제된다.

 

4.4 프라이머리 샤드와 레플리카 샤드

  • 프라이머리 샤드
    • 인덱스를 만들 때 필수적으로 프라이머리 샤드의 개수를 설정해야 함
      • 기본 값으로 5개의 프라이머리 샤드가 설정
    • 프라이머리 샤드 번호 = Hash(문서의 id) % 프라이머리 샤드 개수
  • 레플리카 샤드
    • 프라이머리 샤드와 겹쳐지지 않도록 노드에 분배
    • 장애 발생시에 프라이머리 샤드로 승격되고 새로운 레플리카를 생성
    • 기본 설정은 프라이머리 샤드 하나당 레플리카 샤드 하나
# 인덱스 당 샤드 개수 설정
curl -X PUT "localhost:9200/shard_index?pretty -d 
{
	"index.number_of_shards" : 5
}

# 인덱스 샤드 세팅 조회
curl -X GET "localhost:9200/shard_index/_settings?pretty -d

 

4.5 매핑

  • 매핑: ElasticSearch에 저장될 JSON 문서들이 어떤 키와 어떤 형태의 값을 가지고 있는 지 정의한 것
  • 미리 정의하는 것을 정적 매핑, 최초 색인된 문서를 바탕으로 자동 생성하는 것을 동적 매핑이라고 한다.
# 매핑조회
curl -X GET "localhost:9200/firstidex/_mapping?pretty
Comments