Elasticsearch 분할, 복사본 및 라우팅(shard replica routing)
2332 단어 ES
클러스터 (cluster): 하나 이상의 노드로 구성되어 있으며, 클러스터 이름을 통해 다른 클러스터와 구분됩니다.
노드(node): 단일 ElasticSearch 인스턴스입니다.일반적으로 하나의 노드는 분리된 용기나 가상 시스템에서 실행된다
색인(index): ES에서 색인은 문서 집합입니다.
분할 (shard)
Elasticsearch 집단은 시스템에 저장된 데이터량이 단기 용량을 초과할 수 있도록 허용하고 이 목표를 실현하여 분할 정책shard를 도입합니다.인덱스 인덱스에서 데이터 (document) 는 여러 개의 섹션으로 나누어 처리됩니다.Elasticsearch는 분할 관리의 복잡성을 차단하여 여러 개의 분할이 하나의 큰 색인 모양을 나타낸다.
복제본(replica)
접근 압력이 너무 커서 모든 요청을 단독으로 처리할 수 없는 문제를 향상시키기 위해 Elasticsearch 집단은 복사본 정책 리플리카를 도입했다.복사 정책은 index의 모든 블록에 불필요한 복사본을 생성합니다. 조회를 처리할 때 이 복사본을 메인 블록으로 취급할 수 있습니다(primary shard). 또한 복사 정책은 고가용과 데이터 안전을 보장합니다. 블록이 있는 기계가 다운되면 Elasticsearch는 그 복사본을 사용하여 복구하여 데이터가 분실되지 않도록 합니다.
라우팅(routing)
Elasticsearch에 데이터를 저장할 때 문서 식별자_id는 문서를 여러 개의 섹션에 분배하고 부하 균형 알고리즘은 평균만 실현하면 된다.데이터를 사용할 때, 모든 블록을 조회한 후에 결과를 집계하지만, 데이터가 도대체 어느 블록에 존재하는지 반드시 알아야 하는 것은 아니다.문제는 조회할 때 모든 블록을 조회한 후에 결과를 종합하여 성능의 손실을 초래해야 한다는 것이다. 낙관적이지 않은 상황에서 일부 블록의 조회는 실패(failed)하여 결과가 정확하지 않을 수 있다.이 문제를 피하기 위해 루트 기능(routing)을 도입했습니다. 저장할 때 루트 키를 통해 지정한 슬라이드에 데이터를 저장하고, 검색할 때 같은 루트 키를 통해 어느 슬라이드에서 데이터를 찾을 수 있는지 표시합니다.
기본적으로 색인 데이터의 분할 알고리즘은 다음과 같다.
shard_num = hash(_routing) % num_primary_shards
routing 필드의 값, 기본값은_id 필드 또는_parent 필드, 이러한 수치는hash 다음에 몇 개의shard 수량과 패턴을 취합니다. 최종적으로 이 데이터는 그shard에 분배되어야 합니다. 즉, 기본값은hash의 블록을 바탕으로 모든 shard에 있는 데이터의 양이 평균과 비슷합니다. 이렇게 하면 부하 불균형이 발생하지 않습니다. 그리고 검색할 때es는 모든shard에 있는 데이터를 검색합니다.마지막으로 마스터 노드에 모여 처리한 후 최종 데이터를 되돌려줍니다.
만약 네가 100개의 분할 색인을 가지고 있다고 가정해라.요청이 집단에서 실행될 때 어떤 일이 일어날까요?
1. 이 검색의 요청은 하나의 노드로 발송됩니다
2. 이 요청을 받은 노드에서 이 검색을 이 인덱스의 모든 섹션에 방송합니다(주 섹션일 수도 있고, 섹션을 복사할 수도 있습니다).
3. 각 조각마다 이 검색 검색을 실행하고 결과를 되돌려줍니다.
4. 결과는 채널 노드에서 통합, 정렬, 사용자에게 되돌아온다
2, 분할 (shard) 과 복사본 (replica) 의 수량
ElasticSearch는 색인 데이터를 만들 때 관련된shards 수량과replicas를 지정하는 것이 좋습니다. 그렇지 않으면 서버의 기본 설정 매개 변수인shards=5,replicas=1을 사용합니다.
index.number_of_shards: 5
index.number_of_replicas: 1
인덱스에 대해number_of_shards는 한 번만 설정할 수 있고number_of_replicas는 색인 업데이트 설정 API를 사용하여 언제든지 증가하거나 감소할 수 있습니다.
그러면 어떻게 분할과 부본의 수량을 확정합니까?
경험에 따르면 가장 이상적인 분할 수량은 노드의 수량에 의존해야 한다.인덱스 index가 10개의 섹션, 1개의 복사본을 설정했다고 가정하면 총 섹션 수는 20개, 10*(1+1), 가장 큰 Elasticsearch 노드 수는 20개가 될 것이다.
= * ( + 1)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
_mappings자동으로 인덱스가 생성이 된다. GET books/_mapping DELETE books PUT books/_mapping "type" : "text" text는 역인덱스를 생성하지만 keyword 는 역인덱스를 생...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.