[elasticsearch] Elasticsearch의 샤드 및 복제본

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

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



답변

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

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.

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


답변

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

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

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

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

안부, 폴


답변

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

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

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


답변

사금파리:

  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 개의 샤드가됩니다. 인덱스.

답변

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

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

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

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


답변

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


답변

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

샤드

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

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

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

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

복제본

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

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

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