Настроить горизонтальное масштабирование

Продукты
Все продукты

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

Балансировщик может быть аппаратным или программным. Для работы в отказоустойчивом режиме используется балансировщик HTTP/HTTPS-трафика с поддержкой протокола WebSocket. Работа приложения тестировалась на программном балансировщике нагрузки HAProxy. Известны случаи успешного использования других балансировщиков Citrix, Cisco, NginX, FortiGate, MS ARR.

Данный документ рассматривает вариант горизонтального масштабирования Creatio с иcпользованием бесплатного open-source балансировщика HAProxy для распределения нагрузки на серверы сессий.

Общий порядок развертывания 

Общий порядок развертывания приложения Creatio с горизонтальным масштабированием на .NET Framework следующий:

Номер “value” должен быть одинаковым у всех экземпляров приложения в web-ферме.

Важно. Начиная с версии 7.14.1 ключ <add key="TenantId" value="..." /> нужно добавить только во внутренний конфигурационный файл Web.config (путь к файлу Terrasoft.WebApp\Web.config). Добавление ключа во внешний конфигурационный файл может привести к ошибкам в работе приложения.

  1. Развернуть необходимое количество экземпляров приложения Creatio в web-ферме.

    На заметку. Рекомендуется, чтобы у всех экземпляров приложения имена в IIS и настройки Application pool совпадали.

  2. В файле ConnectionStrings.config для всех экземпляров указать одинаковые базы данных SQL и Redis.

    <add name="redis" connectionString="host=DOMAIN.COM;db=0;port=6379;maxReadPoolSize=10;maxWritePoolSize=500"/>
    <add name="db" connectionString="Data Source=DOMAIN.COM;Initial Catalog=DatabaseName;Integrated Security=SSPI; MultipleActiveResultSets=True;Pooling-true;Max Pool Size=100"/>
  3. В конфигурационном файле (Web.config) каждого приложения, в блоке <appSettings> добавить ключ:

    <add key="TenantId" value="1" />
  4. В конфигурационном файле (Web.config) каждого приложения указать одинаковые значения machineKey для всех сайтов.

  5. Раздать права на созданные директории приложений пользователю IUSR и пользователю, под которым запущен Application pool в IIS.

  6. Настроить балансировщик (например, HAproxy) для распределения нагрузки между развернутыми серверами приложения.

  7. При необходимости настроить балансировку нагрузки для серверов баз данных и сессий.

    На заметку. Информация о настройке кластеризации доступна в документации MSSQL и Oracle. Настройка отказоустойчивости системы при помощи Redis Sentinel рассмотрена в статье “Работа Creatio с Redis Sentinel”.

Общий порядок развертывания приложения Creatio с горизонтальным масштабированием на .NET Core следующий:

  1. Разверните необходимое количество экземпляров приложения Creatio.
  2. В файле ConnectionStrings.config для всех экземпляров укажите одинаковые базы данных SQL и Redis для всех экземпляров приложения.
  3. Перейдите в корневую папку любого из экземпляров приложения и найдите файл Terrasoft.WebHost.dll.
  4. Запустите команду:
    dotnet Terrasoft.WebHost.dll configureWebFarmMode

    В результате конфигурационные файлы данного экземпляра приложения обновятся.

  5. Скопируйте все обновленные конфигурационные файлы в корневые папки других экземпляров приложения.
  6. Настройте балансировщик (например, HAproxy) для распределения нагрузки между развернутыми серверами приложения.
  7. При необходимости настроить балансировку нагрузки для серверов баз данных и сессий.

На заметку. Подробная информация о создании и настройке кластеров содержится в документации СУБД. Настройка отказоустойчивости системы при помощи Redis Sentinel рассмотрена в статье “Настроить Redis Sentinel”.

Установить балансировщик HAProxy 

