Guia Passo a Passo para Configurar um Cluster Básico de Três Nós
Configurar um cluster Elasticsearch resiliente é fundamental para alcançar alta disponibilidade e escalabilidade horizontal em sua infraestrutura de busca e análise. Um cluster de três nós oferece um excelente ponto de partida, fornecendo a redundância necessária para suportar a falha de um único nó sem interrupção do serviço. Este guia abrangente o levará através do processo de instalação, configuração e verificação de um cluster Elasticsearch básico de três nós, ideal para ambientes de desenvolvimento ou implantações de produção em pequena escala.
Ao final deste tutorial, você terá um cluster funcional onde os dados podem ser distribuídos e replicados com segurança, aproveitando as capacidades distribuídas centrais do Elasticsearch.
Pré-requisitos
Antes de iniciar a configuração, certifique-se de ter o seguinte em mãos:
- Três Servidores/VMs Separados: Cada um hospedará um nó. Para este guia, assumimos que você tem três máquinas distintas ou contêineres Docker prontos.
- Java Development Kit (JDK): O Elasticsearch requer um JDK compatível instalado em todos os nós (por exemplo, JDK 17, dependendo da sua versão do Elasticsearch).
- Conectividade de Rede: Certifique-se de que todos os três nós possam se comunicar entre si através das portas necessárias (porta HTTP padrão: 9200, porta de transporte padrão: 9300).
- Instalação Idêntica do Elasticsearch: Baixe e extraia a mesma versão do Elasticsearch em todos os três nós.
Etapa 1: Configurando o elasticsearch.yml de Cada Nó
O arquivo de configuração, elasticsearch.yml, localizado no diretório config/ da sua instalação do Elasticsearch, é crucial para definir como cada nó se comporta dentro do cluster. Você deve ajustar as configurações específicas de cada nó.
Definiremos três funções implicitamente: um nó elegível a master e três nós elegíveis a dados. Para um cluster de três nós, é prática comum permitir que todos os nós assumam as funções de master, dados e ingestão.
Configurações Comuns para Todos os Nós
Certifique-se de que essas configurações sejam idênticas em todos os três arquivos de configuração:
# Nome do Cluster: Deve ser o mesmo em todos os nós
cluster.name: my-three-node-cluster
# Configurações de Descoberta (Crucial para o join inicial)
# Use uma lista de sementes (seed list) de nós conhecidos para inicializar a descoberta
discovery.seed_hosts: ["ip_do_no1:9300", "ip_do_no2:9300", "ip_do_no3:9300"]
# Necessário para quorum (N/2 + 1). Para 3 nós, precisamos de 2 votos.
cluster.initial_master_nodes: ["nome_do_no1", "nome_do_no2", "nome_do_no3"]
# Configurações de Rede (Certifique-se de vincular ao IP correto)
network.host: 0.0.0.0 # Ou o IP privado específico do host
# Porta HTTP (Acesso externo)
http.port: 9200
# Porta de Transporte (Comunicação interna do cluster)
transport.port: 9300
Configurações Únicas por Nó
Cada nó requer um node.name exclusivo e, potencialmente, um path.data exclusivo se estiver executando na mesma máquina ou compartilhando armazenamento.
Configuração do Nó 1 (ip_do_no1)
# Identificador Único para o Nó 1
node.name: node-1
# Se os caminhos forem diferentes
# path.data: /var/lib/elasticsearch/data_node1
Configuração do Nó 2 (ip_do_no2)
# Identificador Único para o Nó 2
node.name: node-2
Configuração do Nó 3 (ip_do_no3)
# Identificador Único para o Nó 3
node.name: node-3
Nota Importante sobre
cluster.initial_master_nodes: Esta configuração é usada apenas quando o cluster é iniciado pela primeira vez. Uma vez que o cluster se forma, o Elasticsearch gerencia a eleição de master internamente. Se você precisar reiniciar um cluster completamente inativo, deve garantir que esses nomes correspondam à configuração inicial.
Etapa 2: Configurando Funções (Opcional, mas Recomendado)
Embora a configuração padrão permita que os nós assumam todas as funções (master, data, ingest, coordinating), em implantações maiores, as funções são separadas. Para uma configuração robusta de três nós, garantimos que todos os nós sejam elegíveis para se tornarem o master.
Adicione a seguinte configuração de funções a todos os três arquivos elasticsearch.yml:
# Habilita todas as funções padrão em todos os nós para esta configuração inicial
node.roles: [ master, data, ingest, remote_cluster_client ]
Lidando com Quorum para Resiliência
Com três nós, o cluster pode tolerar a perda de um nó enquanto mantém o quorum (2 de 3 nós permanecem). Isso é gerenciado pela lista cluster.initial_master_nodes fornecida na Etapa 1.
Etapa 3: Iniciando os Nós do Cluster
Inicie o Elasticsearch sequencialmente em cada nó. Geralmente, é mais seguro iniciar primeiro os nós listados primeiro em cluster.initial_master_nodes, embora o Elasticsearch moderno lide bem com a inicialização não ordenada.
No Nó 1, Nó 2 e Nó 3:
Navegue até o diretório de instalação do seu Elasticsearch e execute:
# Para executar em primeiro plano (útil para depuração)
bin/elasticsearch
# Para executar em segundo plano (recomendado para produção)
bin/elasticsearch -d
Monitore os logs (logs/elasticsearch.log) em cada nó para mensagens de inicialização bem-sucedidas, particularmente aquelas que indicam que eles se juntaram com sucesso ao cluster.
Etapa 4: Verificando a Saúde do Cluster
Assim que todos os nós forem iniciados, use a API _cat/health, acessível através da porta HTTP de qualquer nó (padrão 9200), para confirmar o status do cluster.
Acesse isso a partir de uma máquina que possa alcançar os nós (por exemplo, via curl):
Verificar Saúde:
curl -X GET "http://ip_do_no1:9200/_cat/health?v"
Trecho de Saída Esperada:
| epoch | timestamp | cluster | status | node.total | node.data | shards | pri | relo | init | unassigned | unpersisted |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1701331200 | 12:00:00 | my-three-node-cluster | green | 3 | 3 | 0 | 0 | 0 | 0 | 0 | 0 |
Se status for green e node.total for 3, seu cluster está funcionando corretamente.
Verificando a Adesão dos Nós
Para confirmar que todos os nós se enxergam, verifique a lista de nós:
curl -X GET "http://ip_do_no1:9200/_cat/nodes?v"
Você deve ver três entradas distintas correspondendo a node-1, node-2 e node-3, cada uma mostrando seus endereços IP e funções (m para elegível a master, d para dados).
Etapa 5: Criando um Índice de Teste com Replicação
Para verificar a capacidade do cluster de distribuir dados e lidar com replicação, devemos criar um índice especificando pelo menos uma réplica.
Em um cluster de três nós, definir number_of_replicas para 1 garante que cada shard primário tenha uma cópia (réplica) distribuída em um nó diferente, fornecendo tolerância imediata a falhas.
Comando de Criação de Índice:
```bash
curl -X PUT "http://ip_do_no1:9200/test_data_index?pretty" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 3