Je souhaite redémarrer un nœud elasticsearch avec une nouvelle configuration. Quel est le meilleur moyen de fermer en douceur un nœud?
Tuer le processus est-il le meilleur moyen de fermer le serveur ou existe-t-il une URL magique que je peux utiliser pour fermer le nœud?
Réponse mise à jour.
_shutdown
L'API a été supprimée dans elasticsearch 2.x.
Quelques options:
Dans votre terminal (mode dev essentiellement), tapez simplement "Ctrl-C"
Si vous l'avez démarré en tant que démon (-d
), trouvez le PID et supprimez le processus: SIGTERM
éteindra proprement Elasticsearch (kill -15 PID
)
Si vous utilisez un service, lancez quelque chose comme service elasticsearch stop
:
Réponse précédente. Il est maintenant obsolète à partir de 1.6.
Ouais. Voir Documentation sur l'arrêt des noeuds de cluster admin
Fondamentalement:
# Shutdown local node
$ curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'
# Shutdown all nodes in the cluster
$ curl -XPOST 'http://localhost:9200/_shutdown'
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’arrêter quand même:
$ Sudo service elasticsearch stop
OR
$ Sudo systemctl stop elasticsearch.service
$ Sudo systemctl restart elasticsearch.service
Docker:
docker restart <elasticsearch-container-name or id>
Cela fonctionne pour moi sur OSX.
pkill -f elasticsearch
Le plug-in Head pour Elasticsearch constitue une excellente interface Web pour l’administration d’Elasticsearch, notamment pour la fermeture de nœuds. Il peut également exécuter toutes les commandes Elasticsearch.
L'arrêt du service et la suppression du démon sont les méthodes correctes pour arrêter un nœud. Cependant, il n'est pas recommandé de le faire directement si vous souhaitez supprimer un nœud à des fins de maintenance. En fait, si vous n'avez pas de réplicas, vous perdrez des données.
Lorsque vous arrêtez directement un nœud, Elasticsearch attendra 1 m (heure par défaut) pour qu’il revienne en ligne. Si ce n'est pas le cas, il commencera à allouer les fragments de ce nœud à d'autres nœuds gaspillant beaucoup d'E/S.
Une approche typique consiste à désactiver temporairement l’attribution de partition en émettant:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}
Désormais, lorsque vous supprimez un nœud, ES n'essayera pas d'allouer le fragment de ce nœud à d'autres nœuds et vous pourrez effectuer votre activité de maintenance. Une fois le nœud activé, vous pourrez réactiver l'allocation de fragments:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}
Source: https://www.elastic.co/guide/fr/elasticsearch/reference/5.5/restart-upgrade.html
Si vous n'avez pas de réplicas pour tous vos index, l'exécution de ce type d'activité entraînera une indisponibilité de certains index. Une façon plus simple dans ce cas serait de migrer tous les fragments vers d'autres nœuds avant de le détruire:
PUT _cluster/settings
{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "10.0.0.1"
}
}
Cela déplacera tous les fragments de 10.0.0.1
vers d'autres nœuds (cela prendra du temps en fonction des données). Une fois que tout est terminé, vous pouvez tuer le nœud, effectuer une maintenance et le remettre en ligne. Cette opération est plus lente et n'est pas obligatoire si vous avez des réplicas.
(Au lieu de _ip, _id, _name avec des caractères génériques fonctionnera parfaitement.)
Plus d'informations: https://www.elastic.co/guide/fr/elasticsearch/reference/5.5/allocation-filtering.html
D'autres réponses ont expliqué comment tuer un processus.
Si vous ne trouvez pas quel processus exécute elasticsearch sur la machine Windows, vous pouvez essayer de l'exécuter dans la console:
netstat -a -n -o
Recherchez le port elasticsearch en cours d'exécution, la valeur par défaut est 9200
. La dernière colonne est PID pour le processus utilisant ce port. Vous pouvez l'éteindre avec une simple commande dans la console
taskkill /PID here_goes_PID /F
utilisez la commande suivante pour connaître le pid du noeud en cours d'exécution.
curl -XGET ' http: // localhost: 9200/_nodes/process '
Cela m'a pris une heure pour trouver le moyen de tuer le nœud et pouvais le faire après avoir utilisé cette commande dans la fenêtre du terminal.
Juste au cas où vous voudriez trouver le PID de l'instance et tuer le processus, en supposant que le nœud écoute le port 9300 (le port par défaut), vous pouvez exécuter la commande suivante:
kill -9 $(netstat -nlpt | grep 9300 | cut -d ' ' -f 58 | cut -d '/' -f 1)
Vous devrez peut-être jouer avec les numéros du code mentionné ci-dessus, tels que 58 et 1
Réponse pour Elasticsearch dans Docker:
Il suffit d’arrêter le conteneur Docker. Il semble s’arrêter gracieusement car il enregistre:
[INFO ][o.e.n.Node ] [elastic] stopping ...
Si vous exécutez un nœud sur l'hôte local, utilisez "brew service stop elasticsearch"
Je lance elasticsearch sur iOS localhost.
Considérant que vous avez 3 nœuds.
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
}
}
'
Testé sur Elasticseach 6.5
La source: