你目前正处于脱机状态,正在等待 Internet 重新连接

你的浏览器不受支持

你需要更新你的浏览器才能使用该网站。

更新到 Internet Explorer 的最新版本

在 Windows Server 2008,Windows Server 2008 R2 或 Windows Server 2012 的故障转移群集中配置的 IIS 7.0 或更高版本的万维网发布服务

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 970759
简介
本文介绍如何在 Windows Server 2008 或 Windows Server 2008 R2 的故障转移群集中配置 Microsoft Internet Information Services (IIS) 7.5 或 IIS 7.0。这篇文章中的步骤仅适用于万维网发布服务。有关如何在故障转移群集中配置 FTP 发布服务的说明,请参阅:
974603 如何在 Windows Server 2008 故障转移群集中配置的 IIS 7.0 的 FTP 7.5
更多信息
在以前版本的 Internet Information Services,Microsoft 提供了一般资源监视器组件以支持高可用性 Web 服务器实例使用 Microsoft 群集的基础结构。但是,需要自定义代码时完全认识到这种解决方案的可能性。另外,Microsoft 提供的通用脚本不满足客户的需求。要在群集环境中使用 Windows Server 故障转移群集中配置 IIS 7.5 或 IIS 7.0,您需要使用自定义的 (脚本) 代码来启用高可用性方案。当您执行此操作时,用户可以自定义安装程序,以满足他们的需求。这让他们可以完全控制 Web 应用程序的高可用性集成。此外,IIS 7.5 和 IIS 7.0 中引入接口用于管理和监视,该脚本提供更丰富的环境比以前提供的脚本。

注意IIS 7.0 安装文件不正确地包括 Clusweb.vbs 和 Clusftp.vbs 脚本文件,IIS 在 IIS 6.0 中使用群集的管理任务。请不要使用这些脚本 IIS 7.0 或更高版本。

Microsoft 建议管理员应认真评估作为主要和首选方法改进的可扩展性和可用性的 Web 应用程序具有多个服务器,而不使用故障转移群集中运行 IIS 7.5 或 IIS 7.0 使用网络负载平衡 (NLB)。NLB 的好处之一就是所有的服务器可以积极地参与传入的 HTTP 请求的同时进行处理。另一个好处是在 NLB IIS 环境中,这样做可能会支持滚动更新和回滚,同时仍能提供高可用性的 Web 应用程序变得容易得多。有关使用 NLB 环境中的 IIS 7.5 或 IIS 7.0 的详细信息,请参阅下面的 Microsoft 网站:值得考虑通过群集 IIS 服务群集 IIS 不能始终保证 Web 应用程序的高可用性解决方案。启动并运行,可能是 IIS 服务 (特别是 WWW 服务),而特定应用程序池宿主进程可能已经终止,或应用程序可能会引发内部服务器 HTTP 错误。群集 Web 应用程序,并通过使用自定义脚本来监视它们的运行状况是正确和推荐的方式来实现高可用性的 IIS 群集,使用故障转移群集。下面是一个示例脚本,监视的状态来确定是否已或不启动应用程序池。

若要配置高可用性的 IIS 7.0 和 7.5 使用故障转移群集的 Web 服务器,请按照下列步骤。下面更详细地介绍步骤 3 到步骤 7。本文内下文中的示例脚本可以用作 IIS 7.0、 IIS 7.5 和 IIS 8.0 示例。
  1. 在所有群集节点上安装 Web 服务器角色。有关详细信息,请访问下面的 Microsoft Web 站点:
  2. 在所有群集节点上安装的故障转移群集功能并创建群集。有关详细信息,请访问下面的 Microsoft Web 站点:
  3. 设置将用于 IIS 共享配置文件共享。
  4. 在所有群集节点上配置 IIS 共享的配置。
  5. 在所有群集节点上配置 IIS 脱机配置文件的共享。
  6. 配置 Web 站点 (包括关联的应用程序池),并且一个群集节点上指定其内容的位置。
  7. 通过在故障转移群集中创建一个通用脚本来配置高可用性对于您的 Web 站点。

设置将用于 IIS 共享配置文件共享

  1. 创建一个将访问将 IIS 共享配置为使用该共享的用户。
  2. 创建文件共享。此共享将用于存储 IIS 共享的配置将所有群集节点上的 IIS 之间共享。有多个选项:
  3. 在步骤 2 中创建的共享上设置的权限。为您在第 1 步到文件共享的完全控制权限和 NTFS 权限中创建该用户。
  4. 请确认所有群集节点都都可以浏览到文件共享。文件共享的路径 \\<fileserver>\<share>.</share> </fileserver>

在所有群集节点上配置 IIS 共享的配置

注意没有与 IIS 共享服务器上配置 Windows 2008 因为缺少权限应用程序主机帮助器服务问题。对于共享配置工作,必须设置 Windows 2008 服务器上 IIS 共享配置时执行以下步骤。
  1. 打开管理的命令提示符。
  2. 运行下面的命令:
    net stop apphostsvc
  3. 运行下面的命令:
    sc privs apphostsvc SeChangeNotifyPrivilege/SeTcbPrivilege/SeImpersonatePrivilege
  4. 运行下面的命令:
    net start apphostsvc
