Отказоусточивость
Определение координатора в кластере
В конфигурации Кластера в параметре coordinators пользователь может перечислить идентификаторы узлов-координаторов. При отказе сервера-координатора, один из работающих серверов кластера автоматически станет координатором.
При запуске кластера(выполнении apply) определение координатора выполняется по полю в конфигурации кластера:
Если параметр пустой, то кластер сам определяет координатора по текущей схеме.
Если параметр заполнен, то кластер пытается сделать координатором один из указанных в массиве узлов, беря их в порядке следования в параметре. Если все не отвечают, то определяем следующего в соответствии с предыдущим пунктом.
Алгоритм действия узла при получении новой конфигурации кластера:
Вычислить, кто должен быть координатором по полученной схеме НовыйКоординатор.
Если Я-текущийКоординатор == НовыйКоординатор => применить схему как сейчас.
Иначе если НовыйКоординатор жив => отправить схему ему, самому ничего не делать. Новый координатор ее сохраняет, обрабатывает и рассылает остальным машинам в кластере.
Выполнять предыдущие пункты, пока координатор не будет определен.
Приоритетность при выборе координатора
При выборе координатора учитываются следующие моменты:
Если в кеше есть адрес предыдущего координатора, начинаем опрос с него.
Если в кеше ничего нет - CS отправляет запрос на получение адреса или идентификатора координатора на первую попавшуюся машину кластера.
Если машина доступна, то она сообщает адрес координатора. В этом случае конфигурацию отправляем по полученному адресу и кешируем в памяти адрес, кому последнему отправляли конфигурацию для этого кластера.
Если машина недоступна или не ответила до наступления таймаута, то отправляем запрос по очереди на остальные машины.
Если ни одна из машин не сообщает координатора, то высылаем информацию на первую, дальше работает алгоритм из предыдущего пункта.
Если ни одна из машин не доступна, помещаем в очередь и при попытке отправки повторяем все шаги, перечисленные выше.
Отказоустойчивость Центра мониторинга и администрирования
Отказоустойчивость ЦМ реализуется совместно с механизмом отказоустойчивости координатора. ЦМ открывается с сервера, который является координатором. Перенаправление на страницу ЦМ сервера-координатора перенастраивается автоматически на других серверах кластера в течение короткого времени после переезда координатора на другой сервер.
Перенаправление веб-сервисов
Все используемые порты для публикации веб-сервисов и веб-страниц должны быть уникальны в пределах кластера.
На всех серверах кластера выполняется публикация всех зарегистрированных веб-систем и веб-приложений (UI). Если в кластере несколько серверов, то обслуживание каждого сервиса выполняется только одном из серверов, а на остальных серверах кластера выполняется перенаправление на рабочий URL.
Перенаправление процессов с перегруженного узла
Перенаправление процессов выравнивает нагрузку на основной узел за счет передачи сообщений на менее загруженные узлы кластера.
Название параметра |
Имя параметра |
Default |
Min |
|
Максимальное количество в очереди новых для модуля процессов |
maxU nprocessedQueueLength |
200 |
10 |
|
% превышения количества в очереди новых для модуля процессов |
excessUn processedQueuePercent |
50 |
5 |
Каждые 20 секунд свободные узлы опрашивают другие узлы на уровень загруженности сервиса процессов. В логах появляются следующие сообщения:
2020-11-12 18:29:15,410 [121] VERBOSE ALL NodeWorkloadCollector - Запрос загрузки очереди сервиса процессов f9a8517a-6dc4-473a-9eb6-35752bc8dfa5 с машины (a833296d-41b6-4a43-8b2d-1a20c174435a, 192.168.101.14:7800) 2020-11-12 18:29:15,430 [121] VERBOSE ALL NodeWorkloadCollector - Получена загрузка очереди сервиса процессов с машины (a833296d-41b6-4a43-8b2d-1a20c174435a, 192.168.101.14:7800) : 0%
При наличии загруженного сервиса процессов, более свободный узел забирает у него часть сообщений и обрабатывает их на своем сервисе процессов, отправляя обратно квитанцию с результатом. Свободный узел забирает себе сообщения только в случае, если:
Свободный узел в этот момент ничего не обрабатывает.
На свободном узле присутствует сервис процессов.
Необработанные сообщения не помещены в очередь сервиса процессов загруженного узла. Объем доступной памяти сервиса процессов определяется параметром узла maxUnprocessedQueueLength. Для включения логов по перенаправлению необходимо внести параметры кластера в разделе globalDiagnosticParams: «features»: [«NodeBalancing»].
Регистрация перенаправлений
При запуске сервера или при применении конфигурации регистрируется событие с информацией о включенных перенаправлениях сервисов и внешних систем. Данное событие регистрируется в журнале на каждом сервере кластера.
Формат сообщения:
Перенаправление для {EntityIdСистемыСервиса, ИмяСервисаСистемы} установлено по адресу {Address}:{Port}
Распределение сервисов и внешних систем
В конфигурации кластера предусмотрены настройки распределения сервисов и внешних систем, которые позволяют указать логику выбора приоритетного сервера для размещения.
"allocationOptions": {
"$type": "DT.ClusterConfiguration.Allocation.AllocationOptions, DT_Core",
"auto": true, //Автоматическое перераспределение сервисов и систем
"checkPeriodSecond": 300, //Интервал проверки распределения сервисов и систем на узлах
"moveStandByServer": false, //Перераспределять сервисы и системы у которых указан сервер в конфигурации
"useDbConnectAddress": true, //Использовать адрес СУБД сервера банков и адаптеров при распределении между узлами
"useNodePriorityList": false, //Использовать список приоритетных узлов при распределении сервисов
"nodePriorityList": [] //Список приоритетных узлов при перераспределении, в порядке убывания
}