Подтвердить что ты не робот

Как обновить исполняемый экземпляр Elasticsearch до более новой версии?

По существу я не могу найти документы или ресурсы, которые объясняют процедуру обновления исполняемого экземпляра Elasticsearch в текущей версии.

Пожалуйста, помогите мне в нескольких сценариях:

  • Если я запускаю экземпляр Elasticsearch на одном сервере, как это сделать Я обновляю экземпляр и не теряю данные?

  • Если я запускаю несколько экземпляров Elasticsearch на нескольких серверах, как я могу продолжать выполнять свои операции, а я обновляю экземпляры Elasticsearch без потери данных?

Если есть правильные процедуры или объяснения по этому поводу, это очень поможет моему пониманию и работе. Спасибо!

4b9b3361

Ответ 1

  • Все данные node хранятся в каталоге данных elasticsearch. Это данные/имя_группы/узлы по умолчанию в доме elasticsearch. Таким образом, в общем случае, пока каталог данных сохраняется, а файлы конфигурации в новой версии совместимы со старой версией, новый экземпляр должен иметь те же данные, что и старый. Обратите внимание, что в некоторых выпусках есть специальные дополнительные требования, описанные в примечания к выпуску. Например, обновление до 0,19 с 0,18 требует выдачи полного сброса всех индексов в кластере.

  • На самом деле нет хорошего способа добиться этого. Узлы обмениваются данными, используя двоичный протокол, который не поддерживает обратную совместимость. Итак, если изменяется протокол в новой версии, старые узлы и новые узлы не могут понять друг друга. Иногда возможно смешивать узлы с различными второстепенными версиями в пределах одного кластера и выполнять скользящее обновление. Однако, насколько я понимаю, нет явной гарантии совместимости между узлами даже в небольших версиях, а для основных выпусков всегда требуется полный перезапуск кластера. Если время простоя при полном перезапуске кластера не является опцией, хороший метод DrTech может быть решением.

Ответ 2

В настоящее время существует больше информации об обновлении ElasticSearch, чем раньше.

Вот мои обычные шаги при обновлении ElasticSearch:

Основная идея заключается в том, что вы закрываете один экземпляр кластера ES за раз, обновляете версию ES в этом экземпляре node и возвращаете его снова, чтобы он мог присоединиться к кластеру.

Вкратце, вот важные шаги:

  • Отключить перераспределение осколков

    curl -XPUT localhost: 9200/_cluster/settings -d '{      "переходный": {          "cluster.routing.allocation.enable": "none"     } } '

  • Выключение экземпляра:

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

  • Установите новую версию ElasticSearch на хост и запустите ее.

  • Разрешить перераспределение осколков:

    curl -XPUT localhost: 9200/_cluster/settings -d '{      "переходный": {          "cluster.routing.allocation.enable": "all"     } } '

  • Наблюдайте, как кластер переходит из состояния yellow в green с помощью:

curl -X GET http://localhost:9200/_cat/health?v//контролирует состояние кластеров

curl -X GET http://localhost:9200/_cat/nodes?v//убедитесь, что новый node присоединился к кластеру

curl -X GET http://localhost:9200/_cat/shards?v//см. начало, инициализацию и перемещение осколков

  1. Повторите для следующего node.

В терминах заказа обновите сначала мастер-узлы, затем узлы данных, затем загрузите балансировку/узлы клиента.

Ответ 4

Другие ответы немного устарели, исходя из того, что существует в настоящее время, поэтому эта новая информация будет дополнять обновление более новых версий Elasticsearch, например обновление 6.x до 7.x или 5.x до 6.x. Существует два основных варианта обновления Elasticsearch: непрерывное обновление или полный перезапуск кластера.

Скользящее обновление позволяет обновлять узлы по одному, чтобы обслуживание не прерывалось. С другой стороны, для полного перезапуска кластера необходимо, чтобы каждый узел был выключен, обновлен и затем восстановлен. Это означает, что между обновлениями должно быть время простоя, которое необходимо учитывать.

Это гораздо проще сделать по сравнению с несколькими годами назад, когда единственным жизнеспособным вариантом был снимок & восстановить.

Ответ 5

Если вы используете Linux под управлением Ubuntu или Debian, вот Ansible script выполняет скользящее обновление, если вы не обновляете основные версии.

Незначительные версии, такие как 1.3 → 1.4.3, в порядке

Основные версии, такие как 0.8 → 1.4.3, не будут работать.

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

Он легко может быть изменен для работы с Linux на основе RHEL (всего 2 строки для изменения)