Resolvendo o Status de Cluster Vermelho: Um Guia Passo a Passo para Resolução de Problemas no Elasticsearch
A saúde de um cluster Elasticsearch é crucial para sua eficiência operacional e disponibilidade de dados. Quando o status do cluster fica vermelho ou amarelo, isso sinaliza um problema subjacente que requer atenção imediata. Um status red indica que índices ou shards estão não alocados, o que significa que os dados podem estar inacessíveis ou as operações podem falhar. Um status yellow significa que os shards primários estão alocados, mas alguns shards de réplica estão não alocados. Embora menos crítico que o status vermelho, ainda representa um risco para a durabilidade dos dados. Este guia fornece uma abordagem sistemática para diagnosticar e resolver esses problemas comuns de saúde do cluster Elasticsearch.
Compreender a causa raiz desses problemas de status é o primeiro passo para a resolução. Os culpados comuns incluem espaço em disco insuficiente, nós sobrecarregados, problemas de rede ou configurações incorretas relacionadas à alocação de shards. Seguindo as etapas de diagnóstico descritas abaixo, você pode identificar o problema exato e implementar soluções eficazes, restaurando seu cluster a um estado green saudável.
Compreendendo a Saúde do Cluster Elasticsearch
O Elasticsearch fornece uma API de Saúde do Cluster (Cluster Health API) que oferece um instantâneo do status do cluster e da alocação de shards. Esta API é sua ferramenta principal para diagnosticar problemas de saúde.
GET _cluster/health
A saída deste comando incluirá um campo status, que pode ser green, yellow ou red. Ele também fornece informações sobre o número de shards ativos e não alocados.
- Green: Todos os shards primários e de réplica estão alocados e funcionando corretamente.
- Yellow: Todos os shards primários estão alocados, mas alguns shards de réplica estão não alocados.
- Red: Um ou mais shards primários estão não alocados, levando à indisponibilidade de dados para esses shards.
Causas Comuns e Etapas de Resolução de Problemas para Status Vermelho/Amarelo
Quando seu cluster não está green, é hora de investigar. Aqui estão as razões mais comuns para shards não alocados e como resolvê-las:
1. Espaço em Disco Insuficiente
O Elasticsearch possui salvaguardas para prevenir a corrupção de dados devido a discos cheios. Se um nó ficar sem espaço em disco, ele impedirá que novos shards sejam alocados ou que os existentes sejam recuperados.
Diagnóstico:
- Verifique o uso do disco em cada nó.
- Use a API
Cluster Allocation Explainpara entender por que os shards estão não alocados.
GET _cluster/allocation/explain
Esta API fornecerá um raciocínio detalhado, frequentemente apontando para limites de espaço em disco (watermarks).
Resolução:
- Libere espaço em disco: Exclua índices antigos, realize fusão de segmentos (
segment merging) ou remova dados desnecessários. - Adicione mais espaço em disco: Aumente a capacidade de armazenamento de seus nós.
- Configure os limites de espaço em disco (disk watermarks): Ajuste as configurações
cluster.routing.allocation.disk.watermark.low,higheflood_stagepara controlar quando o Elasticsearch começa a considerar um disco cheio. Tenha cautela com essas configurações, pois elas podem mascarar problemas subjacentes de capacidade.
2. Nó Saiu do Cluster (Remoção de Nó)
Nós podem sair de um cluster devido a problemas de rede, falhas ou serem removidos intencionalmente. Se um nó que contém shards (especialmente shards primários) sair, esses shards se tornam não alocados.
Diagnóstico:
- Verifique os logs do cluster para nós que saíram recentemente.
- Monitore a conectividade de rede entre os nós.
- Garanta que todos os nós sejam detectáveis uns pelos outros (verifique as configurações
discovery.seed_hostsecluster.initial_master_nodes).
Resolução:
- Reinicie o nó: Se o nó falhou ou ficou sem resposta, tente reiniciá-lo.
- Resolva problemas de rede: Resolva quaisquer problemas de conectividade de rede entre os nós.
- Readicione o nó: Se o nó foi removido intencionalmente, certifique-se de que esteja configurado corretamente antes de se juntar novamente ao cluster.
3. Filtragem e Consciência de Alocação de Shards (Shard Allocation Filtering and Awareness)
Regras de alocação de shards configuradas incorretamente podem impedir que os shards sejam atribuídos a nós disponíveis.
Diagnóstico:
- Revise suas configurações
cluster.routing.allocation.*, particularmente os filtroscluster.routing.allocation.include,excludeerequire. - Verifique
cluster.routing.allocation.awareness.attributesse estiver usando zone ou rack awareness.
Resolução:
- Ajuste os filtros de alocação: Modifique os filtros para permitir que os shards sejam alocados aos nós apropriados.
- Corrija os atributos de consciência (
awareness attributes): Certifique-se de que os nós estejam corretamente marcados com atributos de consciência, se usados, e que suas regras de alocação os respeitem.
4. Espaço em Disco Insuficiente para Alocação (Pós-Criação de Índice)
Mesmo que um disco não esteja cheio, o Elasticsearch pode impedir a alocação de shards se prever que o disco excederá os limites superiores (high watermarks) após a alocação. Isso está relacionado aos limites de espaço em disco (disk watermarks), mas afeta especificamente novas alocações.
Diagnóstico:
- A API
_cluster/allocation/explainé inestimável aqui. - Verifique o espaço livre disponível versus o tamanho esperado dos shards.
Resolução:
- Semelhante ao problema geral de espaço em disco: libere espaço, adicione mais armazenamento ou ajuste os limites de espaço (watermarks) com cautela.
5. Tamanho do Shard e Capacidade do Nó
Shards muito grandes ou um grande número de shards podem sobrecarregar os recursos do nó (CPU, memória) e afetar a alocação. Além disso, se um nó atingiu seu limite de shards (cluster.routing.allocation.total_shards_per_node), novos shards não serão alocados a ele.
Diagnóstico:
- Verifique os tamanhos dos shards (
GET _cat/shards?v). - Monitore a utilização de recursos do nó (CPU, memória).
- Revise a configuração
cluster.routing.allocation.total_shards_per_node.
Resolução:
- Reduza o tamanho do shard: Considere reindexar os dados em índices com menos shards ou shards de tamanhos menores. Procure tamanhos de shard entre 10 GB e 50 GB como uma diretriz geral.
- Aumente a capacidade do nó: Adicione nós mais poderosos ou nós com mais memória/CPU.
- Ajuste o limite de shards: Se necessário e você tiver recursos suficientes, aumente
cluster.routing.allocation.total_shards_per_node.
6. Problemas no Nó Mestre
Um nó mestre instável pode levar a problemas de alocação de shards. Se o mestre estiver indisponível ou incapaz de realizar suas funções, os shards podem ficar não alocados.
Diagnóstico:
- Verifique os logs do cluster em busca de erros ou avisos relacionados ao mestre.
- Certifique-se de ter um número ímpar de nós elegíveis a mestre (normalmente 3 ou 5) para evitar cenários de split-brain.
- Verifique se os nós elegíveis a mestre podem eleger um mestre.
Resolução:
- Estabilize o mestre: Garanta que os nós elegíveis a mestre estejam saudáveis, tenham recursos suficientes e estejam bem conectados.
- Corrija
initial_master_nodes: Certifique-se de que esta configuração esteja configurada corretamente na primeira inicialização do cluster e permaneça estável.
Resolução de Problemas Avançada com _cluster/allocation/explain
A API _cluster/allocation/explain é sua ferramenta mais poderosa para entender por que um shard específico está não alocado.
Exemplo:
GET _cluster/allocation/explain
{
"index": "my-index",
"shard": 0,
"primary": true
}
Isso retornará uma saída JSON detalhada explicando por que o shard primário 0 de my-index não pode ser alocado. Procure campos como deciders que listam os motivos da não alocação (por exemplo, DISK_THRESHOLD, NODE_LEFT, NO_VALID_SHARD_COPY).
Resolvendo o Status de Cluster Amarelo
Um status amarelo significa que os shards primários estão alocados, mas as réplicas não. Isso afeta principalmente a redundância de dados e a tolerância a falhas.
Causas Comuns:
- Nós insuficientes: Você não tem nós suficientes para acomodar o número necessário de réplicas para seus índices.
- Filtragem de alocação de shards: Semelhante ao status vermelho, os filtros podem estar impedindo que as réplicas sejam alocadas.
- Restrições de espaço em disco: Os nós podem ter espaço suficiente para os shards primários, mas não o suficiente para as réplicas, especialmente se os limites de espaço em disco (disk watermarks) estiverem ativos.
Resolução:
- Adicione mais nós: Aumente o número de nós em seu cluster.
- Ajuste a contagem de réplicas: Reduza o número de réplicas por índice (
index.number_of_replicas) se a tolerância a falhas não for crítica para todos os índices. - Verifique as configurações de alocação: Certifique-se de que os shards de réplica possam ser alocados aos nós disponíveis.
Melhores Práticas para Manter a Saúde do Cluster
- Monitore o Uso do Disco: Monitore proativamente o espaço em disco em todos os nós e configure alertas.
- Dimensionamento Correto do Cluster (
Right-size your Cluster): Garanta que você tenha nós e recursos suficientes para o volume de seus dados e a carga de consulta. - Gerenciamento de Shards: Mantenha os tamanhos dos shards dentro das faixas recomendadas e evite o excesso de shards (
over-sharding). - Revise Regularmente a Saúde do Cluster: Use
GET _cluster/healtheGET _cluster/allocation/explaincomo parte de sua monitorização de rotina. - Teste as Alterações: Antes de fazer alterações significativas nas configurações de alocação ou nos limites de espaço em disco (disk watermarks), teste-as em um ambiente de estágio.
Conclusão
Resolver um status de cluster Elasticsearch vermelho ou amarelo requer uma abordagem metódica de diagnóstico. Ao alavancar a API de Saúde do Cluster (Cluster Health API), a API Cluster Allocation Explain e compreender pontos comuns de falha como espaço em disco, problemas de rede e configurações de alocação, você pode efetivamente resolver problemas e restaurar seu cluster à saúde ideal. O monitoramento consistente e a aderência às melhores práticas são fundamentais para evitar que esses problemas surjam em primeiro lugar.