Перезапуск кластеров YDB, развёрнутых с помощью Ansible
Кластеры YDB обеспечивают высокие гарантии доступности; поэтому необходимо учитывать модель отказоустойчивости кластера во время любого технического обслуживания, включая перезапуск кластера. Существует два типа узлов, которые могут потребовать перезапуска:
- Database узлы (также известные как динамические) не сохраняют состояние; поэтому основное внимание стоит уделять тому, чтобы их было достаточно для обработки нагрузки каждой базы данных. Обычно для динамических узлов достаточно простого поэтапного перезапуска с небольшими задержками.
- Storage узлы (также известные как статические) имеют персистентное состояние и отвечают за безопасное хранение данных. Поэтому они требуют особого обращения для обеспечения доступности данных. Каждый кластер YDB имеет выделенный компонент, который отслеживает все сбои и обслуживание и может определить, безопасно ли сейчас остановить или перезапустить конкретный узел. Поэтому важно запрашивать у него разрешение на каждую операцию, а полный перезапуск узлов хранения часто занимает некоторое время.
Перезапуск через Ansible playbook
Репозиторий ydb-ansible содержит playbook под названием ydb_platform.ydb.restart
, который можно использовать для перезапуска кластера YDB. Запускайте его из той же директории, которая использовалась для изначального развёртывания.
Перезапуск всех узлов
По умолчанию ydb_platform.ydb.restart
перезапускает все узлы кластера. Сначала идут статические узлы, затем динамические. Команда для его запуска:
ansible-playbook ydb_platform.ydb.restart
Фильтр по типу узлов
Задачи в playbook ydb_platform.ydb.restart
помечены типами узлов, поэтому вы можете использовать функциональность тегов Ansible для фильтрации узлов по их типу.
Эти две команды эквивалентны и перезапустят все узлы хранения:
ansible-playbook ydb_platform.ydb.restart --tags storage
ansible-playbook ydb_platform.ydb.restart --tags static
Эти две команды эквивалентны и перезапустят все узлы баз данных:
ansible-playbook ydb_platform.ydb.restart --tags database
ansible-playbook ydb_platform.ydb.restart --tags dynamic
Фильтр по имени хоста
Чтобы перезапустить конкретный хост или подмножество хостов, используйте аргумент --limit
:
ansible-playbook ydb_platform.ydb.restart --limit='<hostname>'
ansible-playbook ydb_platform.ydb.restart --limit='<hostname-1,hostname-2>'
Его можно использовать и вместе с тегами:
ansible-playbook ydb_platform.ydb.restart --tags database --limit='<hostname>'
Перезапуск узлов вручную
Инструмент ydbops реализует различные манипуляции с кластерами YDB, включая перезапуск. Описанный выше playbook ydb_platform.ydb.restart
использует его за сценой, но использование его вручную тоже допустимо.
Больше рекомендаций и информации о том, как это работает, находится в статье Обслуживание кластера без потери доступности.