Elasticsearch의 샤드 및 복제본이 무엇인지 이해하려고 노력하고 있지만 이해하지 못했습니다. Elasticsearch를 다운로드하고 스크립트를 실행하면 알고있는 것부터 단일 노드로 클러스터를 시작했습니다. 이제이 노드 (내 PC)에는 5 개의 샤드 (?)와 일부 복제본 (?)이 있습니다.
그것들은 무엇입니까, 인덱스의 5 복제본이 있습니까? 그렇다면 왜? 설명이 필요할 수 있습니다.
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/
안부, 폴
사금파리:
ElasticSearch
호출 된 개념을 사용
Shard
하여 모든 노드에 인덱스 문서를 분산시킵니다.index
하드웨어 한계를 초과 할 수있는 대량의 데이터를 잠재적으로 저장할 수 있습니다.single node
Elasticsearch
색인을이라고하는 여러 부분으로 세분화 할 수 있습니다 shards
.shards
원하는 수를 간단히 정의 할 수 있습니다 .Documents
에 저장 shards
하고, 파편이 할당됩니다 nodes
에cluster
cluster
커지거나 정신과 의사, Elasticsearch
의지 사이에 자동으로 마이그레이션 파편 nodes
있도록 cluster
남아 균형.primary shard
또는 a 일 수 있습니다 replica shard
.single primary shard
있으므로 기본 샤드 수에 따라 색인이 보유 할 수있는 최대 데이터 양이 결정됩니다.replica shard
는 기본 샤드의 사본 일뿐입니다.레플리카:
Replica shard
primary Shard
하드웨어 고장시 데이터 손실을 방지하기 위해 의 복사본입니다 .Elasticsearch
인덱스 샤드의 복사본을 복제 샤드라고하는 하나 이상의 복사본으로 만들 수 있습니다 replicas
.index
또한 번 이상 (복제본을 의미 없음) 제로 복제 할 수 있습니다.number of shards
및 복제본은 인덱스가 작성 될 때 인덱스에 따라 정의 할 수 있습니다.cannot change the number of shards
사후에는 가능합니다.Elasticsearch
5 개의 기본 샤드가 할당 1 replica
되므로 클러스터에 두 개 이상의 노드가있는 경우 인덱스에 5 개의 기본 샤드와 다른 5 개의 복제 샤드 (1 개의 완전한 복제본)가 총 10 개의 샤드가됩니다. 인덱스.인덱스는 분산 및 확장을 위해 샤드로 나뉩니다.
복제본은 샤드의 사본입니다.
노드는 클러스터에 속하는 실행중인 탄력적 검색 인스턴스입니다.
클러스터는 동일한 클러스터 이름을 공유하는 하나 이상의 노드로 구성됩니다. 각 클러스터에는 단일 마스터 노드가 있으며이 마스터 노드는 클러스터에 의해 자동으로 선택되며 현재 마스터 노드가 실패하는 경우 교체 할 수 있습니다.
AWS ec2
인스턴스가 있으며 각각 탄성 검색이 설치되어 있습니다. 여기에 세 개의 노드가 있다는 의미입니까? 이러한 모든 노드에 동일한 cluster.name: test
속성 세트 test
가 있으면 세 개의 노드가 있는 클러스터 이름 이 만들어 집니까?
나는 실제 단어 시나리오를 사용하여 이것을 설명 할 것이다. 전자 상거래 웹 사이트를 운영하고 있다고 상상해보십시오. 인기가 높아질수록 더 많은 판매자와 제품이 웹 사이트에 추가됩니다. 인덱싱해야 할 제품 수가 증가했으며 한 노드의 하드 디스크 하나에 맞지 않을 정도로 너무 큰 제품을 알게 될 것입니다. 하드 디스크에 들어가더라도 한 시스템의 모든 문서를 선형 검색하는 것은 매우 느립니다. 한 노드에서 하나의 인덱스는 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를 사용하면 하나 이상의 인덱스 샤드 복사본을 복제본 샤드 또는 간단히 복제본으로 만들 수 있습니다.
복제는 두 가지 주요 이유로 중요합니다.
- 샤드 / 노드가 실패하는 경우 고 가용성 을 제공 합니다. 이러한 이유로 복제 샤드는 원본 / 기본 샤드 와 동일한 노드 에 할당되지 않습니다 .
- 모든 복제본에서 동시에 검색을 수행 할 수 있으므로 검색 량 / 처리량 을 확장 할 수 있습니다.
ElasticSearch에서는 최상위 수준에서 문서를 색인으로 색인화합니다. 각 인덱스에는 내부적으로 데이터를 분배하는 샤드 수가 많으며 내부 샤드에는 데이터의 핵심 스토리지 인 Lucene 세그먼트가 있습니다. 따라서 인덱스에 5 개의 샤드가 있으면 데이터가 샤드에 분산되어 있으며 샤드에 동일한 데이터가 존재하지 않음을 의미합니다.
ES의 핵심을 설명하는 비디오를 조심 하십시오 https://www.youtube.com/watch?v=PpX7J-G2PEo
여러 인덱스 또는 샤드에 대한 기사 탄력적 검색, 여러 인덱스 대 하나의 인덱스 및 다른 데이터 세트에 대한 유형?
Elasticsearch 는 분산 아키텍처에 대한 모든 크레딧으로 확장 성이 뛰어납니다. 샤딩으로 인해 가능해졌습니다. 이제 더 나아 가기 전에 간단하고 매우 일반적인 사용 사례를 고려하십시오. 지옥 문서가 많이 포함 된 색인이 있고 간단하게하기 위해 색인의 크기가 1TB (즉, 색인의 각 문서 크기의 합은 1TB)라고 가정합니다. ). 또한 데이터 저장에 사용 가능한 공간이 512GB 인 두 개의 노드가 있다고 가정하십시오. 분명히 알 수 있듯이, 전체 인덱스는 사용 가능한 두 노드 중 어느 곳에도 저장할 수 없으므로 인덱스를이 노드들 사이에 분산시켜야합니다.
인덱스의 크기가 단일 노드의 하드웨어 제한을 초과하는 이와 같은 경우 Sharding 이 구조됩니다. 샤딩은 인덱스를 더 작은 조각으로 나눠서이 문제를 해결하며이 조각을 샤드라고합니다.