Elasticsearch의 샤드 및 복제본


303

Elasticsearch의 샤드 및 복제본이 무엇인지 이해하려고 노력하고 있지만 이해하지 못했습니다. Elasticsearch를 다운로드하고 스크립트를 실행하면 알고있는 것부터 단일 노드로 클러스터를 시작했습니다. 이제이 노드 (내 PC)에는 5 개의 샤드 (?)와 일부 복제본 (?)이 있습니다.

그것들은 무엇입니까, 인덱스의 5 복제본이 있습니까? 그렇다면 왜? 설명이 필요할 수 있습니다.



그러나 질문은 여전히 ​​답이 남아 있습니다.
LuckyLuke

나는 당신이 얻은 대답과 위의 대답이 명확하게해야한다고 생각했습니다. 그때 명확하지 않은 것은 무엇입니까?
javanna

나는 샤드와 복제품이 무엇인지에 대해 확신하지 않습니다. 한 노드에 샤드와 복제본이 많은 이유를 알 수 없습니다.
LuckyLuke

1
모든 인덱스를 샤드로 분할하여 데이터를 분배 할 수 있습니다. 샤드는 인덱스의 원자 부분으로, 노드를 더 추가하면 클러스터에 분산 될 수 있습니다.
javanna

답변:


965

답변과 답변이 도움이되지 않기 때문에 실제 예를 들어 설명하려고합니다.

elasticsearch를 다운로드하여 시작하면 사용 가능한 경우 기존 클러스터에 참여하거나 새 클러스터를 작성하는 elasticsearch 노드를 작성합니다. 방금 시작한 단일 노드를 사용하여 고유 한 새 클러스터를 생성했다고 가정하겠습니다. 데이터가 없으므로 인덱스를 만들어야합니다.

색인을 작성할 때 (첫 번째 문서를 색인 할 때 색인이 자동으로 작성 됨) 색인을 구성 할 샤드 수를 정의 할 수 있습니다. 숫자를 지정하지 않으면 기본 샤드 수가 5 개입니다. 무슨 뜻이에요?

Elasticsearch는 데이터를 포함 할 5 개의 기본 샤드를 생성합니다.

 ____    ____    ____    ____    ____
| 1  |  | 2  |  | 3  |  | 4  |  | 5  |
|____|  |____|  |____|  |____|  |____|

문서를 색인 할 때마다 elasticsearch는 해당 문서를 보유 할 기본 샤드를 결정하고 색인을 작성합니다. 기본 샤드는 데이터의 복사본이 아니라 데이터입니다! 샤드가 여러 개 있으면 단일 머신에서 병렬 처리를 활용할 수 있지만, 요점은 동일한 클러스터에서 다른 elasticsearch 인스턴스를 시작하면 샤드가 클러스터에 고른 방식으로 분산된다는 것입니다.

그런 다음 노드 1은 예를 들어 세 개의 샤드 만 보유합니다.

 ____    ____    ____ 
| 1  |  | 2  |  | 3  |
|____|  |____|  |____|

나머지 두 샤드는 새로 시작된 노드로 이동되었으므로

 ____    ____
| 4  |  | 5  |
|____|  |____|

왜 이런 일이 발생합니까? elasticsearch는 분산 검색 엔진이므로이 방법으로 여러 노드 / 시스템을 사용하여 대량의 데이터를 관리 할 수 ​​있습니다.

모든 elasticsearch 색인은 데이터가 저장되는 위치이므로 하나 이상의 기본 샤드로 구성됩니다. 그러나 모든 샤드에는 비용이 발생하므로 단일 노드가 있고 예측 가능한 성장이 없다면 기본 샤드 하나만 고수하십시오.

또 다른 유형의 샤드는 복제본입니다. 기본값은 1이며, 모든 기본 샤드는 동일한 데이터를 포함하는 다른 샤드로 복사됩니다. 복제본은 검색 성능을 높이고 장애 조치에 사용됩니다. 복제 샤드는 관련 기본 노드와 동일한 노드에 할당되지 않습니다 (원본 데이터와 동일한 디스크에 백업을 배치하는 것과 거의 유사 함).

예제로 돌아가서 1 개의 복제본을 사용하면 각 노드에 전체 색인이 생성됩니다. 2 개의 복제본 샤드가 첫 번째 노드에 할당되고 두 번째 노드의 기본 샤드와 정확히 동일한 데이터가 포함되기 때문입니다.

 ____    ____    ____    ____    ____
| 1  |  | 2  |  | 3  |  | 4R |  | 5R |
|____|  |____|  |____|  |____|  |____|

첫 번째 노드의 기본 샤드 사본을 포함하는 두 번째 노드와 동일합니다.

 ____    ____    ____    ____    ____
| 1R |  | 2R |  | 3R |  | 4  |  | 5  |
|____|  |____|  |____|  |____|  |____|