完成以下步骤在群集中的每个 Windows 2008 服务器上后,继续在这一节中设置 IIS 共享配置,如所述。

在其中一个群集节点上的文件共享导出共享的配置:
  1. 定位到 管理工具然后单击 Internet Information Services (IIS) 管理器.
  2. 在左窗格中,单击服务器节点。
  3. 双击 共享的配置 图标。
  4. 在共享配置页面上单击 导出配置 在中 操作 窗格 (右窗格),以将配置文件从本地计算机中导出到另一个位置。
  5. 在中 导出配置 对话框中,键入路径的文件共享 (\\<fileserver>\<share></share></fileserver>) 中 物理路径 框。
  6. 单击 作为连接然后键入用户名和密码的用户帐户有权访问此共享中,共享的配置存储,这然后单击 确定.此帐户将用于访问共享资源。您应使用受限的 活动目录(AD) 帐户不是域管理员。
  7. 在中 导出配置 对话框中,键入一个密码,将使用来保护加密密钥,然后单击 确定.
  8. 共享的配置 页上,单击以选中 启用共享的配置 复选框。
  9. 键入物理路径、 用户帐户和以前,您输入的密码,然后单击 应用 在中 操作 窗格。
  10. 在中 加密密钥密码 对话框中,键入加密密钥密码的更早版本,将设置,然后单击 确定.
  11. 在中 共享的配置 对话框中,单击 确定.
  12. 单击 确定.
在每个其他群集节点上使用刚才导出到文件共享的共享的配置:
  1. 定位到 管理工具然后单击 Internet Information Services (IIS) 管理器.
  2. 单击服务器节点。
  3. 双击 共享的配置 图标。
  4. 共享的配置 页上,单击以选中 启用共享的配置 复选框。
  5. 键入文件共享 (的物理路径\\<fileserver>\<share></share></fileserver>),用户帐户和密码,您以前,输入然后单击 应用 在中 操作 窗格。
  6. 在中 加密密钥密码 对话框中,键入加密密钥密码的更早版本,将设置,然后单击 确定.
  7. 在中 共享的配置 对话框中,单击 确定.
  8. 单击 确定.
注意有关如何在 IIS 中共享配置设置的详细信息,请访问下面的 Microsoft Web 站点:

在所有群集节点上配置 IIS 脱机文件共享配置

在每个群集节点上启用脱机文件:
  1. 安装桌面体验
    1. 定位到 管理工具然后单击 服务器管理器.
    2. 在左窗格中,单击 功能.
    3. 单击 添加功能 在右窗格中。
    4. 单击以选中 桌面体验 复选框。
    5. 单击 设置 安装桌面体验。
    6. 重新启动计算机。
  2. 在控制面板中,打开 脱机文件.
  3. 单击 启用脱机文件.这一次不要重新启动计算机。
  4. 确保缓存被设置为只读。若要执行此操作,请在提升的命令窗口中运行以下命令:
    REG ADD "HKLM\System\CurrentControlSet\Services\CSC\Parameters" /v ReadOnlyCache /t REG_DWORD /d 1 /f 
  5. 重新启动计算机。
  6. 从该计算机浏览到文件服务器。用鼠标右键单击包含 IIS 共享的配置中,该共享,然后单击 始终可用脱机.
    注意如果要将相同的故障转移群集的高可用性的文件共享设置时,它承载 IIS 节点,始终脱机可用选项不会出现,当右击共享如果是在群集节点承载高可用文件服务器时。您需要移动到另一个节点的高可用文件服务器应用程序。
  7. 在控制面板中,打开 脱机文件.单击 打开同步中心然后单击 日程安排.
  8. 对每一天或根据要求安排脱机文件同步。您还可以配置脱机同步运行每隔几分钟。即使您未设置上一个计划程序,Applicationhost.config 文件中的内容更改时,更改将反映在 Web 服务器上。
注意有关如何在 IIS 中配置共享配置为脱机文件的详细信息,请访问下面的 Microsoft Web 站点:

配置 Web 站点 (包括关联的应用程序池),并且一个群集节点上指定其内容的位置

找到拥有群集磁盘资源的群集节点的 Web 站点的内容文件所在的位置:
  1. 定位到 管理工具然后单击 故障转移群集管理器.
  2. 连接到群集。如果您是在其中一个群集节点上,群集将自动显示在列表中。
  3. 在下 存储查找 Web 页内容将驻留在其的磁盘资源。若要执行此操作,展开存储路径树中的磁盘资源。请确保存储不使用任何其他高可用性应用程序在群集上。您将发现在下的存储 可用的存储.
  4. 注意在群集节点的该资源处于联机状态。您将在该群集节点上配置 IIS。
  5. 注意群集磁盘资源名称。您将使用此内容的文件。
