Балансировка нагрузки HTTP с помощью маршрутизации запросов приложений

Команда IIS

Обзор

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

Цель

Чтобы распределять нагрузку HTTP-запросов между несколькими серверами контента с помощью маршрутизации запросов приложений (Application Request Routing), как показано ниже:

Схема маршрутизации запросов приложений на нескольких серверах содержимого.

Необходимые условия

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

  • IIS 7.0 или более поздней версии на платформе Windows 2008 (любой номер SKU) или новее.
  • Модули маршрутизации запросов приложений Майкрософт версии 1 и зависимые модули.
  • Не менее двух серверов содержимого с рабочими сайтами и приложениями.

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

Еще одним предварительным условием является определение и настройка фермы серверов с помощью шагов, описанных в разделе "Определение и настройка группы серверов маршрутизации запросов приложений (ARR).

Шаг 1. Проверка правил переопределения URL-адресов

Если ферма серверов создана с помощью шагов, описанных в разделе "Определение и настройка группы серверов маршрутизации запросов приложений (ARR), правила перезаписи URL-адресов уже созданы для простого сценария балансировки нагрузки.

Чтобы проверить правила перезаписи URL-адресов с помощью пользовательского интерфейса:

  1. Запустите диспетчер IIS.
  2. Выберите ферму серверов myServerFarm, созданную в разделе "Определение и настройка группы серверов маршрутизации запросов приложений (ARR).
  3. Показаны следующие значки:
    Снимок экрана: ферма серверов. Значок теста работоспособности, значок балансировки нагрузки, значок мониторинга и управления, значок прокси-сервера, значок правил маршрутизации и значок сопоставления сервера.
  4. Дважды щелкните правила маршрутизации.
  5. Убедитесь, что установлен флажок "Использовать перезапись URL-адресов" для проверки входящих запросов .
    Снимок экрана страницы
  6. Разгрузка SSL включена по умолчанию. Если эта функция включена, все соединения между сервером ARR и серверами приложений выполняются в виде четкого текста, даже для HTTPS-запросов от клиентов к серверу ARR. Если сервер ARR и серверы приложений развертываются в доверенной сети, например в одном центре обработки данных, включение разгрузки SSL не жертвует безопасностью. Кроме того, включение этой функции может помочь расширить ресурсы сервера на серверах приложений, так как они не должны тратить циклы в шифровании и расшифровке запросов и ответов.
    Чтобы отключить разгрузку SSL, снимите флажок "Включить разгрузку SSL " и нажмите кнопку "Применить".
  7. Откройте браузер и отправьте несколько запросов на сервер ARR.
  8. Чтобы убедиться, что запросы распределяются одинаково между серверами приложений, выберите myServerFarm. Дважды щелкните " Мониторинг и управление".
    Снимок экрана: ферма серверов. Значок мониторинга и управления отображается среди других значков.
  9. В представлении панели мониторинга убедитесь, что запросы распределяются равномерно.
    Снимок экрана: страница функции мониторинга и управления. Отображаются статистические данные среды выполнения маршрутизации запросов приложений.

