Настройка высокой доступности веб сайта IIS с помощью ARR и NLB

Настройка высокой доступности веб сайта IIS с помощью ARR и NLB

В этой статье мы рассмотрим, как обеспечить высокую доступность (отказоустойчивость) фермы из веб серверов IIS (Internet Information Services) на Windows Server с помощью Microsoft Application Request Routing (ARR) и Network Load Balancing (NLB).

Итак, наша конфигурация отказоустойчивой фермы IIS будет выглядеть следующим образом:

  • web.contoso.com
    (192.168.13.222) – DNS имя отказоустойчивого веб сервера, к которому должны обращаться клиенты. Это IP адрес будет доступен через кластер Microsoft NLB. В нашем случае NLB обеспечивать высокую доступность и балансировку нагрузки на веб сервера IIS;
  • web1.contoso.com
    (192.168.13.20) – первый сервер веб фермы IIS
  • web2.contoso.com
    (192.168.13.21) – второй сервер нода веб фермы IIS

Подготовка инфраструктуры для настройки высокой доступности сайтов IIS

Создайте в DNS запись для web.contoso.com и IP адреса. Можно создать DNS запись с помощью PowerShell:

Add-DnsServerResourceRecordA -Name web -IPv4Address 192.168.13.222 -ZoneName contoso.com

Установите роль IIS на обоих серверах в необходимой конфигурации, настройте ваш сайт/приложение. В нашем примере я использую IIS в минимальной конфигурации, достаточной для отдачи статической HTML страницы.

На обоих веб серверах я создал файл
c:intepubiis_ha.html
с простым HTML кодом. Для демонстрации высокой доступности и проверки переключений, HTML файл на каждом сервере содержит имя хоста, на котором он расположен (в продуктивной среде будет использоваться одинаковая конфигурация).

тестовый HTML файл для IIS сервера

Затем я создал SSL сертификат для имени web.contoso.com и импортировал его в IIS на обоих серверах (в целях тестирования я использую самоподписанный сертификат, созданный с помощью PowerShell).

Экспорт SSL сертификата в IIS

Данный сертификат привязан к сайтам на обоих серверах IIS на порту 443.

привязать сертфикат к сайту IIS

Установка ARR и URL Rewrite на IIS в Windows Server

Теперь нужно установить компонент ARR (Application Request Routing) на обоих серверах.

В продуктивных сценариях, когда вы обеспечиваете высокую доступность веб приложения IIS с помощью ARR и NLB, желательно создать для размещения этих служб отдельные сервера (с совмещением ролей ARR и NLB). Например, при настройке высокой доступности для веб-служб Exchange Server (Client Access Services: OWA, ActiveSync, Autodiscovery. и т.д.), не рекомендуется ставить дополнительные службы на сервера Exchange. Также NLB несовместима со службой Microsoft Failover Cluster (не запустятся на одном хосте).

