.. _backup: Бекапирование Компонента «Витрина данных» =========================================== Реализация бекапирования в слое адаптеров Компонента «Витрина данных» ----------------------------------------------------------------------- Работа модулей для обеспечения резервного копирования ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Модули, подлежащие бекапированию, подписываются на топик ``adapter.command`` под одним groupId: ``(имя модуля)_adapter_command`` и создают продюсеров на топики: - ``adapter.status``; - ``adapter.backup``. Все топики размещаются во внутренней kafka ADS. Модули, требующие консистентности с Prostore, дополнительно подписываются на топик ``adapter.command.broadcast`` под уникальными groupId ``(случайными (имя модуля)_(UUID))``. Обработка команды не зависит от топика, через который она получена. Сообщения в топиках команд ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. table:: Сообщения в топиках команд +-----------------------------------------------+-------------------------------+---------------+--------------+ | **Назначение команды** | **Топик** | **Ключ** | **Значение** | +===============================================+===============================+===============+==============+ | Приостановка обработки запросов для модулей, | ``adapter.command.broadcast`` | backup.pause | null | | которым требуется консистентность с Prostore | | | | +-----------------------------------------------+-------------------------------+---------------+--------------+ | Возобновление обработки запросов для модулей, | ``adapter.command.broadcast`` | backup.resume | null | | которым требуется консистентность с Prostore | | | | +-----------------------------------------------+-------------------------------+---------------+--------------+ | Запрос персистированых данных из Zookeeper | ``adapter.command`` | backup.get | backupId | | для резервной копии | | | | +-----------------------------------------------+-------------------------------+---------------+--------------+ | Применение данных резервной копии и запись | ``adapter.command`` | backup.set | null | | персистированных данных в Zookeeper | | | | +-----------------------------------------------+-------------------------------+---------------+--------------+ Статусы модулей ^^^^^^^^^^^^^^^^ Статусы модулей возвращаются через компактный топик ``adapter.status`` Формат сообщения статуса: ключ в формате json (идентификатор вертикла и ключ шаблона присутствуют только для smev3-adapter): .. code-block:: json { "group": "dev.nsud", "name": "smev3-adapter", "version": "4.0.13", "instance": "6f58378a-2205-42c9-80fc-c028ab12a3ba", "backupId": "2228378a-2205-42c9-80fc-c028ab12a222" } значение в формате json: .. code-block:: json { "timestamp": "2023-02-17T12:10:45Z", "status": "started" } Значения статусов ################## .. table:: Значения статусов +-----------------+----------------------------------------------+ | **Статус** | **Описание** | +=================+==============================================+ | started | Работает | +-----------------+----------------------------------------------+ | stopping | Приостановка модуля для бекапирования | +-----------------+----------------------------------------------+ | stopped | Модуль приостановлен для бекапирования | +-----------------+----------------------------------------------+ | restoring | Модуль восстановлен из резервной копии | +-----------------+----------------------------------------------+ | restored | Модуль восстановлен из резервной копии | +-----------------+----------------------------------------------+ | error_restoring | Ошибка восстановления из резервной копии | +-----------------+----------------------------------------------+ | error_stopping | Ошибка приостановки модуля для бекапирования | +-----------------+----------------------------------------------+ Механизм приостановки модулей, требующих консистентности с Prostore -------------------------------------------------------------------- Все экземпляры модулей, требующих консистентности с Prostore подписаны на топик ``adapter.command.broadcast`` с уникальной groupId консьюмера: (имя модуля)_(UUID) groupId. Приостановка модулей, требующих консистентности с Prostore ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Каждый экземпляр модуля считывает команду ``backup.pause`` из топика ``adapter.command.broadcast`` и отправляет статус ``stopping`` в топик ``adapter.status``. 2. В каждом экземпляре модуля выполняется процесс приостановки процессов, влияющих на консистентные с Prostore данные. 3. После остановки всех процессов каждый экземпляр модуля отправляет статус ``stopped`` в топик ``adapter.status``. Восстановление модулей, требующих консистентности с Prostore ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Каждый экземпляр модуля считывает команду backup.resume из топика ``adapter.command.broadcast``. 2. В каждом экземпляре модуля выполняется повторный запуск процессов, влияющих на консистентные с Prostore данные. 3. После остановки всех процессов, каждый экземпляр модуля отправляет статус started в топик ``adapter.status``. Механизм резервного копирования и восстановления из резервной копии в модулях слоя адаптеров --------------------------------------------------------------------------------------------- Модули, данные которых необходимы для резервного копирования: - CSV-Uploader; - REST-Uploader; - SMEV3-adapter; - Counter-provider. Резервное копирование выполняет только один из экземпляров каждого типа модулей, который успел считать сообщение из топика ``adapter.command``. Механизм резервного копирования модулей слоя адаптеров ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ При выполнении резервного копирования все модули, участвующие в бекапировании: 1. Подписаны на топик ``adapter.command`` с общей ``qroupId`` для каждого типа модулей. 2. Один из экземпляров модуля считывает сообщение ``backup.get`` из топика ``adapter.command``. 3. Считывает метаданные, подлежащие бекапированию по пути в Zookeeper, в соответствии с путями хранения в сервисной БД. 4. Возвращает данные через топик ``adapter.backup`` в виде JSON. В ключе сообщения формируются стандартные данные о версии и сборке: .. code-block:: json { "group": "ru.itone.dtm.data.uploader" "name": "data-uploader", "version": "1.1.0-SNAPSHOT", "instance": "6f58378a-2205-42c9-80fc-c028ab12a3ba", "backupId": "2228378a-2205-42c9-80fc-c028ab12a222", "gitCommit": "a7c7770404ef61f62496983b783ef7b442989d74", "dateCommit": "2023-02-17T12:10:45Z", "branchCommit": "develop", "buildDate": "2023-02-17T12:11:36.627Z", "buildUnixTime": "1676635896" } В значении сообщения размещаются перситируемые данные, пример для модуля counter-provider. .. code-block:: json { "path":"/dev/counter-provider", "value":"test_data", "children":[ { "path":"/dev/counter-provider/child2", "value":"", "children":[] }, { "path":"/dev/counter-provider/child1", "value":"child1_data", "children":[] } ] } Механизм восстановления из резервной копии модулей слоя адаптеров ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ При выполнении резервного копирования все модули, участвующие в восстановлении из резервной копии: 1. Подписаны на топик ``adapter.command`` с общей qroupId для каждого типа модулей. 2. Один из экземпляров модуля считывает сообщение ``backup.set`` из топика ``adapter.command``. 3. Отправляют статус ``restoring`` в топик ``adapter.status``. 4. Удаляют данные по пути хранения метаданных в соответствии с путями хранения в сервисной БД. 5. Разбирают сообщения в топике ``adapter.backup``: сначала фильтруют данные, относящиеся к модулю. 6. Записывают данные в сервисную БД. 7. Отправляют статус ``restored`` в топик ``adapter.status``. Поведение в случае ошибок при выполнении резервного копирования --------------------------------------------------------------- В случае если ошибки возникли в процессе восстановления из резервной копии, стоит обратить внимание на тот факт, что в этом случае Компонент «Витрина данных» будет находится в не консистентном состоянии, требуется оперативный разбор ошибок и повторное восстановление из резервной копии. Ошибки резервного копирования и восстановления из резервной копии ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ошибки, возможные в процессе резервного копирования/восстановления из резервной копии, и пути их устранения приведены ниже (см. :numref:`backup_error`) .. _backup_error: .. table:: Ошибки резервного копирования и восстановления из резервной копии +------------------------------+---------------------------------------------------+------------------------------------------------------------+-----------------------------------+ | **Ошибка** | **Описание ошибки** | **Действия утилиты Backup Manager** | **Устранение ошибки** | +==============================+===================================================+============================================================+===================================+ | "Observed active | Не удален файл ``backup.lock`` | - завершает процесс бекапирования/ восстановления | Может возникать при прерванной | | backupManager process, | | с выводом ошибки "Observed active backupManager process, | работе утилиты, требуется | | file backup.lock exists" | | file backup.lock exists"; | ручное удаление файла | | | | | | | | | - выводит финальный статус: ``BACKUP/RESTORE is failed`` | | +------------------------------+---------------------------------------------------+------------------------------------------------------------+-----------------------------------+ | "Error stopping (module) | Ошибка приостановки одного из инстансов модулей, | - отправляет команду ``backup.resume`` на восстановление | Требуется анализ логов модуля, | | (instanse) (verticle) (key), | требующих консистентности с Prostore | работы модулей в топик ``adapter.command.broadcast`` без | в котором возникла ошибка, после | | see modul log for detail" | | ожидания статусов о восстановлении; | ее устранения, повтор процесса | | | | | бекапирования/восстановления | | | | - завершает процесс бекапирования/ восстановления с | | | | | выводом ошибки "error stopping (module) (instanse) | | | | | (verticle) (key), see modul log for detail"; | | | | | | | | | | - выводит финальный статус: ``BACKUP/RESTORE is failed`` | | +------------------------------+---------------------------------------------------+------------------------------------------------------------+-----------------------------------+ | "timeout stopping (module) | Таймаут приостановки одного из инстансов модулей, | - отправляет команду backup.resume на восстановление | Требуется анализ логов модуля, в | | (instanse) (verticle) (key), | требующих консистентности с Prostore | работы модулей в топик ``adapter.command.broadcast`` без | котором возникла ошибка, после ее | | see modul log for detail" | | ожидания статусов о восстановлении; | устранения, повтор процесса | | | | | бекапирования/восстановления | | | | - завершает процесс бекапирования/ восстановления с | | | | | выводом ошибки: "timeout stopping (module) (instanse) | | | | | (verticle) (key), see modul log for detail"; | | | | | | | | | | - выводит финальный статус: ``BACKUP/RESTORE is failed`` | | +------------------------------+---------------------------------------------------+------------------------------------------------------------+-----------------------------------+ | "timeout starting (module) | Таймаут восстановления работоспособности одного | - завершает процесс бекапирования/ восстановления | Требуется анализ логов модуля, в | | (instanse), see modul log | из инстансов модулей, требующих консистентности | завершается с выводом ошибки : "timeout starting | котором возникла ошибка, после ее | | for detail" | с Prostore | (module) (instanse), see modul log for detail"; | устранения, повтор процесса | | | | | бекапирования/восстановления | | | | - завершает процесс восстановления с выводом ошибки: | | | | | "error restoring (module) (instanse), see modul log | | | | | for detail"; | | | | | | | | | | - выводит финальный статус: ``RESTORE is failed`` | | +------------------------------+---------------------------------------------------+------------------------------------------------------------+-----------------------------------+ | "timeout restoring (module) | Таймаут восстановления из резервной копии модуля | - отправляет команду ``backup.resume`` на восстановление | Требуется анализ логов модуля, в | | (instanse), see modul log | слоя адаптеров | работы модулей в топик ``adapter.command.broadcast`` без | котором возникла ошибка, после ее | | for detail" | | ожидания статусов о восстановлении; | устранения, повтор процесса | | | | | бекапирования/восстановления | | | | - завершает процесс восстановления с выводом ошибки: | | | | | "timeout restoring (module) (instanse), see modul log | | | | | for detail"; | | | | | | | | | | - выводит финальный статус: ``RESTORE is failed`` | | +------------------------------+---------------------------------------------------+------------------------------------------------------------+-----------------------------------+ | Ошибки утилиты DTM-tools при | Ошибки не формализованы | В случае не успеха процесса бекапирования утилиты | Требуется анализ логов модуля, в | | создании резервной копии | | DTM-tools: | котором возникла ошибка, после ее | | | | | устранения, повтор процесса | | | | - отправляет команду ``backup.resume`` на восстановление | бекапирования/восстановления | | | | работы модулей в топик ``adapter.command.broadcast`` | | | | | без ожидания статусов о восстановлении; | | | | | | | | | | - завершает процесс бекапирования с выводом ошибки, | | | | | переданной DTM-tools; | | | | | | | | | | - выводит финальный статус: ``BACKUP is failed`` | | +------------------------------+---------------------------------------------------+------------------------------------------------------------+-----------------------------------+ | Ошибки утилиты DTM-tools при | Ошибки не формализованы | В случае не успеха процесса бекапирования утилиты | Требуется анализ логов модуля, в | | восстановлении из резервной | | DTM-tools: | котором возникла ошибка, после ее | | копии | | | устранения, повтор процесса | | | | - отправляет команду ``backup.resume`` на восстановление | бекапирования/восстановления | | | | работы модулей в топик ``adapter.command.broadcast`` | | | | | без ожидания статусов о восстановлении; | | | | | | | | | | - завершает процесс восстановления из бекапа | | | | | с выводом ошибки, переданной DTM-tools; | | | | | | | | | | - выводит финальный статус: ``RESTORE is failed`` | | +------------------------------+---------------------------------------------------+------------------------------------------------------------+-----------------------------------+