이와 같은 설정으로 노드가 다운되면 여전히 전체 인덱스가 있습니다. 복제본 샤드는 자동으로 기본 노드가되고 다음과 같이 노드 장애에도 불구하고 클러스터가 올바르게 작동합니다.

 ____    ____    ____    ____    ____
| 1  |  | 2  |  | 3  |  | 4  |  | 5  |
|____|  |____|  |____|  |____|  |____|

가 있으므로 "number_of_replicas":1기본 노드와 동일한 노드에 할당되지 않으므로 복제본을 더 이상 할당 할 수 없습니다. 따라서 할당되지 않은 샤드 5 개, 복제본 및 클러스터 상태가 YELLOW대신 사용됩니다 GREEN. 데이터 손실은 없지만 일부 샤드를 할당 할 수 없으므로 더 좋습니다.

남겨둔 노드가 백업 되 자마자 클러스터에 다시 가입하고 복제본이 다시 할당됩니다. 두 번째 노드의 기존 샤드는로드 할 수 있지만 노드가 작동 중지 된 동안 쓰기 작업이 발생했을 가능성이 있으므로 다른 샤드와 동기화해야합니다. 이 작업이 끝나면 클러스터 상태가됩니다 GREEN.

이것이 당신을 위해 일을 분명히하기를 바랍니다.


57
멋진 설명, 시간을내어 함께 해주셔서 감사합니다! :)
LuckyLuke

6
그것은 샤드 / 복제 개념에 대한 최고의 설명입니다. 고마워 :)
Frank Förster

1
@javanna 훌륭한 설명, 다중 클러스터 및 작동 방식에 대해 조금 이야기 할 수 있습니까?
raffian

3
다운 된 노드가 다시 시작될 때 어떻게되는지 설명해 주시겠습니까?
c0dem4gnetic

1
가르치시나요? 당신은 완전히해야합니다. 당신은 바위. 그러나 @Animesh Pandey가 요청한 것처럼 두 개의 복제본 또는 3 개의 노드가있는 1 개의 복제본에서 어떤 일이 발생하는지 궁금합니다.
frostymarvelous

24

인덱스는 분산 및 확장을 위해 샤드로 나뉩니다.

복제본은 샤드의 사본이며 노드가 손실 될 경우 안정성을 제공합니다. 복제본 수 == 1이므로 클러스터에 기본 및 복제 된 샤드 사본이 녹색 상태에 있어야하므로이 숫자가 혼동 될 수 있습니다.

복제본을 만들려면 클러스터에 2 개 이상의 노드가 있어야합니다.

여기에서 정의를 이해하기 쉽게 찾을 수 있습니다. http://www.elasticsearch.org/guide/reference/glossary/

안부, 폴


이것은 모든 문서가 말한 것입니다-색인은 조각으로 나뉩니다. 그러나 색인에는 실제로 무엇이 포함됩니까?
Alex Pryiomka

@AlexPryiomka, 색인에 데이터가 포함됨
Gaurav

kafka 세계의 파티션 복제와 기본적으로 동일합니까?
beatrice

19

당신이 정말로 노란색을보고 싶지 않다면. 복제본 수를 0으로 설정할 수 있습니다.

curl -XPUT 'localhost:9200/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}
'

로컬 개발 상자에서만이 작업을 수행해야합니다.


10

사금파리:

  1. 분산 검색 서버이기 때문에 ElasticSearch호출 된 개념을 사용 Shard하여 모든 노드에 인덱스 문서를 분산시킵니다.
  2. index하드웨어 한계를 초과 할 수있는 대량의 데이터를 잠재적으로 저장할 수 있습니다.single node
  3. 예를 들어, 1TB의 디스크 공간을 차지하는 10 억 개의 문서로 구성된 단일 인덱스는 단일 노드의 디스크에 맞지 않거나 단일 노드의 검색 요청을 처리하기에는 너무 느릴 수 있습니다.
  4. 이 문제를 해결하려면 Elasticsearch색인을이라고하는 여러 부분으로 세분화 할 수 있습니다 shards.
  5. 색인을 작성할 때 shards 원하는 수를 간단히 정의 할 수 있습니다 .
  6. Documents에 저장 shards하고, 파편이 할당됩니다 nodescluster
  7. 당신이 따라 cluster커지거나 정신과 의사, Elasticsearch의지 사이에 자동으로 마이그레이션 파편 nodes있도록 cluster남아 균형.
  8. 샤드는 a primary shard또는 a 일 수 있습니다 replica shard.
  9. 색인의 각 문서는에 속해 single primary shard있으므로 기본 샤드 수에 따라 색인이 보유 할 수있는 최대 데이터 양이 결정됩니다.
  10. A replica shard는 기본 샤드의 사본 일뿐입니다.

