Configuração de Cluster Elasticsearch: Um Guia de Configuração Passo a Passo
Configurar um cluster Elasticsearch robusto é o passo fundamental para aproveitar suas poderosas capacidades de busca distribuída e análise. Seja para implantar em um projeto pequeno ou em uma solução empresarial de larga escala, entender os princípios essenciais de configuração é crucial para garantir desempenho, escalabilidade e confiabilidade ideais. Este guia oferece um passo a passo abrangente para configurar um cluster Elasticsearch, cobrindo aspectos essenciais desde a instalação inicial até o ajuste fino das configurações de nó.
Uma configuração de cluster adequada não só garante que sua instância Elasticsearch funcione sem problemas, mas também a prepara para lidar com volumes crescentes de dados e cargas de consulta. Uma configuração incorreta pode levar a gargalos de desempenho, inconsistências de dados e até mesmo instabilidade do cluster. Seguindo este guia, você obterá o conhecimento para construir um ambiente Elasticsearch resiliente e eficiente, adaptado às suas necessidades específicas.
Pré-requisitos
Antes de mergulhar na configuração, certifique-se de ter o seguinte em vigor:
- Java Development Kit (JDK): O Elasticsearch requer um JDK compatível. O Elasticsearch 7.x e versões posteriores requerem JDK 11 ou superior. Verifique sua instalação Java:
bash java -version - Recursos do Sistema: Aloque RAM, CPU e espaço em disco suficientes para seus nós Elasticsearch. Os requisitos exatos dependem do seu volume de dados e da complexidade das consultas.
- Acesso à Rede: Certifique-se de que os nós possam se comunicar entre si nas portas de transporte configuradas (o padrão é 9300).
Instalação
Embora este guia se concentre na configuração, uma configuração bem-sucedida começa com uma instalação correta. O Elasticsearch pode ser instalado por meio de gerenciadores de pacotes (apt, yum), baixando o arquivo ou usando Docker. Consulte a documentação oficial do Elasticsearch para obter instruções de instalação detalhadas específicas para o seu sistema operacional ou método de implantação.
Arquivos de Configuração Essenciais
O arquivo de configuração principal para o Elasticsearch é elasticsearch.yml, geralmente localizado no diretório config/ da sua instalação Elasticsearch. As configurações chave dentro deste arquivo ditam o comportamento do cluster.
Configuração do Cluster: Diretivas de Configuração Chave
1. Nome do Cluster (cluster.name)
Esta configuração identifica seu cluster de forma única. Todos os nós no mesmo cluster devem compartilhar o mesmo cluster.name. Se não for definido, o padrão é elasticsearch.
- Importância: Essencial para que os nós descubram e entrem no cluster correto. Clusters diferentes na mesma rede devem ter nomes distintos.
- **Exemplo (
elasticsearch.yml):
yaml cluster.name: my-production-cluster
2. Função do Nó (node.roles)
Os nós Elasticsearch podem receber funções específicas para otimizar a alocação de recursos e o desempenho. As funções comuns incluem master, data, ingest e ml. Para clusters menores, um único nó pode ter múltiplas funções.
- Nó elegível para mestre (Master-eligible node): Responsável por ações em todo o cluster, como criar/excluir índices, rastrear nós e alocar shards. É recomendado ter nós mestres dedicados em ambientes de produção para maior estabilidade.
yaml node.roles: [ master ] - Nó de dados (Data node): Armazena dados e executa operações relacionadas a dados, como indexação e busca. Nós de dados dedicados são cruciais para o desempenho.
yaml node.roles: [ data ] - Nó de ingestão (Ingest node): Usado para pré-processar documentos antes da indexação (por exemplo, usando pipelines de ingestão).
yaml node.roles: [ ingest ] - Nó de Machine Learning (Machine Learning node): Executa recursos de machine learning para detecção de anomalias e outras tarefas.
yaml node.roles: [ ml ] - Nó apenas coordenador (Coordinating-only node): Lida com solicitações de busca e em massa (bulk), mas não armazena dados nem participa da eleição de mestre. Útil para descarregar cargas pesadas de consulta dos nós de dados ou mestres.
yaml node.roles: [ ] # Nenhuma função específica implica apenas coordenador por padrão se não for mestre/dados
Melhor Prática: Em produção, dedique nós a funções específicas (por exemplo, separe nós mestres de nós de dados) para melhor tolerância a falhas e desempenho. Para configurações menores, os nós podem ter funções combinadas.
3. Configurações de Rede (network.host, http.port, transport.port)
Estas configurações controlam como seus nós Elasticsearch se comunicam.
network.host: O endereço IP ou nome do host ao qual o nó se vincula. Para clusters multi-nós, defina-o para um endereço IP acessível por outros nós. Usar0.0.0.0vincula-se a todas as interfaces de rede disponíveis.
yaml network.host: 192.168.1.100 # ou network.host: _site_ # ou network.host: 0.0.0.0http.port: A porta para a API REST HTTP (padrão: 9200).
yaml http.port: 9200transport.port: A porta para comunicação nó-a-nó (padrão: 9300).
yaml transport.port: 9300
Aviso: Esteja atento às regras do firewall para garantir que os nós possam se comunicar na transport.port.
4. Configurações de Descoberta (discovery.seed_hosts, cluster.initial_master_nodes)
Estas configurações são cruciais para que os nós encontrem e entrem no cluster.
discovery.seed_hosts: Uma lista de endereços IP ou nomes de host de outros nós no cluster aos quais os novos nós podem se conectar para descobrir o cluster.
```yaml
discovery.seed_hosts:- "host1:9300"
- "host2:9300"
- "192.168.1.101:9300"
```
cluster.initial_master_nodes: Uma lista de nomes de nós que são elegíveis para se tornarem o nó mestre inicial quando o cluster inicia pela primeira vez. Isso é essencial para inicializar (bootstrapping) um cluster. Uma vez que o cluster esteja em execução, essas configurações se tornam menos críticas para a entrada de novos nós, mas ainda são importantes para cenários de reinicialização do cluster.
```yaml
cluster.initial_master_nodes:- "node-1"
- "node-2"
- "node-3"
```
Dica: Em ambientes de nuvem ou redes dinâmicas, considere usar serviços como DNS ou mecanismos de descoberta de provedores de nuvem.
Configurando um Cluster Multi-Nó
Para configurar um cluster multi-nó, você configurará o arquivo elasticsearch.yml de cada nó. Certifique-se de que:
- O
cluster.nameseja idêntico em todos os nós. - Cada nó tenha um
node.nameúnico (por exemplo,node-1,node-2). - O
network.hostesteja definido para um endereço IP acessível por outros nós. - O
discovery.seed_hostsliste os endereços de pelo menos um quorum de nós elegíveis para mestre. - O
cluster.initial_master_nodesinclua os nomes de todos os nós designados como elegíveis para mestre para a inicialização (bootstrap) inicial.
Exemplo para node-1:
cluster.name: my-production-cluster
node.name: node-1
node.roles: [ master, data ]
network.host: 192.168.1.100
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
- "192.168.1.100:9300"
- "192.168.1.101:9300"
- "192.168.1.102:9300"
cluster.initial_master_nodes:
- "node-1"
- "node-2"
- "node-3"
**Exemplo para node-2 (similar, com node.name: node-2):
cluster.name: my-production-cluster
node.name: node-2
node.roles: [ master, data ]
network.host: 192.168.1.101
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
- "192.168.1.100:9300"
- "192.168.1.101:9300"
- "192.168.1.102:9300"
cluster.initial_master_nodes:
- "node-1"
- "node-2"
- "node-3"
5. Tamanho da Heap (jvm.options)
O Elasticsearch utiliza uma quantidade significativa de memória. O tamanho da heap da Java Virtual Machine (JVM) é configurado no arquivo jvm.options (geralmente no diretório config/). Recomenda-se definir os tamanhos mínimo e máximo da heap para o mesmo valor para evitar problemas de desempenho causados pelo redimensionamento da heap.
- Melhor Prática: Defina o tamanho da heap para não mais de 50% da RAM disponível do seu sistema, e nunca exceda 30-32GB devido às limitações dos "oops" (ponteiros de objetos ordinários) compactados.
**Exemplo (jvm.options):
-Xms4g
-Xmx4g
Isso define o tamanho inicial e máximo da heap para 4 gigabytes.
6. Alocação e Replicação de Shards (cluster.routing.*)
Estas configurações controlam como os shards são distribuídos e replicados entre os nós.
cluster.routing.allocation.disk.watermark.low,high,flood_stage:** Limites para prevenir a alocação de shards em discos que estão ficando sem espaço.cluster.routing.allocation.enable: Controla a alocação de shards (por exemplo,all,primaries,new_primaries,none).
Exemplo:
cluster.routing.allocation.disk.watermark.low: "85%"
cluster.routing.allocation.disk.watermark.high: "90%"
cluster.routing.allocation.disk.watermark.flood_stage: "95%"
Verificando a Saúde do Cluster
Depois que os nós são iniciados, você pode verificar a saúde e o status do cluster usando a API de Saúde do Cluster.
curl -X GET "localhost:9200/_cluster/health?pretty"
Campos de saída chave:
status:green(todos os shards alocados),yellow(algumas réplicas não atribuídas),red(alguns shards primários não atribuídos).number_of_nodes: O número total de nós no cluster.number_of_data_nodes: O número de nós designados como nós de dados.active_shards,relocating_shards,initializing_shards,unassigned_shards.
Dica: Procure um status green. Um status yellow indica que, embora seus dados estejam seguros (shards primários estão alocados), você pode não ter réplicas suficientes para alta disponibilidade. Um status red significa que os dados estão em risco e exigem atenção imediata.
Próximos Passos
Após configurar com sucesso seu cluster Elasticsearch, você normalmente prosseguirá para:
- Criação de Índice: Defina como seus dados serão armazenados e organizados.
- Mapeamento: Defina o esquema para seus documentos, especificando tipos de dados para os campos.
- Analisadores: Configure a análise de texto para uma busca de texto completo eficaz.
- Segurança: Implemente autenticação e autorização.
Este guia fornece a base essencial para um cluster Elasticsearch estável e de alto desempenho. O monitoramento contínuo e o ajuste com base em sua carga de trabalho específica são a chave para o sucesso a longo prazo.