Repositório do projeto de implantação de um Stack básica do Elasticsearch em cluster, utilizando docker.
Este projeto visa a implantação de uma stack básica do Elasticsearch, utilizando uma VM a ser provisionada pelo Vangrant no VirtualBox. Essa VM tem a configuração de 4GB de RAM e 2 vCPUs. Favor observar se a máquina host que será implantada tem capacidade necessária.
O cluster é composto por 03 nodes Elasticsearch + 01 node do Kibana.
Observação: Em ambientes de produção não é recomendado ter outro elemento da stack, ou seja, o adequado era executar o Kibana em outro host. Portanto, o ideal, era o host subir apenas o cluster com o Elasticsearh em docker.
Essa configuração é básica, podendo ser aplicada uma configuração superior, principalmente em ambientes de produção.
- Softwares necessários:
- VirtualBox 6.0.x
- Vagrant 2.2.x
- Necessário instalar o seguinte plugin do Vagrant, conforme comando abaixo:
$ vagrant plugin install vagrant-vbguest
Abra um terminal e execute:
$ git clone [email protected]:gutobrutus/elasticstack.git
Agora é só acessar o diretório raiz do projeto com:
$ cd elasticstack
Dentro do diretório raiz do desse projeto, execute:
$ vagrant up
Ao executar o comando acima pela primeira vez, demorará um pouco, pois a VM será provisionada, com instalação de dependências, etc.
Para acessar a vm, após a sua inicialização, execute:
$ vagrant ssh
O Vagrantfile que está no diretório raiz, provisiona uma VM com as seguintes tarefas:
- Atualiza o Sistema Operacional
- Instala o git
- Instala o docker
- Instala o docker-compose
Os itens instalados são fundamentais para rodar a stack Elasticsearch via docker na VM.
a) Configurando o vm.max_map_count
De acordo com a documentação oficial do Elasticsearch, em ambientes de produção é necessário realizar um ajuste em um parâmetro de kernel (vm.max_map_count). Esse parâmetro define o número máximo de áreas de mapas de memória que um processo pode ter. O Elastic necessita de um valor de 262144, conforme sua documentação.
Como estamos rodando a VM com um CentOS, devemos acessá-la e ajustar esse valor:
Checando o valor atual
$ sudo sysctl -a | grep vm.max_map_count
Saída do comando acima:
vm.max_map_count = 65530
Ajustando o valor, conforme recomendado pela documentação do Elasticsearch
$ sudo sysctl -w vm.max_map_count=262144
Observação: Com o último comando, a alteração não é de forma definitiva no CentOS 7, ou seja, se reiniciar a VM, terá novamente que executar o comando acima. Para que a alterção seja permanente, adicione um arquivo sysctl-elk.conf
no diretório /etc/sysctl.d/
com o conteúdo vm.max_map_count=262144
. Se esta configuração não estiver efetiva, o cluster não sobe.
b) Configurando o Heap Size:
O Elasticsearch, por padrão, diz à JVM para usar um heap com um tamanho mínimo e máximo de 1 GB. Quando for implantar em ambiente de produção, é importante configurar o tamanho do heap para garantir que o Elasticsearch possua heap suficiente para trabalhar.
O Elasticsearch utilizará a configuração de heap especificado no arquivo jvm.options (Xms e Xmx). Deve-se definir essas duas configurações para serem iguais. Entretanto, ao executar o Elastic via docker, não é recomendado alterar esse arquivo, mas sim especificar via variáveis de ambiente, conforme próximo parágrafo.
O uso da variável de ambiente ES_JAVA_OPTS no arquivo docker-compose.yml, serve para definir o Xms e Xmx. Por exemplo, para usar 8GB, basta preencher da seguinte forma:
ES_JAVA_OPTS = "-Xms8g -Xmx8g"
Dessa forma, as configurações que estão no arquivo jvm.options, são sobrescritas.
Atenção: Deve-se configurar o Xmx e Xms de modo a não ultrapassar 50% do total de memória RAM física disponível no computador que irá executar os containers da stack. Isso deve-se ao fato do Elasticsearch utilizar memória para outros fins que não apenas o que está definido na heap. É necessário considerar nesse cálculo a quantidade de nós do Elastic no cluster.
Após a VM ter sido provisionada e estar UP, realizada as configurações anteriores, agora basta subir a stack configurada no docker-compose.yml.
Depois de ter acessado a VM com vagrant ssh
, acesse o diretório mapeado por padrão entre a VM e o seu computador:
[vagrant@srvclusterelk-local ~]$ cd /vagrant
Execute um ls -l para listar o conteúdo do diretório, apenas para confirmar se conteúdo é o mesmo desse projeto do GitHub:
[vagrant@srvclusterelk-local vagrant]$ ls -l
total 48
-rw-rw-r--. 1 vagrant vagrant 2075 Abr 18 22:42 docker-compose.yml
-rw-rw-r--. 1 vagrant vagrant 35149 Abr 18 21:08 LICENSE
-rw-rw-r--. 1 vagrant vagrant 4037 Abr 18 22:58 README.md
-rw-rw-r--. 1 vagrant vagrant 1085 Abr 18 22:14 Vagrantfile
Para executar (subir) a stack configurada no docker-compose.yml, basta executar o comando abaixo:
[vagrant@srvclusterelk-local vagrant]$ sudo docker-compose up -d
Caso queira acompanhar os logs de execução da stack, execute:
[vagrant@srvclusterelk-local vagrant]$ sudo docker-compose logs -f
Para deixar de acompanhar os logs basta teclar CTRL+C.
Abra o seu navegador preferido e acesse o seguinte endereço:
http://192.168.99.10:9200
Lembrando que esse IP é que foi configurado no Vagrantfile, é portanto, o IP da VM que em que está sendo executado a stack com docker.
Será exibido como resultado:
{
"name" : "es01",
"cluster_name" : "es-docker-cluster",
"cluster_uuid" : "EhFmwSQiQYa93MZE5mcwWg",
"version" : {
"number" : "7.6.1",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "aa751e09be0a5072e8570670309b1f12348f023b",
"build_date" : "2020-02-29T00:15:25.529771Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Esse resultado indica que o cluster já subiu.
Para acessar o kibana, mude apenas a porta no endereço anterior:
http://192.168.99.10:5601
Desfrute o seu ambiente Elasticsearh em cluster!
- Configuração do loop-lvm mode do docker. Isso é importante para ambientes de produção que utilizam LVM;
- Mapeamento de volumes para configurações adicionais para os nós do Elasticsearch e Kibana;
- Configurar acesso com login e senha no Kibana;
- Adição de um nó de Logstash na mesma VM ou em outra.