Аварийное восстановление
Минимальная отказоустойчивая конфигурация Tarantool - это набор реплик, состоящий из мастера и реплики или из двух мастераов. Стандартная практика - настроить все экземпляры Tarantool в наборе реплик на регулярное создание файлов снимков состояния.
Ниже приведены планы действий для типичных сценариев сбоя.
Конфигурация: мастер-реплика (ручное переключение).
Проблема: произошёл сбой мастера.
Действия:
- Убедитесь, что мастер остановлен. Например, войдите на машину мастера и выполните команду
tt stop. - Назначьте нового лидера набора реплик с помощью параметра <replicaset_name>.leader.
- Перезагрузите конфигурацию на всех экземплярах с помощью функции config:reload().
- Убедитесь, что новый лидер набора реплик является мастером, с помощью функции box.info.ro.
- На новом мастере
удалите вышедший из строя экземпляр из спейса
_cluster. - Настройте замену вышедшему из строя мастеру на резервной машине.
См. также раздел Выполнение ручного переключения при сбое.
Конфигурация: мастер-реплика (автоматическое переключение).
Проблема: произошёл сбой мастера.
Действия:
- Используйте функцию
box.info.election, чтобы убедиться, что новый мастер выбран автоматически. - На новом мастере
удалите вышедший из строя экземпляр из спейса
_cluster. - Настройте замену вышедшему из строя мастеру на резервной машине.
См. также раздел Тестирование автоматического отказоустойчивого режима.
Конфигурация: мастер-реплика.
Проблема: после сбоя мастера на реплике отсутствуют некоторые транзакции.
Действия:
Несколько транзакций из
файла журнала упреждающей записи (write-ahead log, WAL)
мастера могли не передаться на реплику до сбоя. Если удалось сохранить файл .xlog мастера, эти транзакции можно восстановить.
-
Узнайте UUID экземпляра из файла xlog вышедшего из строя мастера:
$ head -5 var/lib/instance001/*.xlog | grep InstanceInstance: 9bb111c2-3ff5-36a7-00f4-2b9a573ea660 -
На новом мастере используйте UUID, чтобы определить позицию:
app:instance002> box.info.vclock[box.space._cluster.index.uuid:select{'9bb111c2-3ff5-36a7-00f4-2b9a573ea660'}[1][1]]---- 999... -
Воспроизведите записи из файла
.xlogвышедшего из строя мастера на новом мастере, начиная с позиции нового мастера:$ tt play 127.0.0.1:3302 var/lib/instance001/00000000000000000000.xlog \--from 1000 \--replica 1 \--username admin --password secret
Конфигурация: мастер-мастер.
Проблема: произошёл сбой одного мастера.
Действия:
- Обеспечьте обработку нагрузки оставшимся мастером.
- Удалите вышедший из строя мастер из набора реплик.
- Настройте замену вышедшему из строя мастеру на резервной машине. Подробнее см. добавление и удаление экземпляров.
Конфигурация: мастер-реплика или мастер-мастер.
Проблема: данные были удалены на одном мастере, и потеря данных распространилась на другой узел (мастер или реплику).
Действия:
-
Переведите все узлы в режим только для чтения. В зависимости от режима replication.failover, это можно сделать следующим образом:
- В режиме
manual: укажитеnullв качестве лидера набора реплик. - В режиме
election: задайте значениеvoterилиoffдля параметра replication.election_mode на уровне набора реплик. - В режиме
off: задайте значениеroдля параметраdatabase.mode.
Перезагрузите конфигурацию на всех экземплярах с помощью функции
reload()из модуля config. - В режиме
-
Отключите удаление устаревших контрольных точек с помощью функции box.backup.start(). Это предотвратит удаление сборщиком мусора Tarantool файлов, созданных на старых контрольных точках, до вызова функции box.backup.stop().
-
Получите последний корректный файл .snap и используйте команду
tt catдля определения LSN, на котором произошла потеря данных. -
Запустите новый экземпляр и используйте команду tt play для воспроизведения на нем содержимого файлов
.snapи.xlogдо вычисленного LSN. -
Выполните начальную загрузку новой реплики с восстановленного мастера.