레플리카:

  1. Replica shardprimary Shard하드웨어 고장시 데이터 손실을 방지하기 위해 의 복사본입니다 .
  2. Elasticsearch인덱스 샤드의 복사본을 복제 샤드라고하는 하나 이상의 복사본으로 만들 수 있습니다 replicas.
  3. index또한 번 이상 (복제본을 의미 없음) 제로 복제 할 수 있습니다.
  4. number of shards및 복제본은 인덱스가 작성 될 때 인덱스에 따라 정의 할 수 있습니다.
  5. 인덱스를 만든 후에는 언제든지 복제본 수를 동적으로 변경할 수 있지만 cannot change the number of shards 사후에는 가능합니다.
  6. 기본적으로 각 인덱스에는 Elasticsearch5 개의 기본 샤드가 할당 1 replica되므로 클러스터에 두 개 이상의 노드가있는 경우 인덱스에 5 개의 기본 샤드와 다른 5 개의 복제 샤드 (1 개의 완전한 복제본)가 총 10 개의 샤드가됩니다. 인덱스.

6

인덱스는 분산 및 확장을 위해 샤드로 나뉩니다.

복제본은 샤드의 사본입니다.

노드는 클러스터에 속하는 실행중인 탄력적 검색 인스턴스입니다.

클러스터는 동일한 클러스터 이름을 공유하는 하나 이상의 노드로 구성됩니다. 각 클러스터에는 단일 마스터 노드가 있으며이 마스터 노드는 클러스터에 의해 자동으로 선택되며 현재 마스터 노드가 실패하는 경우 교체 할 수 있습니다.


세 개의 AWS ec2인스턴스가 있으며 각각 탄성 검색이 설치되어 있습니다. 여기에 세 개의 노드가 있다는 의미입니까? 이러한 모든 노드에 동일한 cluster.name: test속성 세트 test가 있으면 세 개의 노드가 있는 클러스터 이름 이 만들어 집니까?
코더

5

나는 실제 단어 시나리오를 사용하여 이것을 설명 할 것이다. 전자 상거래 웹 사이트를 운영하고 있다고 상상해보십시오. 인기가 높아질수록 더 많은 판매자와 제품이 웹 사이트에 추가됩니다. 인덱싱해야 할 제품 수가 증가했으며 한 노드의 하드 디스크 하나에 맞지 않을 정도로 너무 큰 제품을 알게 될 것입니다. 하드 디스크에 들어가더라도 한 시스템의 모든 문서를 선형 검색하는 것은 매우 느립니다. 한 노드에서 하나의 인덱스는 elasticsearch가 작동하는 분산 클러스터 구성을 이용하지 않습니다.

따라서 elasticsearch는 색인의 문서를 클러스터의 여러 노드로 분할합니다. 문서의 모든 부분을 샤드라고합니다. 문서 조각을 가진 각 노드에는 문서의 하위 세트 만 있습니다. 100 개의 제품과 5 개의 샤드가 있다고 가정하면 각 샤드에는 20 개의 제품이 있습니다. 이러한 데이터 샤딩은 Elasticsearch에서 지연 시간이 짧은 검색을 가능하게합니다. 검색은 여러 노드에서 병렬로 수행됩니다. 결과가 집계되어 반환됩니다. 그러나 샤드는 내결함성을 제공하지 않습니다. 샤드가 포함 된 노드가 작동 중지되면 클러스터 상태가 노란색이됩니다. 일부 데이터를 사용할 수 없음을 의미합니다.

내결함성 복제본을 늘리려면 그림이 나타납니다. 탄력적 검색을 해제하면 각 샤드의 단일 복제본이 작성됩니다. 이 복제본은 항상 기본 샤드가 상주하지 않는 다른 노드에서 작성됩니다. 따라서 내결함성 시스템을 만들려면 클러스터의 노드 수를 늘려야하며 인덱스의 샤드 수에 따라 달라집니다. 복제본과 샤드를 기반으로 필요한 노드 수를 계산하는 일반적인 공식은 "노드 수 = 샤드 수 * (복제 수 + 1)"입니다. 표준 방법은 내결함성을 위해 하나의 복제본을 보유하는 것입니다.

샤드 수 설정은 정적 작업이므로 인덱스를 생성 할 때 지정해야합니다. 그 후의 모든 변경은 데이터를 완전히 다시 색인화해야하며 시간이 걸립니다. 그러나 복제본 수 설정은 동적 작업이며 인덱스 작성 후 언제든지 수행 할 수 있습니다.

아래 명령을 사용하여 인덱스의 샤드 및 복제본 수를 설정할 수 있습니다.

curl -XPUT 'localhost:9200/sampleindex?pretty' -H 'Content-Type: application/json' -d '
{
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":1
  }
}'

3

