Fragmentos e réplicas em pesquisas elasticas
7 answers
Quando você baixar a pesquisa elastica e iniciá-la, você cria um nó de pesquisa elastica que tenta juntar-se a um conjunto existente, se disponível, ou cria um novo. Digamos que criou o seu novo grupo com um único nó, o que acabou de iniciar. Não temos dados, portanto precisamos criar um índice.
Quando se cria um índice (um índice é criado automaticamente quando você indexar o primeiro documento também) você pode definir de quantos fragmentos ele será composto. Se você não especificar um número, ele terá o número padrão de cacos: 5 primárias. O que significa?
Significa que a elasticsearch criará 5 Fragmentos primários que conterão os seus dados. ____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Sempre que indexares um documento, a elasticsearch decidirá qual o fragmento primário que deve guardar esse documento e irá indexá-lo lá. Estilhaços primários não são uma cópia dos dados, são os dados! Ter vários fragmentos ajuda a tirar vantagem do processamento paralelo em uma única máquina, mas o ponto é que se começarmos outra instância elasticsearch no mesmo conjunto, os fragmentos serão distribuídos de uma forma uniforme sobre o conjunto.
O nó 1 irá então conter, por exemplo, apenas três fragmentos:
____ ____ ____
| 1 | | 2 | | 3 |
|____| |____| |____|
Desde que os dois fragmentos restantes foram movidos para o nó recém-iniciado:
____ ____
| 4 | | 5 |
|____| |____|
Porque é que isto acontece? Porque a elasticsearch é um motor de busca distribuído e desta forma você pode fazer uso de múltiplos nós/Máquinas para gerenciar grandes quantidades de dados.
Cada índice de elasticsearch é composto por pelo menos um fragmento primário desde que é onde os dados são armazenados. Cada fragmento vem a um custo, no entanto, portanto, se você tem um único nó e nenhum crescimento previsível, basta ficar com um único fragmento primário.
Outro tipo de fragmento é uma réplica. O padrão é 1, o que significa que cada primário shard será copiado para outro shard que conterá os mesmos dados. Réplicas são usadas para aumentar o desempenho de pesquisa e para falhas. Uma réplica shard nunca vai ser alocada no mesmo nó onde a primária relacionada é (seria praticamente como colocar um backup no mesmo disco que os dados originais). De volta ao nosso exemplo, com 1 réplica teremos todo o índice em cada nó, uma vez que 3 fragmentos de réplicas serão alocados no primeiro nó e conterão exatamente os mesmos dados que as primárias no segundo nó: ____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4R | | 5R |
|____| |____| |____| |____| |____|
O mesmo para o segundo nó, que conterá uma cópia dos cacos primários no primeiro nó:
____ ____ ____ ____ ____
| 1R | | 2R | | 3R | | 4 | | 5 |
|____| |____| |____| |____| |____|
Com uma configuração como esta, se um nó descer, você ainda tem o índice inteiro. Os fragmentos da réplica tornar-se-ão automaticamente primários e o conjunto funcionará correctamente apesar da falha do nó, como se segue:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Uma vez que tens "number_of_replicas":1
, as réplicas já não podem ser atribuídas porque nunca são atribuídas no mesmo nó onde está o primário. É por isso que você terá 5 Fragmentos não classificados, as réplicas, e o status de aglomerado será YELLOW
em vez de GREEN
. Nenhuma perda de dados, mas poderia ser melhor como alguns fragmentos não podem ser atribuídos.
GREEN
.
Espero que isto esclareça as coisas para ti.
curl -XPUT 'localhost:9200/_settings' -d '
{
"index" : {
"number_of_replicas" : 0
}
}
'
Lembre-se que só deve fazer isto na sua caixa de desenvolvimento local.
Um índice é dividido em fragmentos para os distribuir e escalar.
As réplicas são cópias dos cacos e proporcionam fiabilidade se um nó for perdido. Há muitas vezes confusão neste número porque a contagem de réplicas = = 1 significa que o aglomerado deve ter a principal e uma cópia replicada do fragmento disponível para estar no estado verde.
Para que as réplicas sejam criadas, deve ter pelo menos 2 nós no seu conjunto.
Pode achar as definições aqui mais fáceis de entender: http://www.elasticsearch.org/guide/reference/glossary/
Melhores Cumprimentos., Paul
Um índice é dividido em fragmentos para os distribuir e escalar.
As réplicas são cópias dos cacos.
Um nó é uma instância em execução de busca elástica que pertence a um conjunto.
Um conjunto consiste num ou mais nós que partilham o mesmo nome de grupo. Cada conjunto tem um único nó mestre que é escolhido automaticamente pelo conjunto e que pode ser substituído se o nó mestre atual falhar.
Élitro:
- sendo o servidor de pesquisa distribuído,
ElasticSearch
usa o conceito chamadoShard
distribuir documentos de índice por todos os nós. - Um {[2] } pode potencialmente armazenar uma grande quantidade de dados que podem
exceder os limites de hardware de a
single node
- por exemplo, um índice único de mil milhões de documentos que retomam 1TB de o espaço em disco pode não caber no disco de um único nó ou pode ser demasiado lento para atender pedidos de busca de um único nó sozinho.
- To resolva este problema,
Elasticsearch
fornece a capacidade de subdividir o seu índice em várias peças chamadasshards
. - quando você cria um índice, você pode simplesmente definir o número de
shards
isso tu queres. -
Documents
são armazenados emshards
, e os fragmentos são atribuídos anodes
em o seucluster
À medida que o seu - um fragmento pode ser um
primary shard
ou umreplica shard
. - cada documento no seu índice pertence a
single primary shard
, por isso o número de cacos primários que você tem determina o máximo quantidade de dados que o seu índice pode conter - A
replica shard
é apenas uma cópia de um fragmento primário.
cluster
cresce ou encolhe, {[4] } irá automaticamente
migrar fragmentos entre nodes
para que o cluster
permaneça equilibrado.
Réplica:
-
Replica shard
é a cópia deprimary Shard
, para evitar a perda de dados em caso de falha de hardware. -
Elasticsearch
permite - lhe fazer uma ou mais cópias do seu índice cacos para o que se chama réplica cacos, oureplicas
para abreviar. - Um
index
também pode ser replicado zero (ou seja, sem réplicas) ou mais situacao. - as
number of shards
e as réplicas podem ser definidas por índice na hora da criação do Índice. - após o índice ser criado, você pode mudar o número de réplicas dinamicamente a qualquer momento, mas você
cannot change the number of shards
depois do facto. - por omissão, cada índice em
Elasticsearch
é atribuído a 5 Fragmentos primários e1 replica
O que significa que se tiver pelo menos dois nós no seu grupo, o seu índice terá 5 cacos primários e outros 5 réplicas (1 réplica completa) para um total de 10 Fragmentos por indice.
Na pesquisa elastica, no nível superior indexamos os documentos em índices. Cada índice tem número de cacos que distribuem internamente os dados e dentro dos cacos existem os segmentos de Luceno que é o núcleo de armazenamento dos dados. Então, se o índice tem 5 cacos, significa que os dados foram distribuídos através dos cacos e não existem os mesmos dados nos cacos.
Cuidado com o vídeo que explica o núcleo de ES https://www.youtube.com/watch?v=PpX7J-G2PEoArtigo sobre índices múltiplos ou fragmentos múltiplos Pesquisa elástica, múltiplos índices versus um índice e tipos para diferentes conjuntos de dados?
Então a pesquisa elastica divide os documentos no índice através de vários nós no conjunto. Cada divisão do documento é chamada de fragmento. Cada nó que carrega um fragmento de um documento terá apenas um subconjunto do documento. suponha que você tem 100 produtos e 5 fragmentos, cada fragmento terá 20 produtos. Esta partilha de dados é o que torna possível a pesquisa de baixa latência na pesquisa elastica. a pesquisa é conduzida em paralelo em múltiplos no. Os resultados são agregados e devolvidos. No entanto, os fragmentos não proporcionam tolerância à falha. Ou seja, se qualquer nó que contenha o fragmento estiver em baixo, a saúde do aglomerado torna-se amarela. Ou seja, alguns dos dados não estão disponíveis.
Para aumentar a tolerância à falha, as réplicas vêm à tona. Por deault elástico search cria uma única réplica de cada fragmento. Estas réplicas são sempre criadas num outro nó onde o fragmento primário não reside. Então, para tornar o sistema tolerante a falhas, você pode ter que aumentar o número de nós em seu conjunto e também depende do número de fragmentos do seu índice. A fórmula geral para calcular o número de nós necessários com base em réplicas e cacos é " número de nós = número de cacos*(número de réplicas + 1)".A prática padrão é ter pelo menos uma réplica para a tolerância a falhas.configurar o número de estilhaços é uma operação estática, o que significa que você tem que especificá-lo quando você está criando um índice. Qualquer alteração após isso exigiria uma reformulação completa dos dados e levará tempo. Mas, configurar o número de réplicas é uma operação dinâmica e pode ser feito a qualquer momento após a criação do Índice também.
Pode configurar o número de fragmentos e réplicas para o seu índice com o comando abaixo.
curl -XPUT 'localhost:9200/sampleindex?pretty' -H 'Content-Type: application/json' -d '
{
"settings":{
"number_of_shards":2,
"number_of_replicas":1
}
}
'