Como parar / desligar um nó elasticsearch?

87

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ó?

Michael_Scharf
fonte

Respostas:

127

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: SIGTERMdesligará 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'
Dandoonet
fonte
2
Portanto, parece que a API de desligamento está obsoleta a partir do elasticsearch 1.6 (conforme o link fornecido). Qual é a nova forma recomendada de desligamento?
Mike
2
Acho que está obsoleto porque agora você pode instalá-lo como um serviço e executar elasticsearch de parada de serviço. Se você executá-lo apenas para testes, pressione CTRL + C e pronto.
dadoonet
"gracefull" => você pode mover seu fragmento antes com a API de redirecionamento elastic.co/guide/en/elasticsearch/reference/2.4/…
Thomas Decaux
23

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>

Ijaz Ahmad Khan
fonte
1
a questão é sobre como parar o serviço, não reiniciá-lo.
Jean-François Fabre
1
não precisa desligar o servidor para aplicar a nova configuração. não é uma resposta, é uma solução para o problema dele :)
Ijaz Ahmad Khan
10

Isso funciona para mim no OSX.

pkill -f elasticsearch
Mnishiguchi
fonte
7

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.1para 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.

SureshS
fonte
4

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.

Serge Meunier
fonte
3

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.

akshit bhatia
fonte
2

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
Augustas
fonte
1

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

Mohammad-Ali
fonte
A porta padrão é 9200.
slhck
1

Se você estiver executando um nó no localhost, tente usar brew service stop elasticsearch

Eu executo elasticsearch no iOS localhost.

Ahmer Malik
fonte
0

Resposta para Elasticsearch dentro do Docker:

Basta parar o contêiner do docker. Parece parar normalmente porque registra:

[INFO ][o.e.n.Node               ] [elastic] stopping ...
Risadinha
fonte
0

Considerando que você tem 3 nós.

Prepare seu cluster

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"

Pare o serviço elasticsearch em cada nó

# 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

Reiniciando o cluster novamente

# 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:

  1. https://www.elastic.co/guide/en/elasticsearch/reference/6.5/stopping-elasticsearch.html
  2. https://www.elastic.co/guide/en/elasticsearch/reference/6.5/rolling-upgrades.html
Thiago Falcao
fonte