99 votes

Comment arrêter/supprimer un nœud elasticsearch ?

Je veux redémarrer un nœud elasticsearch avec une nouvelle configuration. Quelle est la meilleure façon d'arrêter gracieusement un nœud ?

Est-ce que tuer le processus est le meilleur moyen d'arrêter le serveur, ou existe-t-il une URL magique que je peux utiliser pour arrêter le nœud ?

137voto

dadoonet Points 4648

Réponse actualisée.

_shutdown L'API a été supprimée dans elasticsearch 2.x.

Quelques options :

  • Dans votre terminal (en mode dev essentiellement), tapez simplement "Ctrl-C".

  • Si vous l'avez démarré en tant que démon ( -d ) trouver le PID et tuer le processus : SIGTERM fermera Elasticsearch proprement ( kill -15 PID )

  • Si vous l'exécutez en tant que service, exécutez quelque chose comme service elasticsearch stop :

Réponse précédente. Il est maintenant déprécié depuis la version 1.6.

Ouais. Voir admin cluster nodes shutdown documentation

En gros :

# Shutdown local node
$ curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'

# Shutdown all nodes in the cluster
$ curl -XPOST 'http://localhost:9200/_shutdown'

26voto

Ijaz Ahmad Khan Points 3236

Si vous voulez simplement appliquer une nouvelle configuration, vous n'avez pas besoin de l'arrêter.

$ sudo service elasticsearch restart

Mais si vous voulez l'éteindre quand même :

$ sudo service elasticsearch stop

OU

$ sudo systemctl stop elasticsearch.service

$ sudo systemctl restart elasticsearch.service

Docker :

docker restart <elasticsearch-container-name or id>

17voto

mnishiguchi Points 1271

Cela fonctionne pour moi sur OSX.

pkill -f elasticsearch

10voto

bugsbunny Points 119

Arrêter le service et tuer le démon sont en effet les manières correctes d'arrêter un nœud. Cependant, il n'est pas recommandé de le faire directement si vous voulez arrêter un nœud pour la maintenance. En effet, si vous n'avez pas de répliques, vous perdrez des données.

Lorsque vous arrêtez directement un nœud, Elasticsearch attendra 1m (temps par défaut) pour qu'il se remette en ligne. Si ce n'est pas le cas, il commencera à allouer les shards de ce nœud à d'autres nœuds, ce qui gaspille beaucoup d'IO.

Une approche typique serait de désactiver temporairement l'allocation de shard en émettant :

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "none"
  }
}

Maintenant, lorsque vous arrêtez un nœud, ES n'essaiera pas d'allouer des tessons de ce nœud à d'autres nœuds et vous pouvez effectuer votre activité de maintenance, puis une fois le nœud en place, vous pouvez réactiver l'allocation de tessons :

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}

Source : https://www.elastic.co/guide/en/elasticsearch/reference/5.5/restart-upgrade.html

Si vous n'avez pas de répliques pour tous vos index, l'exécution de ce type d'activité entraînera des temps d'arrêt sur certains index. Une manière plus propre dans ce cas serait de migrer tous les shards vers d'autres nœuds avant de mettre le nœud hors service :

PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
  }
}

Cela va déplacer tous les tessons de 10.0.0.1 aux autres nœuds (cela prendra du temps en fonction des données). Une fois que tout est fait, vous pouvez tuer le nœud, effectuer la maintenance et le remettre en ligne. Cette opération est plus lente et n'est pas nécessaire si vous avez des répliques.

(Au lieu de _ip, _id, _name avec des caractères génériques fonctionnera très bien).

Plus d'informations : https://www.elastic.co/guide/en/elasticsearch/reference/5.5/allocation-filtering.html

D'autres réponses ont expliqué comment tuer un processus.

5voto

MarsAndBack Points 2030

Pour les utilisateurs de Mac utilisant Homebrew (Brassage) pour installer et gérer les services :

Dressez la liste de vos services de brasserie :

brew services

Faites quelque chose avec un service :

brew services start elasticsearch-full
brew services restart elasticsearch-full
brew services stop elasticsearch-full

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X