web-dev-qa-db-fra.com

Comment mettre à niveau une ancienne instance Elasticsearch en cours d'exécution vers une version plus récente?

Essentiellement, je ne trouve pas de documents ou de ressources qui expliquent la procédure de mise à niveau d'une instance Elasticsearch en cours d'exécution vers la version actuelle.

Veuillez m'aider dans quelques scénarios:

  1. Si j'exécute une instance Elasticsearch sur un seul serveur, comment mettre à niveau l'instance et ne pas perdre de données?

  2. Si j'exécute plusieurs instances Elasticsearch sur un certain nombre de serveurs, comment puis-je continuer à exécuter mes opérations tout en mettant à niveau mes instances Elasticsearch sans perdre de données?

S'il existe des procédures ou des explications appropriées à ce sujet, cela aidera grandement ma compréhension et mon travail. Merci!

36
Jonathan Moo
  1. Toutes les données des nœuds sont stockées dans le répertoire de données elasticsearch. Il s'agit de data/cluster_name/nodes par défaut dans elasticsearch home. Donc, en général, tant que le répertoire de données est conservé et que les fichiers de configuration de la nouvelle version sont compatibles avec l'ancienne version, la nouvelle instance doit avoir les mêmes données que l'ancienne. Veuillez noter que certaines versions ont des exigences supplémentaires spéciales décrites dans notes de version . Par exemple, la mise à niveau de 0.18 à 0.19 nécessite l'émission d'un vidage complet de tous les indices du cluster.

  2. Il n'y a vraiment aucun bon moyen d'y parvenir. Les nœuds communiquent à l'aide d'un protocole binaire qui n'est pas rétrocompatible. Donc, si le protocole change dans la nouvelle version, les anciens nœuds et les nouveaux nœuds ne peuvent pas se comprendre. Parfois, il est possible de mélanger des nœuds avec différentes versions mineures au sein du même cluster et d'effectuer une mise à niveau continue. Cependant, pour autant que je comprends, il n'y a aucune garantie explicite sur la compatibilité entre les nœuds, même dans les versions mineures et les versions majeures nécessitent toujours un redémarrage complet du cluster. Si le temps d'arrêt pendant le redémarrage complet du cluster n'est pas une option, une Nice technique by DrTech pourrait être une solution.

23
imotov

De nos jours, il y a beaucoup plus d'informations sur la mise à niveau d'ElasticSearch qu'auparavant.

Voici mes étapes habituelles lors de la mise à niveau d'ElasticSearch:

  1. Sauvegardez les données: Snapshot and Restore

  2. Guide de mise à niveau: Mise à niveau d'ElasticSearch

L'idée principale est que vous arrêtez une instance du cluster ES à la fois, mettez à niveau la version ES sur ce nœud d'instance et la réactivez pour qu'elle puisse rejoindre le cluster.

En bref, voici les étapes importantes:

  1. Désactiver la réallocation de Shard

    curl -XPUT localhost: 9200/_cluster/settings -d '{"transient": {"cluster.routing.allocation.enable": "none"}}'

  2. Arrêtez l'instance:

    curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'

  3. Installez la nouvelle version d'ElasticSearch sur l'hôte et démarrez-la.

  4. Activer la réallocation des fragments:

    curl -XPUT localhost: 9200/_cluster/settings -d '{"transient": {"cluster.routing.allocation.enable": "all"}}'

  5. Regarder le cluster passer de l'état yellow à green avec:

curl -X GET http: // localhost: 9200/_cat/health? v // surveille l'état du cluster global

curl -X GET http: // localhost: 9200/_cat/nodes? v // vérifier que le nouveau nœud a rejoint le cluster

curl -X GET http: // localhost: 9200/_cat/shards? v // voir les fragments en cours de démarrage, initialisés et déplacés

  1. Répétez l'opération pour le nœud suivant.

En termes de commande, mettez à jour d'abord les nœuds maîtres , puis les nœuds de données, puis les nœuds d'équilibrage de charge/client.

13
Aleš

Il convient de mentionner qu'il existe désormais une documentation sur la mise à niveau, mais elle ne se classe pas très bien dans les résultats de recherche:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-upgrade.html

ainsi qu'un document de changements de rupture:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/breaking-changes.html

7
Seth V

Les autres réponses sont un peu datées en fonction de ce qui existe actuellement, donc ces nouvelles informations complèteront la mise à niveau des versions plus récentes d'Elasticsearch, comme la mise à niveau 6.x vers 7.x, ou 5.x vers 6.x. Il existe deux options principales pour une mise à niveau d'Elasticsearch: mise à niveau progressive ou redémarrage complet du cluster .

La mise à niveau progressive permet aux nœuds d'être mis à niveau un à la fois afin que le service ne soit pas interrompu. D'un autre côté, le redémarrage complet du cluster nécessite que chaque nœud soit arrêté, mis à niveau, puis ramené. Cela signifie qu'il y aura des temps d'arrêt entre les mises à niveau qui doivent être pris en compte.

C'est beaucoup plus facile à faire qu'il y a quelques années, lorsque la seule option viable était un instantané et une restauration.

0
Nick Predey