Quero reiniciar um nó elasticsearch com uma nova configuração. Qual é a melhor maneira de desligar normalmente um nó?
Matar o processo é a melhor maneira de desligar o servidor ou existe algum URL mágico que posso usar para desligar o nó?
Quero reiniciar um nó elasticsearch com uma nova configuração. Qual é a melhor maneira de desligar normalmente um nó?
Matar o processo é a melhor maneira de desligar o servidor ou existe algum URL mágico que posso usar para desligar o nó?
Respostas:
Resposta atualizada.
_shutdown
API foi removida em elasticsearch 2.x.
Algumas opções:
No seu terminal (basicamente modo dev), basta digitar "Ctrl-C"
Se você o iniciou como um daemon ( -d
), encontre o PID e elimine o processo: SIGTERM
desligará o Elasticsearch de forma limpa ( kill -15 PID
)
Se estiver executando como um serviço, execute algo como service elasticsearch stop
:
Resposta anterior. Agora está obsoleto do 1.6.
Sim. Consulte a documentação de desligamento dos nós do cluster de administração
Basicamente:
# Shutdown local node
$ curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'
# Shutdown all nodes in the cluster
$ curl -XPOST 'http://localhost:9200/_shutdown'
Se você deseja apenas aplicar uma nova configuração, não precisa desligá-lo.
$ sudo service elasticsearch restart
Mas se você quiser desligá-lo mesmo assim:
$ sudo service elasticsearch stop
OU
$ sudo systemctl stop elasticsearch.service
$ sudo systemctl restart elasticsearch.service
Docker:
docker restart <elasticsearch-container-name or id>
Isso funciona para mim no OSX.
pkill -f elasticsearch
Parar o serviço e matar o daemon são, de fato, as maneiras corretas de encerrar um nó. No entanto, não é recomendado fazer isso diretamente se quiser desativar um nó para manutenção. Na verdade, se você não tiver réplicas, perderá dados.
Quando você desliga um nó diretamente, o Elasticsearch espera 1m (tempo padrão) para que ele volte a ficar online. Caso contrário, ele começará a alocar os fragmentos desse nó para outros nós, desperdiçando muito IO.
Uma abordagem típica seria desativar a alocação de shard temporariamente, emitindo:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
Agora, quando você desativa um nó, o ES não tentará alocar fragmentos desse nó para outros nós e você pode realizar sua atividade de manutenção e, em seguida, quando o nó estiver ativo, você pode habilitar a alocação de fragmentos novamente:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}
Fonte: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/restart-upgrade.html
Se você não tiver réplicas para todos os seus índices, a execução desse tipo de atividade resultará no tempo de inatividade de alguns dos índices. Uma maneira mais limpa, neste caso, seria migrar todos os fragmentos para outros nós antes de derrubar o nó:
PUT _cluster/settings
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "10.0.0.1"
}
}
Isso moverá todos os fragmentos de 10.0.0.1
para outros nós (levará algum tempo, dependendo dos dados). Depois que tudo estiver feito, você pode matar o nó, realizar a manutenção e colocá-lo novamente online. Esta é uma operação mais lenta e não é necessária se você tiver réplicas.
(Em vez de _ip, _id, _name com curingas funcionará perfeitamente.)
Mais informações: https://www.elastic.co/guide/en/elasticsearch/reference/5.5/allocation-filtering.html
Outras respostas explicaram como matar um processo.
O plugin Head para Elasticsearch fornece um excelente front-end baseado na web para a administração do Elasticsearch, incluindo o fechamento de nós. Ele também pode executar qualquer comando Elasticsearch.
use o seguinte comando para saber o pid do nó já em execução.
curl -XGET ' http: // localhost: 9200 / _nodes / process '
Levei uma hora para descobrir a maneira de matar o nó e poderia finalmente fazê-lo após usar este comando na janela do terminal.
Se você não consegue encontrar qual processo está executando o elasticsearch na máquina Windows, você pode tentar executar no console:
netstat -a -n -o
Verifique se a porta elasticsearch está em execução, o padrão é 9200
. A última coluna é o PID para o processo que está usando essa porta. Você pode desligá-lo com um comando simples no console
taskkill /PID here_goes_PID /F
Caso queira encontrar o PID da instância e encerrar o processo, supondo que o nó esteja escutando a porta 9300 (a porta padrão), você pode executar o seguinte comando:
kill -9 $(netstat -nlpt | grep 9200 | cut -d ' ' -f 58 | cut -d '/' -f 1)
Você pode ter que brincar com os números no código mencionado acima, como 58 e 1
Se você estiver executando um nó no localhost, tente usar brew service stop elasticsearch
Eu executo elasticsearch no iOS localhost.
Considerando que você tem 3 nós.
export ES_HOST=localhost:9200
# Disable shard allocation
curl -X PUT "$ES_HOST/_cluster/settings" -H 'Content-Type: application/json' -d'
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
'
# Stop non-essential indexing and perform a synced flush
curl -X POST "$ES_HOST/_flush/synced"
# check nodes
export ES_HOST=localhost:9200
curl -X GET "$ES_HOST/_cat/nodes"
# node 1
systemctl stop elasticsearch.service
# node 2
systemctl stop elasticsearch.service
# node 3
systemctl stop elasticsearch.service
# start
systemctl start elasticsearch.service
# Reenable shard allocation once the node has joined the cluster
curl -X PUT "$ES_HOST/_cluster/settings" -H 'Content-Type: application/json' -d'
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
'
Testado em Elasticseach 6.5
Fonte: