2012-02-29 3 views
35

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 dans la version actuelle.Comment mettre à niveau une ancienne instance Elasticsearch en cours d'exécution vers une version plus récente?

S'il vous plaît, aidez-moi dans quelques scénarios:

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

  2. Si j'exécute plusieurs instances d'Elasticsearch sur un certain nombre de serveurs, comment puis-je continuer à exécuter mes opérations pendant que je mets à jour 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!

Répondre

22
  1. Toutes les données de noeud sont stockées dans le répertoire de données de recherche élastique. C'est data/cluster_name/nodes par défaut dans elasticsearch home. Ainsi, en général, tant que le répertoire de données est préservé 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. S'il vous plaît noter que certaines versions ont des exigences supplémentaires spéciales décrites dans release notes. Par exemple, la mise à niveau vers 0.19 à partir de 0.18 nécessite l'émission d'un vidage complet de tous les indices du cluster.

  2. Il n'y a vraiment aucun moyen d'y parvenir. Les nœuds communiquent en utilisant un protocole binaire qui n'est pas rétrocompatible. Ainsi, si le protocole de la nouvelle version change, les anciens nœuds et les nouveaux nœuds sont incapables de se comprendre. Parfois, il est possible de mélanger des nœuds avec différentes versions mineures au sein d'un même cluster et d'effectuer une mise à niveau progressive. Cependant, d'après ce que je comprends, il n'y a aucune garantie explicite sur la compatibilité entre les nœuds même dans des versions mineures et les versions majeures nécessitent toujours un redémarrage complet du cluster. Si le temps d'indisponibilité pendant le redémarrage complet du cluster n'est pas une option, un nice technique par DrTech pourrait être une solution.

+0

Je vois, donc fondamentalement dans une seule instance d'Elasticsearch dans le répertoire, nous remplaçons simplement les dossiers elasticsearch/bin et elasticsearch/lib, conservons le dossier elasticsearch/data et la nouvelle version de l'instance elasticsearch devrait fonctionner automatiquement sur son posséder? –

+4

Actuellement, il existe également un répertoire de plugin qui peut être important si vous utilisez des plugins. Les prochaines versions d'elasticsearch pourraient ajouter de nouveaux répertoires. Donc, il est peut-être préférable de penser à cela en plaçant les anciens répertoires elasticsearch/data et elasticsearch/config dans la nouvelle installation. La nouvelle instance d'elasticsearch avec les répertoires data et config remplacés mettra automatiquement à jour les données vers la nouvelle version et commencera à fonctionner. Veuillez noter que l'ancienne version d'elasticsearch ne fonctionnera plus avec le répertoire de données mis à jour. – imotov

+0

Merci! Je devine que je compliquais un peu les choses ... –

-1

Si vous utilisez Ubuntu ou Debian basé sur Linux, voici un script Ansible t o Effectuez une mise à niveau progressive, tant que vous ne procédez pas à la mise à niveau entre les versions principales.

versions mineures telles que 1.3 -> 1.4.3 sont ok

versions majeures telles que 0,8 -> 1.4.3 ne fonctionnera pas.

https://github.com/ekhoinc/ansible-examples/blob/master/elasticsearch-rolling-upgrade.yml

Il pourrait facilement être modifié pour fonctionner avec Linux basé RHEL (seulement 2 lignes pour changer)

10

Il y a beaucoup plus d'informations sur ElasticSearch mise à jour ces jours-ci qu'il était.

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

  1. sauvegarde les données: Snapshot and Restore

  2. Guide de mise à niveau: Upgrading ElasticSearch

L'idée principale est que vous arrêtiez un instance du cluster ES à la fois, mettez à niveau la version ES sur ce nœud d'instance et relancez-la afin qu'elle puisse rejoindre le client. ster.

En bref, voici les étapes importantes:

  1. Désactiver Shard réallocation

    boucle -XPUT localhost: 9200/_cluster/paramètres -d « { "transitoire": { "cluster.routing.allocation.enable": "none" }} »

  2. Arrêt de l'instance:

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

  3. installer la nouvelle version ElasticSearch sur l'hôte et démarrer.

  4. Activer tesson réallocation:

    boucle -XPUT localhost: 9200/_cluster/paramètres -d « { "transitoire": { "cluster.routing.allocation.enable": « tous " }} »

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

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

boucle -X GET http://localhost:9200/_cat/nodes?v // vérifiez que le nouveau noeud rejoint le cluster

boucle -X GET http://localhost:9200/_cat/shards?v // voir tessons en cours de démarrage, initialisé et relocalisé

  1. Répétez l'opération pour le noeud suivant.

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

Questions connexes