Чтобы проверить правила перезаписи URL-адресов с помощью командной строки:

  1. Откройте командную строку с правами администратора .

  2. Перейдите по адресу %windir%\system32\inetsrv.

  3. Чтобы убедиться, что правила перезаписи URL-адресов созданы правильно, введите appcmd.exe list config -section:system.webServer/rewrite/globalRules. Он возвращает globalRules, который выглядит следующим образом:

    <system.webServer>
        <rewrite>
            <globalRules>
                <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard"
                stopProcessing="true">
                    <match url="*" />
                    <conditions>
                    </conditions>
                    <action type="Rewrite" url="http://myServerFarm/{R:0}" />
                </rule>
            </globalRules>
        </rewrite>
    </system.webServer>
    
  4. Чтобы отключить разгрузку SSL, сначала удалите все правила перезаписи URL-адресов:

    appcmd.exe clear config -section:system.webServer/rewrite/globalRules
    

    Затем создайте правила перезаписи URL-адресов для пересылки трафика HTTPS. В частности, с этим правилом ARR перенаправит запросы с помощью SSL, если входящие запросы являются HTTPS:

    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True']"
    /commit:apphost
    
    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"
    /commit:apphost
    
    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTPS}',pattern='On']"
    /commit:apphost
    
    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite"
    /[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.url:"https://myServerFarm/{R:0}"
    /commit:apphost
    

    Наконец, создайте правила перезаписи URL-адресов, чтобы перенаправлять HTTP-трафик в виде чистого текста на серверы приложений:

    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True']"
    /commit:apphost
    
    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"
    /commit:apphost
    
    appcmd.exe set config -section:system.webServer/rewrite/globalRules
    /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite"
    /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://myServerFarm/{R:0}"
    /commit:apphost
    
  5. Чтобы убедиться, что правила перезаписи URL-адресов созданы правильно с отключенной разгрузкой SSL, введите appcmd.exe list config -section:system.webServer/rewrite/globalRules. Он возвращает globalRules, который выглядит следующим образом:

    <system.webServer>
        <rewrite>
            <globalRules>
                <rule name="ARR_myServerFarm_loadbalance_SSL" patternSyntax="Wildcard"
                stopProcessing="true">
                    <match url="*" />
                    <conditions>
                    <add input="{HTTPS}" pattern="On" />
                    </conditions>
                    <action type="Rewrite" url="https://myServerFarm/{R:0}" />
                </rule>
                <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard"
                stopProcessing="true">
                    <match url="*" />
                    <conditions>
                    </conditions>
                    <action type="Rewrite" url="http://myServerFarm/{R:0}" />
                </rule>
            </globalRules>
        </rewrite>
    </system.webServer>
    

Шаг 2. Настройка мониторинга работоспособности

Маршрутизация запросов приложений отслеживает работоспособность серверов содержимого двумя способами:

  • Через трафик в реальном времени
  • С помощью явного тестирования URL-адресов

Динамическое тестирование трафика выполняется автоматически по умолчанию при выполнении запросов к маршрутизации запросов приложений. Явное тестирование URL-адресов — это дополнительный тест, который можно использовать при динамическом тестировании трафика. В этом разделе описано пошаговое руководство по настройке явного тестирования URL-адресов.

Чтобы с помощью пользовательского интерфейса настроить мониторинг работоспособности, выполните следующие действия.

  1. Для тестирования URL-адресов требуется конкретный URL-адрес для тестирования. Чтобы удовлетворить это требование, используйте Блокнот для создания текстового файла с именемhealthCheck.txt, содержащего предложение "Я работоспособна".
  2. Поместите файл healthCheck.txt на серверы приложений.
  3. Убедитесь, что healthCheck.txt отображается правильно, открыв страницу в браузере.
  4. В диспетчере IIS выберите ферму серверов myServerFarm. Показаны следующие значки:
    Снимок экрана: ферма серверов. Значок теста работоспособности, значок балансировки нагрузки, значок мониторинга и управления и другие значки.
  5. Дважды щелкните тест работоспособности.
    Снимок экрана: страница функции 'Тест работоспособности'. Показан URL-тест.
  6. Введите http://(server name or FQDN of ARR server)/healthCheck.txt в качестве значения URL-адреса .
  7. Введите здоровое как значение для параметра Соответствие ответа. Совпадение ответа — это необязательный тест для проверки, что тело ответа содержит ожидаемую строку. В этом случае, поскольку healthCheck.txt содержит предложение "Я здоров.", в ответе будет искаться слово "здоровый".
  8. Нажмите кнопку "Применить" , чтобы сохранить изменения.
  9. Чтобы проверить функциональные возможности мониторинга проверки работоспособности, остановите отслеживаемый сайт на одном из серверов приложений. Так как для значения интервала (секунд) задано значение 30 секунд, дождитесь 30 секунд для следующей проверки работоспособности.
  10. После ожидания 30 секунд отправьте несколько запросов на сервер ARR.
  11. Чтобы убедиться, что все запросы будут переходить к работоспособному серверу, дважды щелкните " Мониторинг и управление", а затем обновите панель мониторинга с помощью клавиши F5. Обратите внимание, что статистика времени выполнения была сброшена. Это сделано намеренно. При необходимости может потребоваться отправить дополнительные запросы и обновить панель мониторинга.
    Снимок экрана: страница функции мониторинга и управления. Отображаются статистические данные среды выполнения.
  12. Мониторинг работоспособности также используется для обнаружения момента, когда неработоспособный сервер становится работоспособным. Чтобы проверить эту функциональность, запустите сайт, остановленный на шаге 9. Опять же, так как для значения интервала (секунд) задано значение 30 секунд, дождитесь 30 секунд для следующей проверки работоспособности.
  13. После ожидания 30 секунд отправьте несколько запросов на сервер ARR.
  14. Чтобы убедиться, что запросы распределяются равномерно между серверами, обновите панель мониторинга в диспетчере IIS. Обратите внимание, что статистика времени выполнения была сброшена. Это сделано намеренно. При необходимости может потребоваться отправить дополнительные запросы и обновить панель мониторинга.

Чтобы настроить мониторинг работоспособности с помощью командной строки:

  1. Откройте командную строку с правами администратора .

  2. Перейдите по адресу %windir%\system32\inetsrv.

  3. Чтобы задать URL-адрес http://(server name or FQDN of ARR server)/healthCheck.txt со строкой Я здоров. для сопоставления, введите:

    appcmd.exe set config -section:webFarms
    /[name='myServerFarm1'].applicationRequestRouting.healthCheck.url:"http://(server
    name or FQDN of ARR server)/healthCheck.txt "
    /[name='myServerFarm1'].applicationRequestRouting.healthCheck.responseMatch:"I am
    healthy." /commit:apphost
    