Балансировщик нагрузки HAProxy поддерживает ряд бесплатных open-source ОС. В данном документе мы рассмотрим один из наиболее простых способов развертывания HAProxy на ОС Debian при помощи сервиса haproxy.debian.net.

  1. Откройте страницу сервиса установки, перейдя по ссылке https://haproxy.debian.net/.

  1. Выберите ОС и ее версию, а также версию HAProxy.

    На заметку. Чтобы узнать установленную версию Debian, воспользуйтесь командой cat /etc/issue.

    В результате сервис сгенерирует набор команд, которые необходимо выполнить в ОС Debian для установки HAProxy.

    Рис. 1 — Пример команд установки HAProxy, сгенерированных сервисом haproxy.debian.net
    haproxy_settings_commands.png 

    haproxy_settings_commands.png 

  1. Выполните сгенерированные команды одну за другой.

Настроить балансировщик HAProxy 

Для настройки HAProxy необходимо внести изменения в файл haproxy.cfg. Файл находится по следующему пути:

.../etc/haproxy/haproxy.cfg

Основные (минимальные) настройки 

Минимальные настройки, необходимые для работы HAProxy, состоят в добавлении в файл двух секций: frontend и backend.

Секция frontend 

В секцию frontend необходимо добавить 2 настройки: bind и default_backend:

    • В настройке bind укажите адрес и порт, на который будут поступать запросы, распределение которых будет производить HAProxy.

    • В опции default_backend укажите имя, которое будет указано для секции backend.

В результате настройка будет выглядеть следующим образом:

frontend front
maxconn 10000
#Using these ports for binding
bind *:80
bind *:443
#Convert cookies to be secure
rspirep ^(set-cookie:.*)  \1;\ Secure
default_backend creatio

Секция backend 

В секцию backend необходимо добавить как минимум 2 обязательные настройки:

    • В параметре balance укажите тип балансировки, например roundrobin. Информация о различных типах балансировки доступна в документации HAProxy.

    • При помощи параметра server укажите все серверы (или “nodes”), между которыми должна распределяться нагрузка.

Для каждого сервера (развернутого экземпляра приложения Creatio) необходимо добавить отдельный параметр server с указанием адреса сервера, порта и веса. Вес позволяет балансировщику распределять нагрузку на основании физических возможностей серверов. Чем больший вес указан для сервера, тем больше запросов он будет получать. Например, если необходимо распределить нагрузку между двумя серверами Creatio, добавьте в backend 2 параметра server:

server node_1 server address:port weight
server node_2 server address:port weight

В результате настройка будет выглядеть следующим образом:

backend creatio
#set balance type
balance roundrobin
            
server node_1 nodeserver1:80 check inter 10000 weight 2
server node_2 nodeserver2:80/sitename check inter 10000 weight 1

Новые настройки вступят в силу после перезапуска HAProxy. Используйте следующую команду для перезапуска HAProxy:

service haproxy restart

Проверить состояние сервера 

С точки зрения балансировщика HAProxy у сервера может быть несколько состояний:

Состояние

Описание

UP

Сервер работает.

UP - transitionally DOWN

Сервер в настоящий момент считается работоспособным, но последняя проверка не удалась. Следовательно, сервер переходит в состояние DOWN.

DOWN - transitionally UP

В настоящее время сервер считается неработоспособным, но последняя проверка прошла успешно. Следовательно, сервер переходит в состояние UP.

DOWN

Сервер не работает.

 

Изменения рабочего состояния инициируются параметрами проверки работоспособности (health check). Для самой простой проверки работоспособности необходимо ключевое слово check в строке настройки server. Для запуска проверки работоспособности требуется как минимум IP-адрес и порт TCP от сервера. Пример проверки:

server node1 ... check
option httpchk GET /Login/NuiLogin.aspx
option httpchk GET /0/ping

Настроить веб-статистику (опционально) 

Чтобы включить веб-статистику, добавьте новую секцию listen со следующими параметрами: bind, mode http, stats enable, stats uri. Секция выглядит следующим образом:

listen stats # Define a listen section called "stats»
         bind :9000 # Listen on localhost:9000
         mode http
         stats enable  # Enable stats page
         stats uri /haproxy_stats  # Stats URI

В результате веб-статистика балансировки нагрузки Creatio будет доступна для просмотра в браузере.

Рис. 1 — Пример веб-статистики балансировщика нагрузки
load_balancer_stats.png 

Для просмотра статистики перейдите по адресу: адрес балансировщика:9000/haproxy_stats.