ElasticSearch에 대한 핵심 개념 에 대한 대답은 아니지만 또 다른 참고 자료이며 @javanna의 대답을 칭찬하는 것처럼 분명합니다.

샤드

인덱스는 단일 노드의 하드웨어 제한을 초과 할 수있는 대량의 데이터를 잠재적으로 저장할 수 있습니다. 예를 들어, 1TB의 디스크 공간을 차지하는 10 억 개의 문서로 구성된 단일 인덱스는 단일 노드의 디스크에 맞지 않거나 단일 노드의 검색 요청을 처리하기에는 너무 느릴 수 있습니다.

이 문제를 해결하기 위해 Elasticsearch는 색인을 샤드라고하는 여러 조각으로 세분화하는 기능을 제공합니다. 색인을 만들 때 원하는 샤드 수를 간단히 정의 할 수 있습니다. 각 샤드는 자체적으로 클러스터의 모든 노드에서 호스팅 할 수있는 완전한 기능을 갖춘 독립적 인 "인덱스"입니다.

샤딩은 두 가지 주요 이유로 중요합니다.

  • 콘텐츠 볼륨 을 가로로 분할 / 확장 할 수 있습니다.
  • 이를 통해 샤드에 걸쳐 (여러 노드에있을 수 있음) 작업을 분산 및 병렬화 할 수 있으므로 성능 / 처리량증가합니다 .

복제본

언제라도 장애가 예상 될 수있는 네트워크 / 클라우드 환경에서는 샤드 / 노드가 오프라인이되거나 어떤 이유로 든 사라질 경우를 대비하여 장애 조치 메커니즘을 갖추는 것이 매우 유용하고 권장됩니다. 이를 위해 Elasticsearch를 사용하면 하나 이상의 인덱스 샤드 복사본을 복제본 샤드 또는 간단히 복제본으로 만들 수 있습니다.

복제는 두 가지 주요 이유로 중요합니다.

  • 샤드 / 노드가 실패하는 경우 고 가용성 을 제공 합니다. 이러한 이유로 복제 샤드는 원본 / 기본 샤드 와 동일한 노드 에 할당되지 않습니다 .
  • 모든 복제본에서 동시에 검색을 수행 할 수 있으므로 검색 량 / 처리량 을 확장 할 수 있습니다.

1

ElasticSearch에서는 최상위 수준에서 문서를 색인으로 색인화합니다. 각 인덱스에는 내부적으로 데이터를 분배하는 샤드 수가 많으며 내부 샤드에는 데이터의 핵심 스토리지 인 Lucene 세그먼트가 있습니다. 따라서 인덱스에 5 개의 샤드가 있으면 데이터가 샤드에 분산되어 있으며 샤드에 동일한 데이터가 존재하지 않음을 의미합니다.

ES의 핵심을 설명하는 비디오를 조심 하십시오 https://www.youtube.com/watch?v=PpX7J-G2PEo

여러 인덱스 또는 샤드에 대한 기사 탄력적 검색, 여러 인덱스 대 하나의 인덱스 및 다른 데이터 세트에 대한 유형?


1

Elasticsearch 는 분산 아키텍처에 대한 모든 크레딧으로 확장 성이 뛰어납니다. 샤딩으로 인해 가능해졌습니다. 이제 더 나아 가기 전에 간단하고 매우 일반적인 사용 사례를 고려하십시오. 지옥 문서가 많이 포함 된 색인이 있고 간단하게하기 위해 색인의 크기가 1TB (즉, 색인의 각 문서 크기의 합은 1TB)라고 가정합니다. ). 또한 데이터 저장에 사용 가능한 공간이 512GB 인 두 개의 노드가 있다고 가정하십시오. 분명히 알 수 있듯이, 전체 인덱스는 사용 가능한 두 노드 중 어느 곳에도 저장할 수 없으므로 인덱스를이 노드들 사이에 분산시켜야합니다.

인덱스의 크기가 단일 노드의 하드웨어 제한을 초과하는 이와 같은 경우 Sharding 이 구조됩니다. 샤딩은 인덱스를 더 작은 조각으로 나눠서이 문제를 해결하며이 조각을 샤드라고합니다.


0

가장 간단한 용어로, shard이것은 분리 된 폴더 내에서 디스크에 저장된 인덱스의 일부일뿐입니다.

Elasticsearch 샤드

이 스크린 샷은 전체 Elasticsearch 디렉토리를 보여줍니다.

보다시피, 모든 데이터는 data디렉토리 로 들어갑니다 .

색인을 검사하면 C-mAfLltQzuas72iMiIXNw5 개의 샤드 (폴더 0~ 4)가 있음을 알 수 있습니다.

반면, JH_A8PgCRj-GK0GeQ0limw색인에는 샤드 ( 0폴더) 가 하나만 있습니다.

Elasticsearch 샤드

pri파편의 총 수를 플레이.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.