Как обновить исполняемый экземпляр Elasticsearch до более новой версии?
По существу я не могу найти документы или ресурсы, которые объясняют процедуру обновления исполняемого экземпляра Elasticsearch в текущей версии.
Пожалуйста, помогите мне в нескольких сценариях:
-
Если я запускаю экземпляр Elasticsearch на одном сервере, как это сделать
Я обновляю экземпляр и не теряю данные?
-
Если я запускаю несколько экземпляров Elasticsearch на нескольких серверах, как я могу продолжать выполнять свои операции, а я обновляю экземпляры Elasticsearch без потери данных?
Если есть правильные процедуры или объяснения по этому поводу, это очень поможет моему пониманию и работе. Спасибо!
Ответы
Ответ 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//см. начало, инициализацию и перемещение осколков
- Повторите для следующего node.
В терминах заказа обновите сначала мастер-узлы, затем узлы данных, затем загрузите балансировку/узлы клиента.
Ответ 3
Следует отметить, что теперь есть документация по этому обновлению, но она не очень сильно оценивает результаты поиска:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-upgrade.html
а также документ с нарушением изменений:
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/breaking-changes.html
Ответ 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 строки для изменения)