Шаг 3. Настройка клиентской привязки

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

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

  1. Запустите диспетчер IIS.
  2. Выберите ферму серверов myServerFarm, созданную в разделе "Определение и настройка группы серверов маршрутизации запросов приложений (ARR).
  3. Показаны следующие значки:
    Снимок экрана: диалоговое окно фермы серверов и значки, найденные в группе серверов.
  4. Дважды щелкните привязка сервера.
  5. Чтобы включить сопоставление клиентов, установите флажок "Сходство клиента " и нажмите кнопку "Применить".
    Снимок экрана страницы функции привязки сервера. Отображается флажок рядом с привязкой клиента. В поле
    Маршрутизация запросов приложений использует файл cookie для обеспечения клиентской привязки. Имя файла cookie будет использоваться для задания файла cookie на клиенте. Тем не менее клиент должен принимать файлы cookie для корректной работы привязки клиента.
  6. Чтобы проверить функциональность привязки клиента, отправьте несколько запросов на сервер ARR. Обновите панель мониторинга в диспетчере IIS (мониторинг и управление). Убедитесь, что статистика среды выполнения изменяется только для одного из серверов приложений, на которых клиент был сопоставлен. При необходимости может потребоваться отправить дополнительные запросы и обновить панель мониторинга.

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

  1. Откройте командную строку с правами администратора .

  2. Перейдите по адресу %windir%\system32\inetsrv.

  3. Чтобы включить сходство клиентов, введите следующее:

    appcmd.exe set config -section:webFarms
    /[name='myServerFarm1'].applicationRequestRouting.affinity.useCookie:"True"
    /commit:apphost
    

Шаг 4. Запрет новых подключений

Запрет новых подключений на сервере — это грациозный способ вывода сервера из среды фермы серверов. Более понятно, когда используется функция сопоставления клиентов, так как маршрутизация запросов приложений будет учитывать существующие сеансы при отключении новых подключений. То есть, когда клиент ассоциируется с сервером, который запрещает новые подключения, клиент будет продолжать направляться на тот же сервер и, следовательно, это не оказывает негативного влияния на клиента. Однако новые клиенты не будут перенаправлены на сервер, который запрещает новые подключения.

Чтобы запретить новые подключения с помощью пользовательского интерфейса:

  1. Используя настройку из шага 3 выше, определите сервер, к которому связан клиент.
  2. Выберите ферму серверов myServerFarm, созданную в разделе "Определение и настройка группы серверов маршрутизации запросов приложений (ARR).
  3. Показаны следующие значки:
    Снимок экрана: ферма серверов. Значок проверки работоспособности, значок балансировки нагрузки, значок мониторинга и управления, значок прокси-сервера и другие значки, найденные в ферме серверов.
  4. Дважды щелкните " Мониторинг и управление".
  5. Выберите сервер, на который привязан ваш клиент. В области "Действия" нажмите кнопку "Запретить новые подключения".
  6. В диалоговом окне подтверждения нажмите кнопку "Да".
    Снимок экрана диалогового окна
  7. Чтобы убедиться, что запросы от клиентов продолжают направляться на сопоставленный сервер, который теперь запрещает новые подключения, отправьте несколько тестовых запросов на сервер ARR. Обновите панель мониторинга в диспетчере IIS. Убедитесь, что статистика среды выполнения изменяется только для сервера, с которым клиент связан. При необходимости может потребоваться отправить дополнительные запросы и обновить панель мониторинга.
  8. Чтобы убедиться, что новые клиенты не направляются на сервер, который запрещает новые подключения, удалите файлы cookie, заданные маршрутизацией запросов приложений, закрыв и перезапустив браузер.
  9. Отправьте несколько запросов на сервер ARR. Обновите панель мониторинга в диспетчере IIS. Убедитесь, что статистика среды выполнения изменяется только для серверов, доступных. В частности, убедитесь, что статистика выполнения для сервера, который запрещает новые подключения, не изменяется. При необходимости может потребоваться отправить дополнительные запросы и обновить панель мониторинга.

Сводка

Теперь вы успешно настроили ряд параметров маршрутизации запросов приложений для горизонтального масштабирования и равномерного распределения нагрузки. Дополнительные возможности маршрутизации с помощью маршрутизации запросов приложений см. в статье "Использование маршрутизации запросов приложений".