색인(Index) 과정
색인은 문서를 분석하고 저장하는 과정을 색인이라고 합니다.
먼저 색인과정은 인덱스가 있는지 체크한후 매핑정보를 파악하고 inverted index생성 후 문서를 저장하는 과정입니다.
프라이머리 샤드가 1개일때 색인이 하나의 데이터노드에서만 일어납니다. 이때 데이터노드가 3대이상이라면 사실상 2개의 데이터노드에만 저장이되고 나머지 데이터노드는 그냥 탱자탱자 놀고 있는 것입니다. 그렇기 때문에 적절한 수의 샤드의 개수를 설정하는 것이 성능에 큰 영향을 미칩니다.
클러스터의 이점을 잘 살리고 있는지, 적절한 샤드의 갯수를 설정해서 최대한 많은 노드가 색인에 참여하고 있는지 체크할 필요가 있습니다.
하지만 만약 샤드설정 이후 데이터 노드가 추가가 된다면? 샤드의 설정은 바꿀수가 없고 데이터 노드가 늘어났기 때문에 샤드의 개수가 고르게 분배되지 않기때문에 용량 불균형이 일어날 수 있습니다.
샤드 배치 전략 문서
https://www.elastic.co/guide/en/elasticsearch/reference/current/size-your-shards.html
한번에 완벽한 샤드배치를 하는것은 데이터가 얼마나 들어올지 모르는 경우가 대부분이기 때문에 만약 운영중 성능에 문제가 생긴다면 샤드의 수를 늘리거나 데이터 노드를 스케일 아웃/업을 하면서 최적의 수치를 찾아 가야합니다. 핵심은 클러스터로서의 이점을 극대화하는데 집중하는 것입니다.
검색(Search)과정
es에서 검색 과정은 검색어를 분석하고 inverted index를 검색하여 검색결과를 표시합니다.
색인은 주로 프라이머리 샤드에서 발생하지만
검색요청은 프라이머리 샤드와 레플리카샤드 모두에서 사용할 수 있습니다.
이때 색인때와 마찬가지로 샤드와 클러스터의 배치가 올바르게 돼 있지 않으면 클러스터의 이점을 누릴 수 없습니다.
그리고 색인 성능은 충분하나 검색성능이 부족할 때가 있습니다.
검색성능을 높이기 위해서는 데이터 노드를 늘린후 그에 맞게 레플리카 샤드의 겟수를 늘려주는 것입니다.
number_of_replicas 옵션을 사용해서 늘릴 수 있고 레플리카수는 데이터 노드에 맞게 운영중에 유동적으로 변경 할 수 있기때문에 운영중에 유동적으로 검색성능을 늘리기위해 레플리카수와 데이터노드 수를 늘릴 수 있게 됩니다.
검색 성능에 문제가 있다면 클러스터 로서의 이점을 살리고 있는지를 먼저살펴 봐야합니다.
inverted index?
문자열을 분석한 결과를 저장하고 있는 구조체 입니다
문자열을 저장할때 의 과정을 살펴보자면
문자열이 들어오면 character filter를통해 불필요한 문자를 필터링하고 거쳐서 tokenizer를 거쳐 문자열을 토큰화하고 token filter를 통해 토큰을 커스텀한후 최종적으로 token형태로 색인됩니다.
GET /_analyze API를 통해서 어떻게 검색어가 토큰화되는지 체크해 볼 수 있습니다.
검색이 생각대로 잘 돼지 않을때는 해당 api를 통해 의도한 대로 토크나이징이 됐는지 체크해보면 디버깅하는데 많은 도움을 줍니다.
'ELK' 카테고리의 다른 글
엘라스틱 서치 - 집계 정리 (0) | 2023.11.06 |
---|---|
엘라스틱 서치 검색 정리 (2) | 2023.11.06 |
엘라스틱 스택 (0) | 2023.11.06 |
ElasticSearch 색인/검색 동작과정 (0) | 2023.06.11 |
ElasticSearch 클러스터 구성 (0) | 2023.06.11 |