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.