Estou tentando entender o que é fragmento e réplica no Elasticsearch, mas não consegui entender. Se eu baixar o Elasticsearch e executar o script, pelo que sei, iniciei um cluster com um único nó. Agora, este nó (meu PC) possui 5 fragmentos (?) E algumas réplicas (?).
Quais são eles, tenho 5 duplicatas do índice? Se sim, por quê? Eu poderia precisar de alguma explicação.
elasticsearch
full-text-search
LuckyLuke
fonte
fonte
Respostas:
Tentarei explicar com um exemplo real, pois as respostas e respostas que você recebeu não parecem ajudá-lo.
Quando você baixa o elasticsearch e o inicia, cria um nó elasticsearch que tenta ingressar em um cluster existente, se disponível, ou cria um novo. Digamos que você criou seu próprio novo cluster com um único nó, aquele que você acabou de iniciar. Não temos dados, portanto, precisamos criar um índice.
Quando você cria um índice (um índice é criado automaticamente quando você também indexa o primeiro documento), você pode definir de quantos shards ele será composto. Se você não especificar um número, ele terá o número padrão de shards: 5 primárias. O que isso significa?
Isso significa que a elasticsearch criará 5 shards principais que conterão seus dados:
Toda vez que você indexa um documento, a elasticsearch decide qual fragmento primário deve conter esse documento e o indexa lá. Os shards primários não são uma cópia dos dados, são os dados! Ter vários shards ajuda a tirar proveito do processamento paralelo em uma única máquina, mas o ponto principal é que, se iniciarmos outra instância de elasticsearch no mesmo cluster, os shards serão distribuídos de maneira uniforme pelo cluster.
O nó 1 conterá, por exemplo, apenas três fragmentos:
Desde que os dois shards restantes foram movidos para o nó recém-iniciado:
Por que isso acontece? Como o elasticsearch é um mecanismo de pesquisa distribuído, você pode usar vários nós / máquinas para gerenciar grandes quantidades de dados.
Todo índice de pesquisa elástica é composto de pelo menos um fragmento primário, pois é onde os dados são armazenados. Porém, todo shard tem um custo, portanto, se você tiver um único nó e nenhum crescimento previsível, fique com um único shard primário.
Outro tipo de fragmento é uma réplica. O padrão é 1, o que significa que todo shard primário será copiado para outro shard que conterá os mesmos dados. As réplicas são usadas para aumentar o desempenho da pesquisa e o failover. Um shard de réplica nunca será alocado no mesmo nó em que o primário relacionado está (seria como colocar um backup no mesmo disco que os dados originais).
De volta ao nosso exemplo, com 1 réplica, teremos o índice inteiro em cada nó, pois dois shards de réplica serão alocados no primeiro nó e conterão exatamente os mesmos dados que os shards primários no segundo nó:
O mesmo para o segundo nó, que conterá uma cópia dos shards primários no primeiro nó:
Com uma configuração como esta, se um nó cair, você ainda terá o índice inteiro. Os shards de réplica se tornarão primários automaticamente e o cluster funcionará corretamente, apesar da falha do nó, da seguinte maneira:
Como você possui
"number_of_replicas":1
, as réplicas não podem mais ser atribuídas, pois nunca são alocadas no mesmo nó onde está o principal. É por isso que você terá 5 shards não atribuídos, as réplicas e o status do cluster emYELLOW
vez deGREEN
. Sem perda de dados, mas poderia ser melhor, pois alguns shards não podem ser atribuídos.Assim que o nó restante for copiado, ele ingressará no cluster novamente e as réplicas serão atribuídas novamente. O shard existente no segundo nó pode ser carregado, mas eles precisam ser sincronizados com os outros shards, pois as operações de gravação provavelmente ocorreram enquanto o nó estava inoperante. No final desta operação, o status do cluster se tornará
GREEN
.Espero que isso esclareça as coisas para você.
fonte
Um índice é dividido em shards para distribuí-los e escalar.
As réplicas são cópias dos shards e fornecem confiabilidade se um nó for perdido. Freqüentemente há confusão nesse número porque o número de réplicas == 1 significa que o cluster deve ter a cópia principal e replicada do shard disponível para estar no estado verde.
Para que as réplicas sejam criadas, você deve ter pelo menos 2 nós em seu cluster.
Você pode encontrar aqui as definições mais fáceis de entender: http://www.elasticsearch.org/guide/reference/glossary/
Atenciosamente, Paul
fonte
Se você realmente não gosta de vê-lo amarelo. você pode definir o número de réplicas como zero:
Observe que você deve fazer isso apenas na sua caixa de desenvolvimento local.
fonte
Fragmento:
ElasticSearch
usa o conceito chamadoShard
para distribuir documentos de índice em todos os nós.index
pode potencialmente armazenar uma grande quantidade de dados que pode exceder os limites de hardware de umsingle node
Elasticsearch
fornece a capacidade de subdividir seu índice em várias partes chamadasshards
.shards
desejado.Documents
são armazenadosshards
e os shards são alocadosnodes
no seucluster
cluster
cresce ou diminui,Elasticsearch
migrará automaticamente os fragmentos entre eles,nodes
para que oscluster
restos sejam equilibrados.primary shard
ou umreplica shard
.single primary shard
, portanto, o número de shards primários que você determina determina a quantidade máxima de dados que seu índice pode conterreplica shard
é apenas uma cópia de um fragmento primário.Réplica:
Replica shard
é a cópia deprimary Shard
, para evitar perda de dados em caso de falha de hardware.Elasticsearch
permite que você faça uma ou mais cópias dos shards do seu índice no que é chamado shards de réplica, oureplicas
abreviado.index
também pode ser replicado zero (ou seja, sem réplicas) ou mais vezes.number of shards
réplicas e podem ser definidas por índice no momento em que o índice é criado.cannot change the number of shards
depois disso.Elasticsearch
é alocado1 replica
com 5 shards primários e isso significa que, se você tiver pelo menos dois nós no cluster, seu índice terá 5 shards primários e outros 5 shards de réplica (1 réplica completa) para um total de 10 shards por índice.fonte
Um índice é dividido em shards para distribuí-los e escalar.
Réplicas são cópias dos fragmentos.
Um nó é uma instância em execução de pesquisa elástica que pertence a um cluster.
Um cluster consiste em um ou mais nós que compartilham o mesmo nome de cluster. Cada cluster possui um único nó principal que é escolhido automaticamente pelo cluster e que pode ser substituído se o nó principal atual falhar.
fonte
AWS ec2
instâncias, cada uma com elasticsearch instalado. Significa que temos três nós aqui? Se todos esses nós tiverem a mesmacluster.name: test
propriedade definida, ele criará um nome de Clustertest
com três nós?Vou explicar isso usando cenários reais de palavras. Imagine que você está executando um site de comércio eletrônico. À medida que você se torna mais popular, mais vendedores e produtos são adicionados ao seu site. Você perceberá que o número de produtos que talvez você precise indexar aumentou e é muito grande para caber em um disco rígido de um nó. Mesmo que ele se encaixe no disco rígido, a execução de uma pesquisa linear em todos os documentos em uma máquina é extremamente lenta. um índice em um nó não aproveitará a configuração do cluster distribuído no qual a elasticsearch trabalha.
Portanto, a elasticsearch divide os documentos no índice entre vários nós no cluster. Cada divisão do documento é chamada de fragmento. Cada nó que possui um fragmento de um documento terá apenas um subconjunto do documento. suponha que você tenha 100 produtos e 5 fragmentos, cada fragmento terá 20 produtos. Esse compartilhamento de dados é o que torna possível a pesquisa de baixa latência na pesquisa elástica. a pesquisa é realizada paralelamente em vários nós. Os resultados são agregados e retornados. No entanto, os fragmentos não fornecem tolerância a falhas. Ou seja, se qualquer nó que contém o fragmento estiver inativo, a integridade do cluster ficará amarela. Isso significa que alguns dados não estão disponíveis.
Para aumentar a tolerância a falhas, as réplicas são exibidas. Por padrão, a pesquisa elástica cria uma única réplica de cada fragmento. Essas réplicas são sempre criadas em outro nó em que o shard primário não está residindo. Portanto, para tornar o sistema tolerante a falhas, talvez seja necessário aumentar o número de nós no cluster e isso também depende do número de shards do seu índice. A fórmula geral para calcular o número de nós exigido com base em réplicas e shards é "número de nós = número de shards * (número de réplicas + 1)". A prática padrão é ter pelo menos uma réplica para tolerância a falhas.
A configuração do número de shards é uma operação estática, o que significa que você deve especificá-lo quando estiver criando um índice. Qualquer alteração após esse processo requer reindexação completa dos dados e levará tempo. Porém, configurar o número de réplicas é uma operação dinâmica e também pode ser feita a qualquer momento após a criação do índice.
você pode configurar o número de shards e réplicas para o seu índice com o comando abaixo.
fonte
Não é uma resposta, mas outra referência para os principais conceitos do ElasticSearch, e acho que eles são bastante claros como complemento à resposta de @ javanna.
Estilhaços
Réplicas
fonte
No ElasticSearch, no nível superior, indexamos os documentos em índices. Cada índice possui um número de shards que distribui internamente os dados e existem shards dentro dos segmentos Lucene, que é o armazenamento principal dos dados. Portanto, se o índice tiver 5 shards, significa que os dados foram distribuídos pelos shards e não existem os mesmos dados nos shards.
Assista ao vídeo que explica o núcleo do ES https://www.youtube.com/watch?v=PpX7J-G2PEo
Artigo sobre vários índices ou vários shards Pesquisa elástica, vários índices versus um índice e tipos para diferentes conjuntos de dados?
fonte
O Elasticsearch é incrivelmente escalável, com todo o crédito atribuído à sua arquitetura distribuída. Isso é possível devido ao Sharding. Agora, antes de avançarmos mais, consideremos um caso de uso simples e muito comum. Suponhamos que você tenha um índice que contenha muitos documentos e, por uma questão de simplicidade, considere que o tamanho desse índice é de 1 TB (ou seja, a soma dos tamanhos de cada documento desse índice é de 1 TB ) Além disso, suponha que você tenha dois nós, cada um com 512 GB de espaço disponível para armazenar dados. Como pode ser visto claramente, todo o nosso índice não pode ser armazenado em nenhum dos dois nós disponíveis e, portanto, precisamos distribuir nosso índice entre esses nós.
Em casos como este, em que o tamanho de um índice excede os limites de hardware de um único nó, o Sharding vem em socorro. O sharding resolve esse problema dividindo os índices em pedaços menores e esses pedaços são nomeados como shards.
fonte
Em seus termos mais simples,
shard
nada mais é do que parte de um índice armazenado no disco em uma pasta separada:Esta captura de tela mostra o diretório inteiro do Elasticsearch.
Como você pode ver, todos os dados entram no
data
diretório.Ao inspecionar o índice
C-mAfLltQzuas72iMiIXNw
, vemos que ele possui cinco shards (pastas0
para4
).Por outro lado, o
JH_A8PgCRj-GK0GeQ0limw
índice possui apenas um shard (0
pasta).A
pri
visualização do número total de shards.fonte