Модуль горячего восстановления

Модуль горячего восстановления предназначен для восстановления данных очередей в случае выхода из строя одного из серверов, на котором установлена Платформа. Для выполнения функций модуля горячего восстановления Платформа должна быть развернута в кластере, содержащем более одного сервера. Если при использовании кластера один из серверов откажет в момент, когда на нем будут присутствовать сообщения, то реплики сообщений будут отправлены из резервных очередей на другие серверы. Таким образом процесс обмена с этими данными очередей не будет прерван.

Внимание

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

Принцип работы

При включении модуля горячего восстановления на серверах создаются резервные очереди, в которые будут реплицироваться сообщения при обмене данными. Количество серверов, на которые будут реплицироваться сообщения, настраивается параметром faultTolerance. Резервные очереди могут быть созданы на любом из включенных в состав кластера сервере, при этом такой сервер продолжает выполнять назначенные ему функции работы с мастер-данными.

При выходе из строя одного из серверов, указанных в настройках конфигурации кластера, копии сообщений из резервных очередей будут переданы в обработку Платформой.

Репликация настраивается на уровне сервера, а не очереди: определяется порядок репликации очередей между серверами.

Настройка

Включение и настройка модуля горячего восстановления осуществляется в конфигурации кластера:

../_images/hot_recovery11.png

Параметры для модуля горячего восстановления находятся в поле hotRecoverySettingsGlobal:

../_images/hot_recovery2.png

Таблица параметров:

Параметр

Значение

faultTolerance

Количество реплик для каждой из очередей. Значение должно быть меньше количества рабочих серверов кластера. В случае выхода из строя серверов, значение будет быть понижено системой автоматически, если количества рабочих серверов недостаточно для выполнения указанного количество реплик.

replicateByDefault

Влияет на настройки modules. Если значение true, все сообщения в очередях сервисов и систем будут реплицироваться по умолчанию. Если значение false, все сообщения в очередях сервисов и систем не будут реплицироваться по умолчанию.

nodes

Указываются серверы, сообщения которых будут реплицироваться, и серверы, которые будут выступать в роли резервных.

modules

Указываются сервисы и системы, сообщения в очередях которых будут реплицироваться (если replicateByDefault:false) или не будут реплицироваться (если replicateByDefault:true).

  • Параметр FaultTolerance может принимать значения от 0 (модуль горячего восстановления выключен) до любого значения, которое будет меньше количества серверов в кластере.

  • В параметре nodes указываются серверы кластера, которые будут реплицироваться, или резервные серверы.

    Примечание

    При значении FaultTolerance больше нуля следует обязательно указать серверы, сообщения которых будут реплицироваться. Резервные серверы указывать необязательно, они будут автоматически выбираться из доступных в текущий момент.

Примеры конфигурации

  1. Резервные сервера указаны вручную. Каждый из серверов является и реплицируемым, и резервным для другого сервера.

    • 5d77e4f6-623a-4e24-aa20-fe9b688f2474 - EntityId Srv-1

    • b4b2476e-f460-4acf-b1e4-22f7ee9870f1 - EntityId Srv-2

    • a509b4bf-75ff-4001-93e8-91a71fa34f12 - EntityId Srv-3

                "nodes": {
    
    "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, System.Private.CoreLib],[System.Collections.Generic.List`1[[System.Guid, System.Private.CoreLib]], System.Private.CoreLib]], System.Private.CoreLib",
    "5d77e4f6-623a-4e24-aa20-fe9b688f2474": [
        "b4b2476e-f460-4acf-b1e4-22f7ee9870f1"
    ],
    "b4b2476e-f460-4acf-b1e4-22f7ee9870f1": [
        "a509b4bf-75ff-4001-93e8-91a71fa34f12"
    ],
    "a509b4bf-75ff-4001-93e8-91a71fa34f12": [
        "5d77e4f6-623a-4e24-aa20-fe9b688f2474"
    ]
                }
    

В данном примере будут реплицироваться следующие узлы 5d77e4f6-623a-4e24-aa20-fe9b688f2474, b4b2476e-f460-4acf-b1e4-22f7ee9870f1 и a509b4bf-75ff-4001-93e8-91a71fa34f12 на b4b2476e-f460-4acf-b1e4-22f7ee9870f1, a509b4bf-75ff-4001-93e8-91a71fa34f12 и 5d77e4f6-623a-4e24-aa20-fe9b688f2474 соответственно.

При этом, если сервер 5d77e4f6-623a-4e24-aa20-fe9b688f2474 откажет, из сервера b4b2476e-f460-4acf-b1e4-22f7ee9870f1 реплики сообщений отправятся в соответствующие очереди.

