Повреждение данных
В etcd встроено автоматическое обнаружение повреждения данных, предотвращающее расхождение состояния участников.
Включение обнаружения повреждения данных
Повреждение данных можно обнаруживать с помощью:
- Начальной проверки, включаемой флагом
--experimental-initial-corrupt-check. - Периодической проверки:
- Хеша сжатой ревизии, включаемой флагом
--experimental-compact-hash-check-enabled. - Хеша последней ревизии, включаемой флагом
--experimental-corrupt-check-time.
- Хеша сжатой ревизии, включаемой флагом
Начальная проверка выполняется при начальной инициализации участника etcd. Участник сравнивает своё постоянное состояние с другими участниками и завершает работу при несовпадении.
Обе периодические проверки выполняются лидером уже работающего кластера. Лидер сравнивает своё постоянное состояние с другими участниками и при несовпадении подаёт аварийный сигнал CORRUPT. Обе проверки решают одну задачу, однако для баланса между производительностью и временем обнаружения стоит включить обе.
- Проверка хеша сжатой ревизии — требует регулярной компактизации, имеет минимальную стоимость и работает с медленными последователями.
- Проверка хеша последней ревизии — имеет высокую стоимость и не работает с медленными последователями или частой компактизацией.
Проверка хеша сжатой ревизии
Если проверка включена флагом --experimental-compact-hash-check-enabled, она выполняется раз в минуту.
Период можно изменить флагом --experimental-compact-hash-check-time в формате: 1m — раз в минуту, 1h — раз в час.
Проверка расширяет компактизацию вычислением контрольной суммы, которую можно сравнить между участниками кластера.
Дополнительное сканирование базы данных не выполняется, поэтому стоимость проверки очень мала, но кластеру требуется регулярная компактизация.
Проверка хеша последней ревизии
Проверка включается флагом --experimental-corrupt-check-time; необходимо указать период выполнения в формате: 1m — раз в минуту, 1h — раз в час.
Из-за высокой стоимости рекомендуется период в несколько часов.
Для проверки вычисляется контрольная сумма путём сканирования всего содержимого etcd на заданной ревизии.
Восстановление повреждённого участника
Повреждённого участника можно восстановить тремя способами:
- Очистить постоянное состояние участника
- Заменить участника
- Восстановить весь кластер
После восстановления повреждённого участника аварийный сигнал CORRUPT можно удалить.
Очистка постоянного состояния участника
Состояние участника можно очистить следующим образом:
- Остановите экземпляр etcd.
- Создайте резервную копию каталога данных etcd.
- Переместите подкаталог
snapиз каталога данных etcd. - Запустите
etcdс--initial-cluster-state=existingи списком участников кластера в--initial-cluster.
После этого участник etcd должен загрузить актуальный снимок у лидера.
Замена участника
Участника можно заменить следующим образом:
- Остановите экземпляр etcd.
- Создайте резервную копию каталога данных etcd.
- Удалите каталог данных.
- Удалите участника из кластера командой
etcdctl member remove. - Добавьте его обратно командой
etcdctl member add. - Запустите
etcdс--initial-cluster-state=existingи списком участников кластера в--initial-cluster.
Восстановление всего кластера
Кластер можно восстановить, сохранив снимок текущего лидера и восстановив его на всех участниках.
Выполните etcdctl snapshot save для лидера и следуйте процедуре восстановления кластера
.