Скачайте Microsoft Application Request Routing 3.0 (x64) и запустите установку
requestRouter_amd64.msi
на обоих серверах (https://www.microsoft.com/web/downloads/platform.aspx).

Установка Microsoft Application Request Routing для iis

Также скачайте и установите модуль IIS URL Rewrite 2.1. (https://www.iis.net/downloads/microsoft/url-rewrite).

Перезапустите консоль IIS. Теперь нужно создать ферму веб серверов IIS. Щелкните правой кнопкой по Server Farm и выберите Create Server Farm.

Задайте имя фермы
web.contoso.com
и добавьте в нее хосты
web1
и
web2
.

создать ферму веб серверов в IIS

IIS предложит автоматически создать правила URL Rewrite для вашей фермы. Согласитесь с этим.

IIS создает правила URL Rewrite

В настройках фермы IIS:

  • В разделе Caching отключите кэширование (Enable disk cache=
    False
    ); отключить дисковое кэширование для фермы в IIS
  • В разделе Proxy измените значение Response buffer threshold на
    0
    ;
  • В разделе Routing rules включите Use URL Rewrite и отключите Enable SSL offloading; включить URL Rewrite в ферме IIS
  • На вкладке Health test укажите URL адрес для проверки
    http://web.contoso.com/
    и установите Interval (seconds) =
    5
    проверка Healt test в IIS ферме

Теперь нужно создать правила перенаправления IIS. Перейдите в раздел URL Rewrite в IIS manager. Одно правило для фермы уже создано (
ARR_web.contoso.com_locadbalance_SS
L).

Добавьте новое условие (condition):

  • Condition input:
    {HTTP_HOST}
  • Matches the pattern
  • Pattern:
    web.contoso.com

настройка правил URL Rewrite в IIS

Настройка общей конфигурации IIS

Теперь нужно сделать общую конфигурацию IIS для двух серверов. Для этого создайте общую сетевую папку на любом другом сервере (не используйте для размещения этой SMB шары сервера вашей фермы, в целях высокой доступности рекомендуется разместить эту папку на отказоустойчивом файловом кластере или DFS). Создайте сервисную учетную запись в AD (в нашем примере это
contososhared_iis
) и предоставьте ей полные права на эту папку.

Можно создать сетевую папку и назначить права с помощью PowerShell:

New-SmbShare -Name IISshared -Path D:IISshared -FullAccess contosospb_admins -ChangeAccess contososhared_iis

На сервере, на котором вы настраивали ферму, перейдите в раздел IIS -> Shared Configuration. Выберите Export Configuration.

Укажите UNC путь к вашей сетевой папке и пароли для доступа шифрования (нужно использовать стойкий пароль). Нажмите Connect as и укажите учетные данные (contososhared_iis) для доступа к этой папке.

экспорт конфигурации в IIS

После того, как вы экспортировали вашу конфигурацию, нужно настроить оба сервера IIS на использовать общей конфигурации из сетевой папки.

Включите опцию Enable shared configuration, укажите UNC путь и учетные данные пользователя. Нажмите Apply. Если все прошло успешно, перезапустите IIS и аналогично настройте shared configuration на втором сервере.

использование общей конфигурации в IIS

Настройка NLB в Windows Server

Теперь нужно установить компонент NLB на обоих серверах и настроить кластер. Установите роли с помощью PowerShell:

Add-WindowsFeature nlb -IncludeManagementTools

установка роли Network Load Balancing Manager

Запустите консоль Network Load Balancing Manager (
nlbmgr.exe
) и создайте новый кластер для IP адреса 192.168.13.222.

Настройка NLB кластера в Windows Server

Выберите Multicast режим для кластера.

Добавьте правило для порта TCP/443. Выберите:

  • Filtering mode: Multiple host
  • Affinity: Single

перенаправить порт 443 в NLB

Добавьте второй сервер в NLB кластер.

запуск кластера NLB

Убедитесь, что у обоих хостов статус изменился Converged.

При использовании виртуальных машин, для корректной работы NLB вам нужно разрешить смену MAC адреса в ВМ. В Hyper-V нужно включить опцию Advanced Features -> Enable MAC address spoofing. В VMware vSphere включите опцию MAC Address Change на уровне виртуального коммутатора или группы портов.

Также проверьте, как обрабатывают смену MAC адреса ваши физические коммутаторы.

разрешить пожмену MAC адреса в виртуальной машине

Теперь можно проверить доступность сайта https://web.contoso.com/iis_ha.html с клиентов. Если вы все настроили правильно, эта страница должна быть доступна.

В моем случае все сразу не взлетело. При переходе на целевую веб страницу, пул DefaultAppPool в IIS стал останавливаться с ошибкой Event ID 2307 от IIS-W3SVC-WP

The worker process for application pool 'DefaultAppPool' encountered an error 'Cannot read configuration file ' trying to read configuration data from file '?', line number '0'. The data field contains the error code.

ошибкой Event ID 2307 от IIS-W3SVC-WP The worker process for application pool 'DefaultAppPool' encountered an error 'Cannot read configuration file

Для решения проблемы пришлось выполнить такие команды на обоих серверах:

net stop WAS /y
rmdir /s /q C:inetpubtempappPools
net start W3SVC

Также, отключите стандартное правило для IIS , что исправить ошибку:

HTTP Error 502.4 - Bad Gateway No appropriate server could be found to route the request.

В такой конфигурации веб сервис будет доступен для пользователей при недоступности любой из нод фермы IIS. В этом можно убедиться наглядно, потому что в зависимости от сервера, который обрабатывает вашу сессию вы будете получать свою веб страницу (мы в начале специально сделали разные файлы iis_ha.html).

отказоустойчивый веб сайт на IIS в Windows Server

Если отключить или приостановить один из целевых серверов, то ARR после выполнения Health Check (задержка 5 секунд) перенаправит вас на другой веб сервер.

Не забывайте, что для построения полностью отказоустойчивой конфигурации вам также нужно обеспечить реализацию HA для базы данных, которую используются ваши приложения на IIS. При использовании MS SQL Server можно использовать кластерную конфигурацию или группу высокой доступности SQL Always On.

Такая конфигурация обеспечит высокую доступность веб сервисов IIS, позволить автоматически перенаправить трафик в случае недоступности одного из серверов. Также благодаря NLB вы можете обеспечить распределение и балансировку нагрузки на сайты.

Windows Server 2016
Настройка высокой доступности веб сайта IIS с помощью ARR и NLB