- Что такое снимки и где их найти
- Как проявляется проблема
- Возможные стратегии восстановления и что означает каждая из них
Обзор снимков Keeper
Что такое снимок?
Где найти снимки?
/var/lib/clickhouse/coordination/snapshots/ либо по пользовательскому пути, заданному параметром snapshot_storage_path в файле keeper_server.xml. Снимки именуются последовательно (например, snapshot.23): чем новее снимок, тем больше его номер.
В многоузловых кластерах у каждого узла Keeper есть свой каталог снимков.
Для восстановления критически важно, чтобы снимки на разных узлах были согласованными.
Основные симптомы и проявления поврежденных снимков Keeper
Признаки в журналах:
Прежде чем диагностировать повреждение снимка, проверьте журналы Keeper на наличие характерных шаблонов ошибок:
Восстановление после повреждения снимков Keeper
- Остановите все узлы Keeper, чтобы предотвратить дальнейшее повреждение данных
- Сделайте резервную копию всего содержимого, скопировав весь каталог coordination в безопасное место
- Проверьте кворум кластера, чтобы убедиться, что хотя бы на одном узле сохранились корректные данные
1. Восстановление из существующей резервной копии
- Повреждение метаданных Keeper или снимков делает текущие данные невосстановимыми.
- Существует резервная копия с заведомо корректным состоянием Keeper.
- Найдите и проверьте самую новую резервную копию на согласованность метаданных.
- Остановите сервисы ClickHouse и Keeper.
- Замените повреждённые снимки и журналы версиями из каталога резервной копии.
- Перезапустите кластер Keeper и проверьте синхронизацию метаданных.
2. Откат к более старому снимку
- Недавние снимки повреждены, но более старые всё ещё пригодны к использованию.
- Инкрементальные журналы не повреждены, что позволяет выполнить согласованное восстановление.
- Найдите и выберите корректный старый снимок (например, snapshot.19) в каталоге Keeper.
- Удалите более новые снимки и журналы.
- Перезапустите Keeper, чтобы он заново воспроизвёл журналы и восстановил состояние метаданных.
3. Восстановление метаданных с помощью SYSTEM RESTORE REPLICA
- метаданные Keeper утрачены или повреждены, но данные таблицы по-прежнему есть на диске
- таблицы перешли в режим только для чтения из-за отсутствия метаданных ZooKeeper/Keeper
- вам нужно заново создать метаданные в Keeper на основе локально доступных частей данных
-
Убедитесь, что данные таблицы локально присутствуют в пути к данным вашего clickhouse-server, заданном параметром
<path>в конфигурации. (по умолчанию/var/lib/clickhouse/data/) - Для каждой затронутой таблицы выполните:
- Для восстановления на уровне базы данных (если используется движок базы данных Replicated):
- Дождитесь завершения синхронизации:
- Проверьте восстановление: убедитесь, что в
system.replicasзначениеis_readonly = 0, и следите заsystem.detached_parts
Как это работает
SYSTEM RESTORE REPLICA отсоединяет все существующие части, заново создает метаданные в Keeper (как будто это новая пустая таблица), а затем снова присоединяет все части. Это позволяет избежать повторной загрузки данных по сети.4. Удаление и повторное создание метаданных реплики в Keeper
- Ошибка возникает только на одной реплике кластера, и её метаданные в Keeper повреждены или несогласованы
- Вы сталкиваетесь с ошибками вида “Part XXXXX intersects previous part YYYYY”
- Вам нужно полностью сбросить метаданные реплики в Keeper, сохранив локальные данные
- На затронутой реплике отсоедините таблицу:
- Удалите метаданные реплики из Keeper (выполните на любой реплике):
- Повторно выполните ATTACH таблицы (она будет в режиме только для чтения):
- Восстановите метаданные реплики:
- Синхронизируйтесь с другими репликами:
- Проверьте
system.detached_partsна всех репликах после восстановления
- Остановите сервер ClickHouse
- Создайте флаг восстановления:
- Запустите сервер ClickHouse
- Сервер автоматически удалит флаг и восстановит все реплицированные таблицы
- Следите за ходом восстановления в журналах
5. Пересборка кластера Keeper
- Для восстановления недоступны пригодные снимки, журналы или резервные копии.
- Необходимо заново создать весь кластер Keeper и его метаданные.
- Полностью остановите кластеры ClickHouse и Keeper.
- Сбросьте каждый узел Keeper, очистив каталоги снимков и журналов.
- Инициализируйте один узел Keeper в качестве лидера и постепенно добавляйте остальные узлы.
- Повторно импортируйте метаданные, если они доступны из внешних записей.