Перезапуск узлов в распределенных системах, таких как OpenSearch, всегда сопряжен с определенными трудностями, поскольку в большинстве случаев на этих распределенных системах работает служба, и вам необходимо поддерживать кластер в рабочем состоянии, одновременно изменяя конфигурацию узлов. Безопасное изменение конфигурации при сохранении доступности кластера сопряжено с определенными трудностями. В этом руководстве мы рассмотрим эти проблемы и способы их решения.
Что такое скользящий перезапуск?
Скользящие перезапуски актуальны для распределенных приложений. Большинство распределенных приложений создаются для того, чтобы избежать простоев. Исходя из этого подхода, нам необходимо решение для загрузки изменений конфигурации в распределенные приложения, пока все узлы работают.
Скользящий перезапуск позволяет загружать новые конфигурации, узел за узлом, без потери высокой доступности распределенных систем, в данном случае OpenSearch.
Разница между полным перезапуском кластера и скользящим перезапуском
Полный перезапуск кластера - это когда мы останавливаем все узлы сразу. При скользящем перезапуске мы останавливаем узлы по одному и изменяем нужные нам конфигурации, избегая простоя кластера.
Механизм перезапуска в кластерах OpenSearch
Прежде всего, следует помнить, что когда один узел OpenSearch прекращает работу, будь то намеренно или случайно (авария), OpenSearch начнет восстанавливать данные этого узла с других узлов по истечении минуты. Это означает, что если за этот промежуток времени разбитый узел не восстановится, начнется процесс восстановления данных. OpenSearch спроектирован таким образом, чтобы не иметь никаких SPOF (Single Point of Failure). Такое поведение обеспечивает высокую доступность кластеров OpenSearch.
Как перезапустить узлы без проблем
При выполнении всех шагов помните, что при изменении конфигурации на уровне кластера мы должны обязательно вернуть ее к значениям по умолчанию, чтобы поддерживать высокую доступность кластера.
Вы можете внести изменения в конфигурацию и подготовить кластер к перезапуску, используя следующие настройки:
- Настроить таймаут node_left
- Отключить распределение шардов
Как перезапустить узлы без проблем
- Настройка таймаута "node_left"
- Отключить распределение шардов
- Измените конфигурацию по мере необходимости
- Перезапустите узел OpenSearch
- Сбросьте настройки по умолчанию
- Повторите шаги
Настройка таймаута "node_left"
По умолчанию этот параметр установлен на 1 минуту, что означает, что если какой-либо узел OpenSearch покинет кластер по какой-либо причине (сетевые проблемы, ручной перезапуск...) более чем на 1 минуту, кластер будет считать узел потерянным и начнет процесс восстановления данных с других доступных узлов и понесет ненужные расходы на передачу данных.
Избежать подобной проблемы можно, изменив параметр node_left на уровне кластера. Изменение параметра конфигурации node_left с 1 минуты до 5 минут обычно дает достаточно времени для перезапуска узла. Кластер будет ждать 5 минут, пока узел снова присоединится к кластеру, что даст вам время для перезапуска при необходимости.
Для изменения параметра node_left можно использовать эту команду:
1 2 3 4 5 6 | PUT _all/_settings { "settings": { "index.unassigned.node_left.delayed_timeout": "5m" } } |
Примечание: вы можете использовать любые временные единицы, которые вам нужны.
Отключение выделения шардов
Отключение выделения шардов - это еще одна настройка, которую необходимо выполнить перед запуском любых процессов перезапуска в кластере.
Если вы не отключите выделение шарда и ваш узел не вернется в кластер в течение выбранного параметра времени, выделение шарда - это процесс, который начнет восстанавливать данные потерянного узла. Отключение выделения шардов - это просто отключение следующего шага процесса, чтобы не произошло нежелательного выделения шардов.
После применения изменений конфигурации и перезапуска узлов не забудьте вернуть все настройки в исходное состояние, чтобы не испортить доступность данных.
Примечание: статус вашего кластера OpenSearch может измениться с зеленого на красный или желтый из-за неназначенных шардов, если начнется процесс выделения шардов.
Вы можете использовать эту команду, чтобы отключить распределение:
1 2 3 4 5 6 | PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "none" } } |
Статус OpenSearch
Вот статусы кластеров, с которыми вы можете столкнуться:
- Не назначенные первичные шарды = Красный статус
- Не назначенные шарды реплик = Желтый статус
- Все назначенные шарды = Зеленый статус
Измените конфигурацию по мере необходимости
На этом шаге вы можете изменить любую необходимую опцию в файле opensearch.yml, например добавить репозитории или любые другие параметры. Важно быть осторожным с изменениями конфигурации, чтобы убедиться, что они не приведут к сбою в запуске узла.
Вы можете проверять журнал OpenSearch при каждом перезапуске службы, чтобы убедиться, что все в порядке:
1 | /var/log/opensearch/opensearch.log |
Перезапустите узел OpenSearch
После выполнения описанных выше шагов вы можете перезапустить узел OpenSearch, чтобы перезагрузить новую конфигурацию.
1 | systemctl start opensearch |
Сброс настроек по умолчанию
Всякий раз, когда мы изменяем конфигурацию на уровне кластера, мы должны обязательно вернуть ее к значениям по умолчанию, чтобы обеспечить высокую доступность кластера OpenSearch. После успешного перезапуска узла OpenSearch вы можете вернуть все конфигурации к значениям по умолчанию.
Сбросьте конфигурации, как показано ниже:
1 2 3 4 5 6 | PUT _all/_settings { "settings": { "index.unassigned.node_left.delayed_timeout": null } } |
1 2 3 4 5 6 | PUT _cluster/settings { "persistent": { "cluster.routing.allocation.enable": "all" } } |
Повторите шаги
Повторите их при необходимости, чтобы изменить конфигурацию других узлов.