Восстановление после сбоя

Если при старте сервера недоступен ZooKeeper, реплицируемые таблицы переходят в режим "только для чтения". Система будет пытаться периодически установить соединение с ZooKeeper.
Если при INSERT недоступен ZooKeeper или происходит ошибка при взаимодействии с ним, результатом INSERT будет исключение.
При подключении к ZooKeeper система проверяет соответствие между имеющимся в локальной файловой системе набором данных и ожидаемым набором данных, информация о котором хранится в ZooKeeper. Если имеются несоответствия, то система устраняет их, синхронизируя данные с реплик.
Обнаруженные испорченные части данных (с файлами несоответствующего размера) или неизвестные части (части данных, записанные в файловую систему, но информация о которых не была записана в ZooKeeper) переносятся в поддиректорию detached (не удаляются). Недостающие части данных скачиваются с реплик.
При старте сервера (или создании новой сессии с ZooKeeper) проверяется только количество и размеры всех файлов. Если у файлов совпадают размеры, но изменены байты в середине, то это обнаруживается не сразу, а только при попытке их прочитать при каком-либо запросе SELECT. Запрос выдаст исключение о несоответствующей чек-сумме или размере сжатого блока. В этом случае части данных добавляются в очередь на проверку, и при необходимости, скачиваются с реплик.
Если обнаруживается, что локальный набор данных слишком сильно отличается от ожидаемого, то срабатывает защитный механизм. Сервер сообщает об этом в лог и запуск не производится. Подобные случаи могут свидетельствовать об ошибке конфигурации - например, если реплика одного шарда была ненамеренно сконфигурирована, как реплика другого шарда. Тем не менее, пороги защитного механизма поставлены довольно низкими, и такая ситуация может возникнуть и при обычном восстановлении после сбоя. В этом случае восстановление делается полуавтоматически - «по кнопке».
Для запуска восстановления создайте в ZooKeeper узел /path_to_table/replica_name/flags/force_restore_data с любым содержимым или выполните команду для восстановления всех реплицируемых таблиц:
$ sudo -u Clickhouse touch /var/lib/Clickhouse/flags/force_restore_data
Затем запустите сервер. При старте сервер удалит эти флаги и запустит восстановление.
Предыдущий раздел
Создание реплицируемых таблиц
Следующий раздел
Нагрузочное тестирование
Была ли страница полезной?