Резервированный сервер ТехноДок + резервированный проект КАСКАД
В данном разделе описана конфигурация, состоящая из 2 резервированных серверов ТехноДок и КАСКАД. Для примера будем использовать следующие адреса:
reports.server1
иreports.server2
– основной и резервны й сервер ТехноДок. База данных ТехноДок находится на тех же серверах. В качестве резервируемой БД может выступать MariaDB, PostgreSQL или Microsoft SQL Server.kaskad.server1
иkaskad.server2
- основной и резервный сервер КАСКАД.
Для обмена данными между ТехноДок и КАСКАД используется протокол XMLRPC. Для отображения графического интерфейса ТехноДок используется панель с компонентом WebView. Для настройки взаимодействия ТехноДок и КАСКАД необходимо выполнить следующие действия:
- Настроить кластер БД ТехноДок.
- Настроить кластер ТехноДок.
- Добавить и настроить скрипты взаимодействия КАСКАД с ТехноДок в проекте КАСКАД в настроенный резервируемый проект.
- Добавить в ТехноДок внешнее соединение с настройками подключения для каждой из пар проекта КАСКАД.
- Добавить и настроить в проекте КАСКАД панель отображения ТехноДок с автоматическим выбором основного сервера.
Настройка кластера БД ТехноДок
В качестве резервируемой БД в ТехноДок могут выступать следующие СУБД:
- MariaDB (подробное описание настройки репликации доступно в Резервирование MariaDB);
- PostgreSQL (описание возможных вариантов резервирования доступно в Резервирование PostgreSQL);
- Microsoft SQL Server (описание возможных вариантов резервирования доступно в Резервирование Microsoft SQL Server).
После выполнения настройки резервирования БД необходимо на каждом из серверов ТехноДок задать следующие настройки подключения:
- Открыть файл
technodoc.settings.ini
на хостеreports.server1
. - В секции
[Database:Connections:Primary]
раскомментировать следующие строки и указ ать корректные данные авторизации:
# Настройки для MariaDb
Type = MariaDb # Тип БД – MariaDb
ConnectionString=Server=reports.server1;Database=technodoc;Uid=root;Password=password # Строка соединения с БД;
# Настройки для PostgreSql
Type = PostgreSql # Тип БД – PostgreSql
ConnectionString=Server=reports.server1;Database=technodoc;User Id=postgres;Password=postgres;SearchPath=td# Строка соединения с БД;
# Настройки для Microsoft SQL Server
Type = MsSql # Тип БД – MS SQL Server
ConnectionString=Server=reports.server1;Database=technodoc;User Id=sa;Password=password # Строка соединения с БД;
- В секции
[Database:Connections: Standby]
раскомментировать следующие строки и указать корректные данные авторизации:
# Настройки для MariaDb
Type = MariaDb # Тип БД – MariaDb
ConnectionString=Server=reports.server2;Database=technodoc;Uid=root;Password=password # Строка соединения с БД;
# Настройки для PostgreSql
Type = PostgreSql # Тип БД – PostgreSql
ConnectionString=Server=reports.server2;Database=technodoc;User Id=postgres;Password=postgres;SearchPath=td # Строка соединения с БД;
# Настройки для Microsoft SQL Server
Type = MsSql # Т ип БД – MS SQL Server
ConnectionString=Server=reports.server2;Database=technodoc;User Id=sa;Password=password # Строка соединения с БД;
- В секции
[Database]
установить настройкуFailoverStrategy
в значениеRoundRobin
(используется по умолчанию).
FailoverStrategy = RoundRobin
- Повторить настройки в таком же порядке на сервере
reports.server2
.
Альтернативный вариант задать строку подключения к БД, в которой будут сразу указаны все сервера для подключения и приоритетная БД для подключения, за выбор БД для подключения будет отвечать драйвер, для этого:
- Открыть файл
technodoc.settings.ini
на хостеreports.server1
. - В секции
[Database:Connections:Primary]
раскомментировать следующие строки и указать корректные данные авторизации:
Type = PostgreSql # Тип БД – PostgreSql
ConnectionString=Server=reports.server1,reports.server2;Database=technodoc;User Id=postgres;Password=postgres;SearchPath=td;Target Session Attributes=primary # Строка соединения с БД;
- Повторить настройки в таком же порядке на сервере
reports.server2
. В данном случае с помощью задания опции подключенияTarget Session Attributes=primary
драйвер автоматически будет искать и подключаться к главной БД без необходимости явного указанию второй строки соединения.
При выборе в качестве опции резервирования группы доступности Always On
будет нужна только одна строка подключения, соответственно настройки подключения будут выглядеть следующим образом (в качестве адреса кластера для примера зададим cluster.server):
- Открыть файл
technodoc.settings.ini
на хостеreports.server1
. - В секции
[Database:Connections:Primary]
раскомментировать следующие строки и указать корректные данные авторизации:
Type = MsSql # Тип БД – MS SQL Server
ConnectionString=Server=cluster.server;Database=technodoc;User Id=sa;Password=password # Строка соединения с БД;
- Повторить настройки в таком же порядке на сервере
reports.server2
. В данном отвечать за выбор главной БД будет настроенный кластер, в составе которого работают группы доступности.
Настройка кластера ТехноДок.
Подробная информация о работе кластера ТехноДок описана в разделе Резервирование сервера приложений. В данном разделе будет приведен пример настройки кластера.
Действия выполняемые на хосте reports.server1
:
-
Открыть файл
technodoc.settings.ini
на хостеreports.server1
. -
В секции
[Cluster]
указать настройкеPriority
значение равное1
, что сделает данный сервер основным, так как это будет максимальный приоритет среди серверов в данной конфигурации (можно указать любое число, которое будет больше чем на резервном сервере). -
В секции
[Cluster]
задать для настройкиServersAddresses:0
значение равноеhttp://reports.server2
. Данная настройка задает адрес второго сервера для его опроса и определения состояния сервера. -
Для сервера в режиме резервного сервера есть 2 варианта поведения, которые настрагиваются с помощью опции
RequestHandleType
:Forbid
- все запросы на изменение данных к резервным серверам отклоняются.RedirectToPrimary
- все отличные от GET запросы к резервным серверам перенаправляются на основной сервер.
Выберем для примера вариант по умолчанию
Forbid
. -
В результате настройки в секции
[Cluster]
на хостеreports.server1
будут выглядеть следующим образом:
[Cluster]
Priority = 1 # Приоритет текущего сервера. Сервер с наивысшим приоритетом является основным
ServersAddresses:0 = http://reports.server2 # Адреса серверов в кластере в формате [http|https]://[IP|доменное имя]:[порт]
RequestHandleType = Forbid # Тип обработки запросов
При переходе сервера в режим резервного сервера необходимо отключить задачи, которые могут изменять данные для избегания конфликтов, для этого:
- Открыть файл
technodoc.settings.ini
на хостеreports.server1
. - Отключить задачи для режима резервного сервера: UploadReportValuesJob, ProcessReportsCreationRulesJob, ProcessReportsRulesJob, CalculateOperationTimeJob, SendMailsJob и DeleteMailsJob. Для этого необходимо добавить в конфигурацию для каждой задачи секцию конфигурирования с префиксом
Standby
и указать значение настройкиIsEnabled
равнымFalse
:
# Список допустимых названий задач:
[Standby:Reports:Jobs:UploadReportValuesJob] # Задача по загрузке значений отчетов
IsEnabled = False # Включена ли задача
[Standby:Reports:Jobs:ProcessReportsCreationRulesJob] # Задача по созданию отчетов
IsEnabled = False # Включена ли задача
[Standby:Reports:Jobs:ProcessReportsRulesJob] # Задача по обработке правил отчетов
IsEnabled = False # Включена ли задача
[Standby:OperationTime:Jobs:CalculateOperationTimeJob] # Задача по расчету наработки
IsEnabled = False # Включена ли задача
[Standby:Mail:Jobs:SendMailsJob] # Задача по отправке почты
IsEnabled = False # Включена ли задача
[Standby:Mail:Jobs:DeleteMailsJob] # Задача по удалению устаревших писем
IsEnabled = False # Включена ли задача
Действия выполняемые на хосте reports.server2
:
-
Открыть файл
technodoc.settings.ini
на хостеreports.server2
. -
В секции
[Cluster]
указать настройкеPriority
значение равное0
, что сделает данный сервер резервным, так как это будет минимальный приоритет среди серверов в данной конфигурации (можно указать любое число, которое будет меньше чем на основном сервере). -
В секции
[Cluster]
задать для настройкиServersAddresses:0
значение равноеhttp://reports.server1
. Данная настройка задает адрес второго сервера для его опроса и определения состояния сервера. -
Для сервера в режиме резервного сервера есть 2 варианта поведения, которые настрагиваются с помощью опции
RequestHandleType
:Forbid
- все запросы на изменение данных к резервным серверам отклоняются.RedirectToPrimary
- все отличные от GET запросы к резервным серверам перенаправляются на основной сервер.
Выберем для примера вариант по умолчанию
Forbid
. -
В результате настройки в секции
[Cluster]
на хостеreports.server2
будут выглядеть следующим образом:
[Cluster]
Priority = 0 # Приоритет текущего сервера. Сервер с наивысшим приоритетом является основным
ServersAddresses:0 = http://reports.server1 # Адреса серверов в кластере в формате [http|https]://[IP|доменное имя]:[порт]
RequestHandleType = Forbid # Тип обработки запросов
Для режима резервного сервера необходимо отключить задачи, которые могут изменять данные для избегания конфликтов, для этого:
- Открыть файл
technodoc.settings.ini
на хосте reports.server2. - Отключить задачи для режима резервного сервера: UploadReportValuesJob, ProcessReportsCreationRulesJob, ProcessReportsRulesJob, CalculateOperationTimeJob, SendMailsJob и DeleteMailsJob. Для этого необходимо добавить для каждой задачи секции конфигурирования с префиксом Standby и указать значение настройки
IsEnabled
равнымFalse
:
# Список допустимых названий задач:
[Standby:Reports:Jobs:UploadReportValuesJob] # Задача по загрузке значений отчетов
IsEnabled = False # Включена ли задача
[Standby:Reports:Jobs:ProcessReportsCreationRulesJob] # Задача по созданию отчетов
IsEnabled = False # Включена ли задача
[Standby:Reports:Jobs:ProcessReportsRulesJob] # Задача по обработке правил отчетов
IsEnabled = False # Включена ли задача
[Standby:OperationTime:Jobs:CalculateOperationTimeJob] # Задача по расчету наработки
IsEnabled = False # Включена ли задача
[Standby:Mail:Jobs:SendMailsJob] # Задача по отправке почты
IsEnabled = False # Включена ли задача
[Standby:Mail:Jobs:DeleteMailsJob] # Задача по удалению устаревших писем
IsEnabled = False # Включена ли задача
После всех манипуляций необходимо перезагрузить ТехноДок.
В случае выполнения аварийного переключения пользователь будет видеть информационное окно. Чтобы убрать данное окно и чтобы после возвращения основного сервера он снова стал основным необходимо удалить файл .failover
в папке data
приложения.
Настройка обмена данными ТехноДок и КАСКАД
ТехноДок выполняет обмен данными с КАСКАД по протоколу XMLRPC. Для настройки коммуникации между ТехноДок выполните следующие действия на каж дом узле из резервированной пары (подробнее об интеграции смотрите КАСКАД Цифра):
- Скопируйте в проект КАСКАД CONTROL скрипты из папки
components/kaskad/scripts
установленного экземпляра ТехноДок. - В скрипте
technodoc.ctl
при необходимости измените порт, изменив значение переменнойTECHNODOC_XMLRPC_HTTP_PORT
(по умолчанию используется 8242). - Добавьте новый менеджер сценариев, указав в опциях запуска скрипт
technodoc.ctl
. - Запустите добавленный менеджер. В консоли проекта должна появиться запись
XMLRPC-сервер запущен на порту ХХХХ
.
Далее необходимо добавить в ТехноДок внешнее соединение:
- Перейти в пункт меню
Внешние соединения
. - Добавить источник данных КАСКАД и указать 2 опции подключения с адресами до каждой резервной пары серверов КАСКАД -
kaskad.server1
иkaskad.server2
(подробнее о настройке данног о источника данных см. Настройки источника КАСКАД).
Строки подключения можно указать в любом порядке, ТехноДок выполнит подключение к первому доступному источнику, а КАСКАД автоматически перенаправит запрос к основному серверу.
Настройка панели КАСКАД при работе ТехноДок в кластере
Для настройки подключения панели к основному экземпляру ТехноДок в кластере необходимо выполнить следующие действия:
- В проекте КАСКАД открыть скрипт на каждом из серверов открыть
scripts\libs\Technodoc\Core\technodocServerSettings.ctl
. - Для переменной
TECHNODOC_CLUSTER_URLS
задать в виде строк список адресов (URL) экземпляров ТехноДока в кластере.
// Массив адресов серверов Технодока
dyn_string TECHNODOC_CLUSTER_URLS = makeDynString("http://reports.server1", "http://reports.server2");
- Если проект был запущен, то перезагрузить проект.
Теперь, при открытии панели, будет выполняться поиск и подключение к основному экземпляру ТехноДока.