Выполнение перезапуска кластера YDB с помощью ydbops
Примечание
Утилита ydbops
находится в активной разработке. В редких случаях обратная совместимость может быть нарушена.
ydbops
можно использовать для выполнения перезагрузки кластера: перезапуска всех или некоторых узлов кластера YDB при сохранении доступности кластера. Почему это не тривиально и требует специальной утилиты, объясняется в статье про обслуживание кластера без потери доступности.
Подкоманда, ответственная за эту операцию, — ydbops restart
.
Общий алгоритм
Существует ряд опций для ydbops restart
, которые действуют как фильтры. Фильтры неявно соединены логическим «и», то есть при указании нескольких фильтров будут выбраны только те узлы, которые удовлетворяют всем из них одновременно. Следовательно, при отсутствии фильтров перезапускаются все узлы.
Существуют два особых фильтра, которые являются исключением из этого правила: --storage
и --tenant
:
- Указание только
--storage
фильтрует только storage-узлы. - Указание только
--tenant
фильтрует только tenant-узлы. - Указание обоих фильтров выбирает все узлы, что эквивалентно отсутствию этих двух фильтров.
Алгоритм всегда работает в две фазы:
- Сначала он определяет, соответствуют ли какие-либо storage-узлы условиям перезапуска, и перезапускает только эти узлы.
- После того, как все storage-узлы были перезапущены (или ни один из storage-узлов не подошёл под условия фильтрации), процесс повторяется для tenant-узлов.
Примеры
Следующие примеры предполагают, что необходимые параметры подключения указаны (такие как --endpoint
или аутентификационные опции).
Перезапуск всех узлов в кластере
Следующая команда перезапустит все узлы в кластере: сначала storage-узлы, а затем tenant-узлы.
ydbops restart
Перезапуск только storage-узлов или tenant-узлов
Можно перезапустить только storage-узлы:
ydbops restart --storage
Или только tenant-узлы:
ydbops restart --tenant
Можно перезапустить только узлы определенных tenant-ов, указав --tenant-list
:
ydbops restart --tenant-list=</domain/database_name_1>,</domain/database_name_2>,...
Перезапуск только определённых узлов
Можно перезапустить узлы только на определённых хостах, указав FQDN с помощью опции --hosts
:
ydbops restart --hosts=<node1.some.zone>,<node2.some.zone>
Или указав идентификаторы узлов напрямую:
ydbops restart --hosts=1,2,3
Перезапуск по времени работы узла
Можно перезапустить только узлы, которые имеют определённое время работы, используя опцию --started
.
Аргумент опции должен быть заключён в кавычки, иначе shell может интерпретировать >
или <
как перенаправление ввода/вывода. См. пример:
ydbops restart --started '>2024-03-13T17:00:00Z'
Например, это может быть удобно для перезапуска только тех узлов, которые работают более нескольких минут, так как остальные уже перезапустились.
Перезапуск по версии YDB на узлах
Можно перезапустить только те узлы, версия которых равна (==
), не равна (!=
), больше (>
) или меньше (<
) желаемой.
Аргумент опции должен быть заключён в кавычки, иначе shell может интерпретировать >
или <
как перенаправление ввода/вывода. См. пример:
ydbops restart --version '>24.1.2'
ydbops restart --version '<24.1.2'
ydbops restart --version '!=24.1.2'
ydbops restart --version '==24.1.2'
Хотфикс-версии (например, ydb-stable-24-1-14-hotfix-9
) имеют те же основные, минорные и патч-номера, что и соответствующая не-хотфикс версия 24.1.14
.
Например, версия ydb-stable-24-1-14-hotfix-9
в операциях сравнения будет идентична версии ydb-stable-24-1-14
.