../_images/hs_scheme1.png
  1. Резервные сервера указаны вручную. Для двух реплицируемых серверов третий является резервным.

    • 5d77e4f6-623a-4e24-aa20-fe9b688f2474 - EntityId Srv-1

    • b4b2476e-f460-4acf-b1e4-22f7ee9870f1 - EntityId Srv-2

    • a509b4bf-75ff-4001-93e8-91a71fa34f12 - EntityId Srv-3

                "nodes": {
    
    "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, System.Private.CoreLib],[System.Collections.Generic.List`1[[System.Guid, System.Private.CoreLib]], System.Private.CoreLib]], System.Private.CoreLib",
    "5d77e4f6-623a-4e24-aa20-fe9b688f2474": [
        "b4b2476e-f460-4acf-b1e4-22f7ee9870f1"
    ],
    "a509b4bf-75ff-4001-93e8-91a71fa34f12": [
        "b4b2476e-f460-4acf-b1e4-22f7ee9870f1"
    ]
                }
    

В данном примере будут реплицироваться узлы 5d77e4f6-623a-4e24-aa20-fe9b688f2474 и a509b4bf-75ff-4001-93e8-91a71fa34f12» на b4b2476e-f460-4acf-b1e4-22f7ee9870f1.

При этом, если сервер 5d77e4f6-623a-4e24-aa20-fe9b688f2474 откажет, из сервера b4b2476e-f460-4acf-b1e4-22f7ee9870f1 реплики сообщений отправятся в соответствующие очереди. Аналогично для a509b4bf-75ff-4001-93e8-91a71fa34f12. Но если откажет b4b2476e-f460-4acf-b1e4-22f7ee9870f1, реплики не попадут в поднявшиеся очереди, так как он не добавлен в соответствующие настройки.

../_images/hs_scheme2.png
  1. Резервные сервера не указаны.

    • 5d77e4f6-623a-4e24-aa20-fe9b688f2474 - EntityId Srv-1

    • b4b2476e-f460-4acf-b1e4-22f7ee9870f1 - EntityId Srv-2

    • a509b4bf-75ff-4001-93e8-91a71fa34f12 - EntityId Srv-3

                "nodes": {
    
    "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, System.Private.CoreLib],[System.Collections.Generic.List`1[[System.Guid, System.Private.CoreLib]], System.Private.CoreLib]], System.Private.CoreLib",
    "5d77e4f6-623a-4e24-aa20-fe9b688f2474": [],
    "b4b2476e-f460-4acf-b1e4-22f7ee9870f1": [],
    "a509b4bf-75ff-4001-93e8-91a71fa34f12": []
                }
    

В данном примере будут реплицироваться узлы 5d77e4f6-623a-4e24-aa20-fe9b688f2474, b4b2476e-f460-4acf-b1e4-22f7ee9870f1 и a509b4bf-75ff-4001-93e8-91a71fa34f12 на b4b2476e-f460-4acf-b1e4-22f7ee9870f1, a509b4bf-75ff-4001-93e8-91a71fa34f12 и 5d77e4f6-623a-4e24-aa20-fe9b688f2474 соответственно.

При этом, если сервер 5d77e4f6-623a-4e24-aa20-fe9b688f2474 откажет, из сервера b4b2476e-f460-4acf-b1e4-22f7ee9870f1 реплики сообщений отправятся в соответствующие очереди.

../_images/hs_scheme3.png

Мониторинг состояния

В ЦМ на вкладке Основные у серверов имеется специальный параметр Горячее восстановление.

../_images/hs_mon.png

У этого параметра имеются следующие показатели:

  • Состояние: отображает актуальное состояние модуля горячего восстановления.

  • FaultTolerance: отображает актуальное значение данного параметра, которое высчитывается из настроек конфигурации кластера и количества рабочих серверов.

  • Резервные серверы: отображает список резервных узлов для данного сервера.

  • Резервные очереди других серверов: отображает количество реплик сообщений, находящихся на этом сервере.

Дополнительно

  • При отказе сервера с настроенной системой обмена с 1С или СУБД могут возникать дубли (если сообщения уже были отправлены, но Платформа не успела получить квитанцию о доставке до момента отказа сервера).

  • На момент выхода версии 3.1.0 следует обязательно убедиться, что на всех серверах установлено корректное время UTC, иначе горячее восстановление может работать некорректно.

  • Если на момент отказа сервера в очереди необработанных сообщений оставались сообщения, их обработка начнётся заново, то есть все шаги процесса начнутся сначала, и шаги, которые были выполнены до падения, останутся выполненными, в том числе и шаг отправки.

  • Рекомендуемое количество серверов в кластере - 3.