# Повреждение данных

> Повреждение и восстановление данных etcd

---

Индекс LLMS: [llms.txt](/ru/llms.txt)

---

В etcd встроено автоматическое обнаружение повреждения данных, предотвращающее расхождение состояния участников.

## Включение обнаружения повреждения данных {#enabling-data-corruption-detection}

Повреждение данных можно обнаруживать с помощью:

* Начальной проверки, включаемой флагом `--experimental-initial-corrupt-check`.
* Периодической проверки:
  * Хеша сжатой ревизии, включаемой флагом `--experimental-compact-hash-check-enabled`.
  * Хеша последней ревизии, включаемой флагом `--experimental-corrupt-check-time`.

Начальная проверка выполняется при начальной инициализации участника etcd.
Участник сравнивает своё постоянное состояние с другими участниками и завершает работу при несовпадении.

Обе периодические проверки выполняются лидером уже работающего кластера.
Лидер сравнивает своё постоянное состояние с другими участниками и при несовпадении подаёт аварийный сигнал CORRUPT.
Обе проверки решают одну задачу, однако для баланса между производительностью и временем обнаружения стоит включить обе.

* Проверка хеша сжатой ревизии — требует регулярной компактизации, имеет минимальную стоимость и работает с медленными последователями.
* Проверка хеша последней ревизии — имеет высокую стоимость и не работает с медленными последователями или частой компактизацией.

### Проверка хеша сжатой ревизии {#compacted-revision-hash-check}

Если проверка включена флагом `--experimental-compact-hash-check-enabled`, она выполняется раз в минуту.
Период можно изменить флагом `--experimental-compact-hash-check-time` в формате: `1m` — раз в минуту, `1h` — раз в час.
Проверка расширяет компактизацию вычислением контрольной суммы, которую можно сравнить между участниками кластера.
Дополнительное сканирование базы данных не выполняется, поэтому стоимость проверки очень мала, но кластеру требуется регулярная компактизация.

### Проверка хеша последней ревизии {#latest-revision-hash-check}

Проверка включается флагом `--experimental-corrupt-check-time`; необходимо указать период выполнения в формате: `1m` — раз в минуту, `1h` — раз в час.
Из-за высокой стоимости рекомендуется период в несколько часов.
Для проверки вычисляется контрольная сумма путём сканирования всего содержимого etcd на заданной ревизии.

## Восстановление повреждённого участника {#restoring-a-corrupted-member}

Повреждённого участника можно восстановить тремя способами:

* Очистить постоянное состояние участника
* Заменить участника
* Восстановить весь кластер

После восстановления повреждённого участника аварийный сигнал CORRUPT можно удалить.

### Очистка постоянного состояния участника {#purge-member-persistent-state}

Состояние участника можно очистить следующим образом:

1. Остановите экземпляр etcd.
2. Создайте резервную копию каталога данных etcd.
3. Переместите подкаталог `snap` из каталога данных etcd.
6. Запустите `etcd` с `--initial-cluster-state=existing` и списком участников кластера в `--initial-cluster`.

После этого участник etcd должен загрузить актуальный снимок у лидера.

### Замена участника {#replace-member}

Участника можно заменить следующим образом:

1. Остановите экземпляр etcd.
2. Создайте резервную копию каталога данных etcd.
3. Удалите каталог данных.
4. Удалите участника из кластера командой `etcdctl member remove`.
5. Добавьте его обратно командой `etcdctl member add`.
6. Запустите `etcd` с `--initial-cluster-state=existing` и списком участников кластера в `--initial-cluster`.

### Восстановление всего кластера {#restore-whole-cluster}

Кластер можно восстановить, сохранив снимок текущего лидера и восстановив его на всех участниках.
Выполните `etcdctl snapshot save` для лидера и следуйте [процедуре восстановления кластера](/ru/docs/etcd/op-guide/recovery/).
