Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается настройка службы веб-публикации Microsoft IIS (IIS) в отказоустойчивом кластере Windows Server (WSFC).
Исходная версия продукта: Windows Server 2008 и более поздние версии, службы IIS 8.0 и более поздних версий
Исходный номер базы знаний: 970759
Введение
Процедуры, описанные в этой статье, применяются только к службе веб-публикации World Wide. Инструкции по настройке службы публикации FTP в отказоустойчивом кластере см. в статье "Настройка FTP для СЛУЖБ IIS в отказоустойчивом кластере Windows Server".
Дополнительная информация
В более ранних версиях службы IIS корпорация Майкрософт предоставила универсальные компоненты монитора ресурсов для поддержки экземпляров веб-сервера высокой доступности с помощью инфраструктуры кластеризации Майкрософт. Однако для полного реализации такого решения требуется пользовательский код. Кроме того, универсальные скрипты, предоставляемые корпорацией Майкрософт, не удовлетворяют потребностям клиентов. Чтобы настроить IIS 7.0 или более поздней версии в кластеризованной среде, которая использует отказоустойчивую кластеризацию Windows Server, необходимо использовать пользовательский (скрипт) код, чтобы включить такой сценарий высокой доступности. При этом пользователи могут настроить настройку в соответствии с требованиями. который обеспечивает им полный контроль над высокой доступностью веб-приложений. Кроме того, интерфейсы скриптов для администрирования и мониторинга, представленные в IIS 7.0, предоставляют более богатую среду, чем предоставленные ранее скрипты.
Примечание.
Файлы установки IIS 7.0 неправильно включают файлы скриптов Clusweb.vbs и Clusftp.vbs, используемые в IIS 6.0 для административных задач кластера IIS. Не используйте эти скрипты с IIS 7.0 или более поздней версией.
Мы рекомендуем администраторам тщательно оценивать использование балансировки нагрузки сети (NLB) в качестве основного и предпочтительного метода для повышения масштабируемости и доступности веб-приложений с несколькими серверами, на которых работают службы IIS 7.0 или более поздней версии, а не с помощью отказоустойчивой кластеризации. Одним из преимуществ NLB является то, что все серверы могут активно участвовать в одновременной обработке входящих запросов протокола передачи гипертекста (HTTP). Еще одним преимуществом является то, что в среде IIS NLB гораздо проще поддерживать последовательные обновления и откаты, обеспечивая высокий уровень доступности веб-приложений. Дополнительные сведения об использовании IIS 7.0 или более поздней версии в среде NLB см. в следующих статьях:
Важно учитывать, что кластеризация СЛУЖБ IIS с помощью кластеризации служб IIS не всегда гарантирует высокий уровень доступности для веб-приложений. Хотя службы IIS (в частности, служба WWW) могут работать и работать, определенный процесс размещения пула приложений может завершиться, или приложение может вызывать внутренние ошибки HTTP сервера. Кластеризация веб-приложений и мониторинг их работоспособности с помощью пользовательского скрипта — правильный и рекомендуемый способ достижения кластера IIS высокой доступности с помощью отказоустойчивой кластеризации. Ниже приведен пример скрипта, который отслеживает состояние пула приложений, чтобы определить, запущен ли он или нет.
Чтобы настроить высокий уровень доступности для веб-сервера IIS 7.0 или более поздней версии с помощью отказоустойчивой кластеризации, выполните следующие действия. Более подробно описаны шаги 3–7. Пример скрипта далее в этой статье можно использовать в качестве примера для IIS 7.0 или более поздней версии.
- Установите роль веб-сервера на всех узлах кластера. Дополнительные сведения см. в руководстве по развертыванию IIS 7.
- Установите функцию отказоустойчивой кластеризации на всех узлах кластера и создайте кластер. Дополнительные сведения см. в руководстве по развертыванию отказоустойчивого кластера.
- Настройте общую папку, которая будет использоваться для общей конфигурации IIS.
- Настройте общую конфигурацию IIS на всех узлах кластера.
- Настройте автономные файлы IIS для общей конфигурации на всех узлах кластера.
- Настройте веб-сайт (включая связанный пул приложений) и укажите расположение его содержимого на одном узле кластера.
- Настройте высокий уровень доступности для веб-сайта, создав универсальный сценарий в отказоустойчивой кластеризации.
Настройка общей папки, которая будет использоваться для общей конфигурации IIS
- Создайте пользователя, который получит доступ к общей папке, которая будет использоваться для общей конфигурации IIS.
- Создайте общую папку. Эта общая папка будет использоваться для хранения общей конфигурации IIS, которая будет использоваться между СЛУЖБАми IIS на всех узлах кластера. Существует несколько вариантов:
- На автономном сервере, который не является частью отказоустойчивого кластера, создайте общую папку.
- В другом отказоустойчивом кластере Windows Server создайте общую папку с высоким уровнем доступности. Дополнительные сведения см . в пошаговом руководстве по отказоустойчивой кластеру: настройка отказоустойчивого кластера двухузлового файлового сервера.
- В том же отказоустойчивом кластере, на котором размещен веб-сайт высокого уровня доступности, создайте общую папку с высоким уровнем доступности. Дополнительные сведения см . в пошаговом руководстве по отказоустойчивости кластера: настройка отказоустойчивого кластера двухузлового файлового сервера.
- Задайте разрешения для общей папки, созданной на шаге 2. Предоставьте пользователю, созданному на шаге 1 полный доступ к общей папке и разрешениям NTFS.
- Убедитесь, что все узлы кластера могут перейти к общей папке. Путь к общей папке —
\\<fileserver>\<share>
это .
Настройка общей конфигурации IIS на всех узлах кластера
Примечание.
В Windows 2008 Server возникла проблема с общей конфигурацией IIS из-за отсутствия привилегий для Application Host Helper Service
сервера. Для работы общей конфигурации необходимо выполнить следующие действия при настройке общей конфигурации IIS на Сервере Windows 2008.
Откройте командную строку от имени администратора.
Выполните следующую команду:
net stop apphostsvc
Выполните следующую команду:
sc privs apphostsvc SeChangeNotifyPrivilege/SeTcbPrivilege/SeImpersonatePrivilege
Выполните следующую команду:
net start apphostsvc
После выполнения этих действий на каждом сервере Windows 2008 в кластере продолжайте настройку общей конфигурации IIS, как описано в этом разделе.
На одном из узлов кластера экспортируйте общую конфигурацию в общую папку:
- Перейдите к средствам администрирования и выберите диспетчер службы IIS (IIS).
- В левой области выберите узел имени сервера.
- Дважды щелкните значок общей конфигурации .
- На странице "Общая конфигурация" выберите "Экспорт конфигурации" в области "Действия" (справа), чтобы экспортировать файлы конфигурации с локального компьютера в другое расположение.
-
В диалоговом окне "Конфигурация экспорта" введите путь к общей папке (
\\<fileserver>\<share>
) в поле "Физический путь". - Выберите "Подключить как", а затем введите имя пользователя и пароль для учетной записи пользователя с доступом к общей папке, в которой хранится общая конфигурация, и нажмите кнопку "ОК". Эта учетная запись будет использоваться для доступа к общей папке. Следует использовать ограниченную учетную запись Active Directory, которая не является администратором домена.
- В диалоговом окне "Экспорт конфигурации" введите пароль, который будет использоваться для защиты ключей шифрования, а затем нажмите кнопку "ОК".
- На странице "Общая конфигурация" установите флажок "Включить общую конфигурацию".
- Введите физический путь, учетную запись пользователя и пароль, введенный ранее, а затем выберите "Применить " на панели "Действия ".
- В диалоговом окне "Пароль ключей шифрования" введите пароль ключа шифрования, заданный ранее, и нажмите кнопку "ОК".
- В диалоговом окне "Общая конфигурация" нажмите кнопку "ОК".
- Нажмите кнопку ОК.
На каждом из других узлов кластера используйте общую конфигурацию, которую вы только что экспортировали в общую папку:
- Перейдите к средствам администрирования и выберите диспетчер службы IIS (IIS).
- Выберите узел имени сервера.
- Дважды щелкните значок общей конфигурации .
- На странице "Общая конфигурация" установите флажок "Включить общую конфигурацию".
- Введите физический путь к общей папке (
\\<fileserver>\<share>
), учетную запись пользователя и пароль, введенный ранее, а затем нажмите кнопку "Применить" на панели "Действия ". - В диалоговом окне "Пароль ключей шифрования" введите пароль ключа шифрования, заданный ранее, и нажмите кнопку "ОК".
- В диалоговом окне "Общая конфигурация" нажмите кнопку "ОК".
- Нажмите кнопку ОК.
Примечание.
Дополнительные сведения о настройке общих конфигураций в IIS см . в разделе "Общая конфигурация".
Настройка автономных файлов IIS для общей конфигурации на всех узлах кластера
На каждом узле кластера включите автономные файлы:
Установка рабочего стола
- Перейдите к средствам администрирования и выберите диспетчер сервера.
- В левой области выберите "Компоненты".
- Выберите " Добавить компоненты " в правой области.
- Выполните одно из следующих действий в соответствии с вашей версией Windows:
- Для Windows Server 2016 перейдите на сайт Install Server with Desktop Experience.
- Для Windows Server 2012 и 2012 R2 выберите возможности рабочего стола в разделе "Пользовательские интерфейсы и инфраструктуры " в списке функций.
- Для Windows Server 2008 и 2008 R2 выберите "Рабочий стол".
- Выберите "Установить", чтобы установить интерфейс рабочего стола.
- Перезагрузите компьютер.
Выполните одно из следующих действий:
- Для Windows Server 2012, 2012 R2 и 2016 выберите Центр синхронизации в панель управления, а затем выберите "Управление автономными файлами".
- Для Windows Server 2008 и 2008 R2 выберите автономные файлы в панель управления.
Выберите "Включить автономные файлы". Не перезагрузите компьютер в настоящее время.
Убедитесь, что кэш установлен только для чтения. Для этого выполните следующую команду в командной строке с повышенными привилегиями:
REG ADD "HKLM\System\CurrentControlSet\Services\CSC\Parameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f
Перезагрузите компьютер.
Перейдите на файловый сервер с компьютера. Щелкните правой кнопкой мыши общую папку, содержащую общую конфигурацию IIS, и выберите "Всегда доступно в автономном режиме".
Примечание.
Если вы настроили общую папку с высоким уровнем доступности в том же отказоустойчивом кластере, на котором размещены узлы IIS, параметр Always Available Offline не будет отображаться при щелчке правой кнопкой мыши общей папки, если узел кластера, на котором размещен высокодоступный файловый сервер. Вам потребуется переместить высокодоступное приложение файлового сервера на другой узел.
В панель управления откройте автономные файлы. Выберите "Открыть центр синхронизации" и выберите " Расписание".
Запланируйте автономную синхронизацию файлов для каждого дня или в соответствии с вашими требованиями. Вы также можете настроить автономную синхронизацию для выполнения каждые несколько минут. Даже если планировщик не настроен, при изменении чего-либо в файле applicationhost.config изменения отражаются на веб-сервере.
Примечание.
Дополнительные сведения о настройке автономных файлов для общей конфигурации в IIS см. в разделе "Автономные файлы для общей конфигурации".
Настройте веб-сайт и укажите расположение его содержимого на одном узле кластера
Найдите узел кластера, принадлежащий ресурсу диска кластера, в котором будут оставаться файлы содержимого веб-сайта:
- Перейдите к средствам администрирования и выберите диспетчер отказоустойчивости кластеров.
- Подключение к кластеру. Если вы находитесь на одном из узлов кластера, кластер будет отображаться в списке автоматически.
- В разделе "Хранилище" найдите ресурс диска, на котором будет находиться содержимое веб-страницы. Для этого разверните дерево хранилища для ресурса диска. Убедитесь, что хранилище не используется любым другим приложением высокого уровня доступности в кластере. Хранилище будет находиться в разделе "Доступное хранилище".
- Узел кластера, на котором находится этот ресурс в сети. Вы настроите службы IIS на этом узле кластера.
- Имя ресурса диска кластера.
Это будет использоваться для файлов содержимого. На узле кластера, на котором находится ресурс в сети, настройте веб-сервер для использования общего диска для содержимого веб-сайта:
- Перейдите к средствам администрирования и выберите диспетчер службы IIS (IIS).
- В левой области разверните узел имени сервера.
- Разверните сайты, а затем в разделе "Сайты" выберите сайт, который вы настроите.
- В правой области выберите "Дополнительные параметры" в разделе "Управление веб-сайтом".
- Найдите свойство "Физический путь" в разделе "Общие параметры", а затем введите расположение, в котором находятся файлы содержимого веб-сайта. Это расположение ресурса диска кластера, указанного на шаге 5 предыдущей процедуры.
- Нажмите кнопку ОК.
Настройка высокого уровня доступности веб-сайта путем создания универсального скрипта в диспетчере отказоустойчивости кластеров
Чтобы настроить высокий уровень доступности для веб-серверов IIS, настройте универсальный ресурс скрипта, который будет использоваться для мониторинга веб-сайта и пула приложений для веб-сайта:
Скопируйте скрипт, указанный в конце этой статьи
Windows\System32\inetsrv\Clusweb7.vbs
, на каждый узел кластера.По умолчанию скрипт отслеживает веб-сайт с именем "Веб-сайт по умолчанию" и пул приложений с именем DefaultAppPool. Если они не являются правильными веб-сайтами и пулом приложений, измените
SITE_NAME and APP_POOL_NAME
переменные. Убедитесь, что один и тот же веб-сайт и пул приложений в скрипте существуют на всех узлах кластера.Примечание.
Имена чувствительны к регистру.
Перейдите к средствам администрирования и выберите диспетчер отказоустойчивости кластеров.
Подключение к кластеру. Если вы находитесь на одном из узлов кластера, кластер будет отображаться в списке автоматически.
Выполните одно из следующих действий:
- Для Windows Server 2012, 2012 R2 и 2016 щелкните правой кнопкой мыши роли и выберите команду "Настроить роль ", чтобы создать ее.
- Для Windows Server 2008 и 2008 R2 щелкните кластер правой кнопкой мыши и выберите команду "Настройка службы или приложения". Мастер создает рабочую нагрузку высокого уровня доступности.
Выберите универсальный скрипт.
Выберите файл скрипта из
%systemroot%\System32\Inetsrv\clusweb7.vbs
.Задайте имя точки доступа клиента (CAP) на имя веб-сайта, которое клиенты будут использовать для подключения к веб-сайту высокого уровня доступности. Укажите статические IP-адреса, используемые для веб-сайта CAP. Если вы используете протокол конфигурации динамического узла (DHCP), этот параметр не будет отображаться.
На шаге выбора хранилища выберите общий диск кластера, на котором находятся файлы содержимого веб-сайта. Хранилище должно быть неиспользуемо любым другим приложением высокого уровня доступности в кластере.
Примечание.
Если общая папка, используемая для общей конфигурации IIS, размещена в одном кластере, то здесь следует использовать другой ресурс диска.
После подтверждения параметров мастер создаст группу кластеров, ресурсы кластера и зависимости между ресурсами, а затем переведет ресурсы в режим "в сети".
Примечание.
Чтобы разместить несколько веб-сайтов с высоким уровнем доступности в одном отказоустойчивом кластере, выполните те же действия, что и выше. Однако используйте другой файл скрипта для каждого веб-сайта и другого кластеризованного общего хранилища. Например, используйте
%systemroot%\System32\Inetsrv
clusweb7.vbs для первого веб-сайта, clweb7-2.vbs для второго, clweb7-3.vbs для третьего и т. д. Каждый файл скрипта отслеживает другой веб-сайт и пул приложений.
Приведенный ниже сценарий предназначен только для примера и не поддерживается корпорацией Майкрософт явно. Использование этого скрипта в кластеризованной среде IIS 7.0 или более поздней версии находится под угрозой.
'<begin script sample>
'This script provides high availability for IIS websites
'By default, it monitors the "Default Web Site" and "DefaultAppPool"
'To monitor another website, change the SITE_NAME below
'To monitor another application pool, change the APP_POOL_NAME below
'More thorough and application-specific health monitoring logic can be added to the script if needed
Option Explicit
DIM SITE_NAME
DIM APP_POOL_NAME
Dim START_WEB_SITE
Dim START_APP_POOL
Dim SITES_SECTION_NAME
Dim APPLICATION_POOLS_SECTION_NAME
Dim CONFIG_APPHOST_ROOT
Dim STOP_WEB_SITE
'Note:
'Replace this with the site and application pool you want to configure high availability for
'Make sure that the same website and application pool in the script exist on all cluster nodes. Note that the names are case-sensitive.
SITE_NAME = "Default Web Site"
APP_POOL_NAME = "DefaultAppPool"
START_WEB_SITE = 0
START_APP_POOL = 0
STOP_WEB_SITE = 1
SITES_SECTION_NAME = "system.applicationHost/sites"
APPLICATION_POOLS_SECTION_NAME = "system.applicationHost/applicationPools"
CONFIG_APPHOST_ROOT = "MACHINE/WEBROOT/APPHOST"
'Helper script functions
'Find the index of the website on this node
Function FindSiteIndex(collection, siteName)
Dim i
FindSiteIndex = -1
For i = 0 To (CInt(collection.Count) - 1)
If collection.Item(i).GetPropertyByName("name").Value = siteName Then
FindSiteIndex = i
Exit For
End If
Next
End Function
'Find the index of the application pool on this node
Function FindAppPoolIndex(collection, appPoolName)
Dim i
FindAppPoolIndex = -1
For i = 0 To (CInt(collection.Count) - 1)
If collection.Item(i).GetPropertyByName("name").Value = appPoolName Then
FindAppPoolIndex = i
Exit For
End If
Next
End Function
'Get the state of the website
Function GetWebSiteState(adminManager, siteName)
Dim sitesSection, sitesSectionCollection, siteSection, index, siteMethods, startMethod, executeMethod
Set sitesSection = adminManager.GetAdminSection(SITES_SECTION_NAME, CONFIG_APPHOST_ROOT)
Set sitesSectionCollection = sitesSection.Collection
index = FindSiteIndex(sitesSectionCollection, siteName)
If index = -1 Then
GetWebSiteState = -1
End If
Set siteSection = sitesSectionCollection(index)
GetWebSiteState = siteSection.GetPropertyByName("state").Value
End Function
'Get the state of the ApplicationPool
Function GetAppPoolState(adminManager, appPool)
Dim configSection, index, appPoolState
set configSection = adminManager.GetAdminSection(APPLICATION_POOLS_SECTION_NAME, CONFIG_APPHOST_ROOT)
index = FindAppPoolIndex(configSection.Collection, appPool)
If index = -1 Then
GetAppPoolState = -1
End If
GetAppPoolState = configSection.Collection.Item(index).GetPropertyByName("state").Value
End Function
'Start the w3svc service on this node
Function StartW3SVC()
Dim objWmiProvider
Dim objService
Dim strServiceState
Dim response
'Check to see if the service is running
set objWmiProvider = GetObject("winmgmts:/root/cimv2")
set objService = objWmiProvider.get("win32_service='w3svc'")
strServiceState = objService.state
If ucase(strServiceState) = "RUNNING" Then
StartW3SVC = True
Else
'If the service is not running, try to start it
response = objService.StartService()
'response = 0 or 10 indicates that the request to start was accepted
If ( response <> 0 ) and ( response <> 10 ) Then
StartW3SVC = False
Else
StartW3SVC = True
End If
End If
End Function
'Start the application pool for the website
Function StartAppPool()
Dim ahwriter, appPoolsSection, appPoolsCollection, index, appPool, appPoolMethods, startMethod, callStartMethod
Set ahwriter = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
Set appPoolsSection = ahwriter.GetAdminSection(APPLICATION_POOLS_SECTION_NAME, CONFIG_APPHOST_ROOT)
Set appPoolsCollection = appPoolsSection.Collection
index = FindAppPoolIndex(appPoolsCollection, APP_POOL_NAME)
Set appPool = appPoolsCollection.Item(index)
'See if it is already started
If appPool.GetPropertyByName("state").Value = 1 Then
StartAppPool = True
Exit Function
End If
'Try To start the application pool
Set appPoolMethods = appPool.Methods
Set startMethod = appPoolMethods.Item(START_APP_POOL)
Set callStartMethod = startMethod.CreateInstance()
callStartMethod.Execute()
'If started return true, otherwise return false
If appPool.GetPropertyByName("state").Value = 1 Then
StartAppPool = True
Else
StartAppPool = False
End If
End Function
'Start the website
Function StartWebSite()
Dim ahwriter, sitesSection, sitesSectionCollection, siteSection, index, siteMethods, startMethod, executeMethod
Set ahwriter = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
Set sitesSection = ahwriter.GetAdminSection(SITES_SECTION_NAME, CONFIG_APPHOST_ROOT)
Set sitesSectionCollection = sitesSection.Collection
index = FindSiteIndex(sitesSectionCollection, SITE_NAME)
Set siteSection = sitesSectionCollection(index)
if siteSection.GetPropertyByName("state").Value = 1 Then
'Site is already started
StartWebSite = True
Exit Function
End If
'Try to start site
Set siteMethods = siteSection.Methods
Set startMethod = siteMethods.Item(START_WEB_SITE)
Set executeMethod = startMethod.CreateInstance()
executeMethod.Execute()
'Check to see if the site started, if not return false
If siteSection.GetPropertyByName("state").Value = 1 Then
StartWebSite = True
Else
StartWebSite = False
End If
End Function
'Stop the website
Function StopWebSite()
Dim ahwriter, sitesSection, sitesSectionCollection, siteSection, index, siteMethods, startMethod, executeMethod, autoStartProperty
Set ahwriter = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
Set sitesSection = ahwriter.GetAdminSection(SITES_SECTION_NAME, CONFIG_APPHOST_ROOT)
Set sitesSectionCollection = sitesSection.Collection
index = FindSiteIndex(sitesSectionCollection, SITE_NAME)
Set siteSection = sitesSectionCollection(index)
'Stop the site
Set siteMethods = siteSection.Methods
Set startMethod = siteMethods.Item(STOP_WEB_SITE)
Set executeMethod = startMethod.CreateInstance()
executeMethod.Execute()
End Function
'Cluster resource entry points. More details here:
'http://msdn.microsoft.com/en-us/library/aa372846(VS.85).aspx
'Cluster resource Online entry point
'Make sure the website and the application pool are started
Function Online( )
Dim bOnline
'Make sure w3svc is started
bOnline = StartW3SVC()
If bOnline <> True Then
Resource.LogInformation "The resource failed to come online because w3svc could not be started."
Online = False
Exit Function
End If
'Make sure the application pool is started
bOnline = StartAppPool()
If bOnline <> True Then
Resource.LogInformation "The resource failed to come online because the application pool could not be started."
Online = False
Exit Function
End If
'Make sure the website is started
bOnline = StartWebSite()
If bOnline <> True Then
Resource.LogInformation "The resource failed to come online because the web site could not be started."
Online = False
Exit Function
End If
Online = true
End Function
'Cluster resource offline entry point
'Stop the website
Function Offline( )
StopWebSite()
Offline = true
End Function
'Cluster resource LooksAlive entry point
'Check for the health of the website and the application pool
Function LooksAlive( )
Dim adminManager, appPoolState, configSection, i, appPoolName, appPool, index
i = 0
Set adminManager = CreateObject("Microsoft.ApplicationHost.AdminManager")
appPoolState = -1
'Get the state of the website
if GetWebSiteState(adminManager, SITE_NAME) <> 1 Then
Resource.LogInformation "The resource failed because the " & SITE_NAME & " web site is not started."
LooksAlive = false
Exit Function
End If
'Get the state of the Application Pool
if GetAppPoolState(adminManager, APP_POOL_NAME) <> 1 Then
Resource.LogInformation "The resource failed because Application Pool " & APP_POOL_NAME & " is not started."
LooksAlive = false
Exit Function
End if
'Web site and Application Pool state are valid return true
LooksAlive = true
End Function
'Cluster resource IsAlive entry point
'Do the same health checks as LooksAlive
'If a more thorough than what we do in LooksAlive is required, this should be performed here
Function IsAlive()
IsAlive = LooksAlive
End Function
'Cluster resource Open entry point
Function Open()
Open = true
End Function
'Cluster resource Close entry point
Function Close()
Close = true
End Function
'Cluster resource Terminate entry point
Function Terminate()
Terminate = true
End Function
'<end script sample>