在群集节点上的资源处于联机状态,将配置 Web 服务器以使用 Web 站点的内容共享的磁盘:
  1. 定位到 管理工具然后单击 Internet Information Services (IIS) 管理器.
  2. 在左窗格中,展开服务器节点。
  3. 展开 站点然后在 站点单击您要配置的站点。
  4. 在右窗格中,选择 高级的设置 在下 管理网站.
  5. 定位 物理路径 在下的属性 常规 设置,然后键入网站内容文件的位置。这是在前一过程的步骤 5 中提到的群集磁盘资源的位置。
  6. 单击 确定.

创建故障转移群集管理器中的一个通用脚本来配置您的 Web 站点的高可用性

若要配置高可用性的 IIS Web 服务器中的最后一步,设置将用于监视的 Web 站点和网站应用程序池通用脚本资源:
  1. 在每个群集节点上,将本文结尾处的脚本复制到 Windows\System32\inetsrv\Clusweb7.vbs。
  2. 默认情况下,该脚本监视被命名为"默认 Web 站点"和"默认应用程序池"名为应用程序池的网站。如果这不是正确的网站,应用程序池,更改网站名称APP_POOL_NAME变量。请确保所有群集节点上的同一 Web 站点和应用程序池脚本中的存在。请注意名称是区分大小写。
  3. 定位到 管理工具然后单击 故障转移群集管理器.
  4. 连接到群集。如果您是在其中一个群集节点上,群集将自动显示在列表中。
  5. 用鼠标右键单击该群集,然后单击 配置服务或应用程序.向导将创建高可用性的工作负荷。
  6. 单击 通用脚本.
  7. 从下面的路径选择的脚本文件: %systemroot%\System32\Inetsrv\clusweb7.vbs
  8. 客户端将用于连接到高可用性 Web 站点的 Web 站点名称设置的客户端访问点 (CAP) 名称。指定要用于 Web 站点帽的静态 Ip。如果您使用的 DHCP,则将不显示此选项。
  9. 选择存储 单步执行,请选择 Web 站点的内容文件驻留的群集共享的磁盘。存储类型应为未由任何其他的高可用性群集上应用程序使用。请注意,如果文件共享,则使用 IIS 共享配置为驻留在同一个群集上,应在此处使用不同的磁盘资源。
  10. 确认这些设置后,向导将创建群集组,群集资源和资源之间的依赖关系,然后使资源联机。
注意若要承载相同的故障转移群集上的多个高可用性的 Web 站点,请按照与上述相同的步骤。但是,对于每个 Web 站点和其他群集共享的存储中使用不同的脚本文件。例如,%systemroot%\system32\inetsrv 中使用的第一个网站的第三个,第二,clweb7 3.vbs clweb7-2.vbs clusweb7.vbs 等。每个脚本文件用于监测站点不同的站点和应用程序池。

重要下面的脚本仅用于示例并不显式支持通过 Microsoft。在群集环境中的 IIS 7.0,IIS 7.5 或 IIS 8.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 web site, 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 neededOption ExplicitDIM SITE_NAMEDIM APP_POOL_NAMEDim START_WEB_SITEDim START_APP_POOLDim SITES_SECTION_NAMEDim APPLICATION_POOLS_SECTION_NAMEDim CONFIG_APPHOST_ROOTDim STOP_WEB_SITE'Note:'Replace this with the site and application pool you want to configure high availability for'Make sure that the same web site 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 = 0START_APP_POOL = 0STOP_WEB_SITE  = 1SITES_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 nodeFunction 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		     NextEnd Function'Find the index of the application pool on this nodeFunction 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		     NextEnd Function'Get the state of the websiteFunction 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").ValueEnd Function'Get the state of the ApplicationPoolFunction 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").ValueEnd Function'Start the w3svc service on this nodeFunction 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 websiteFunction 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 IfEnd Function'Start the websiteFunction 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 IfEnd Function'Stop the websiteFunction 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 startedFunction 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 websiteFunction Offline( )    StopWebSite()    Offline = trueEnd Function'Cluster resource LooksAlive entry point'Check for the health of the website and the application poolFunction 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 = trueEnd 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 hereFunction IsAlive()       IsAlive = LooksAliveEnd Function'Cluster resource Open entry pointFunction Open()    Open = trueEnd Function'Cluster resource Close entry pointFunction Close()    Close = trueEnd Function'Cluster resource Terminate entry pointFunction Terminate()    Terminate = trueEnd Function'<end script sample>

Warning: This article has been translated automatically

属性

文章 ID:970759 - 上次审阅时间:03/18/2013 09:03:00 - 修订版本: 1.0

  • Microsoft Internet Information Services 8.0
  • Microsoft Internet Information Services 7.5
  • Microsoft Internet Information Services 7.0
  • Windows Server 2012 Datacenter
  • Windows Server 2012 Standard
  • Windows Server 2008 R2 Datacenter
  • Windows Server 2008 R2 Enterprise
  • Windows Server 2008 Service Pack 2
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • kbclustering kbhowto kbsurveynew kbmt KB970759 KbMtzh
反馈