zoukankan      html  css  js  c++  java
  • 在Windows 2008/2008 R2 上配置IIS 7.0/7.5 故障转移集群

    本文主要是从:http://support.microsoft.com/kb/970759/zh-cn,直接转载,稍作修改裁剪而来,其中红色粗体部分,是我特别要说明的

    若要配置 IIS 7.0 和 7.5 Web 服务器使用故障转移群集的高可用性,请按照下列步骤。下面更详细地介绍步骤 3 到步骤 7。本文内下文中的示例脚本可以用作任务的示例 IIS 7.0、 IIS 7.5 和 IIS 8.0。  其实应该还有DNS,AD,iscsi target 服务配置

    1. 在所有群集节点上安装 Web 服务器角色。有关详细信息,请访问下面的 Microsoft 网站:
      http://technet.microsoft.com/en-us/library/cc771752.aspx
    2. 在所有群集节点上安装的故障转移群集功能,并创建群集。有关详细信息,请访问下面的 Microsoft 网站:
      http://technet.microsoft.com/en-us/library/dd197477.aspx
    3. 设置将用于 IIS 共享配置文件共享。
    4. 在所有群集节点上配置 IIS 共享的配置。
    5. 在所有群集节点上配置 IIS 脱机配置文件的共享。  这一步可以不做,我就没做
    6. 配置 Web 站点 (包括关联的应用程序池),并且一个群集节点上指定其内容的位置。
    7. 通过创建一个通用脚本,在故障转移群集中配置您的 Web 站点的高可用性。

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

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

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

    注意:没有与 IIS 共享服务器上配置 Windows 2008 因为缺少权限应用程序主机帮助器服务的问题。为共享配置工作,您必须执行以下步骤,Windows 2008 服务器上的 IIS 共享配置设置时。

    1. 打开管理的命令提示符。
    2. 运行以下命令:
      net stop apphostsvc
    3. 运行以下命令:
      sc privs apphostsvc SeImpersonatePrivilege/SeChangeNotifyPrivilege/SeTcbPrivilege   这一行命令,原始的中文文档有问题,我改过
    4. 运行以下命令:
      net start apphostsvc   这一行命令,原始的中文文档有问题,我改过

    完成这些步骤在群集中的每个 Windows 2008 服务器后,请在本节中继续设置 IIS 共享的配置,如所述。

    在其中一个群集节点上的文件共享导出共享的配置:

    1. 导航到管理工具,然后单击Internet Information Services (IIS) 管理器
    2. 在左窗格中,单击服务器名称节点。
    3. 双击共享配置图标。
    4. 在共享配置页中,单击导出配置导出配置文件操作窗格 (右窗格) 中从本地计算机到另一个位置。
    5. 将配置导出对话框中,键入文件共享的路径 (\ < 文件服务器 > < 共享 >) 中的物理路径框。
    6. 单击连接,然后键入用户名和密码的用户帐户具有访问该共享的共享的配置存储,然后单击确定此帐户将用于访问共享资源。您应使用受限的 Active Directory 帐户不是域管理员。
    7. 将配置导出对话框中,键入一个密码,用以保护加密密钥,然后单击确定
    8. 共享配置页中,单击以选中启用共享的配置复选框。
    9. 键入物理路径、 用户帐户,以及以前,您输入的密码,然后单击操作窗格中的应用
    10. 加密密钥密码对话框中,键入加密密钥密码的更早版本,将设置,然后单击确定
    11. 共享配置对话框中,单击确定
    12. 单击确定

    在每个其他群集节点,请使用您刚导出的文件共享的共享的配置:
    假如你这个共享存储是同一个故障转移集群中做的,必须要将相关的资源,切换到这台机器上,才能做

    1. 导航到管理工具,然后单击Internet Information Services (IIS) 管理器
    2. 单击服务器名称节点。
    3. 双击共享配置图标。
    4. 共享配置页中,单击以选中启用共享的配置复选框。
    5. 键入该文件共享的物理路径 (\ < 文件服务器 > < 共享 >),该用户帐户,并且密码之前,输入然后在操作窗格中单击应用
    6. 加密密钥密码对话框中,键入加密密钥密码的更早版本,将设置,然后单击确定
    7. 共享配置对话框中,单击确定
    8. 单击确定

    注意:有关如何设置共享配置 IIS 中的详细信息,请访问下面的 Microsoft 网站:

    http://learn.iis.net/page.aspx/264/shared-configuration

    在所有群集节点上配置 IIS 脱机文件共享配置(似乎这一步不做也是可以的,我就没做

    在每个群集节点上,启用脱机文件:

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

    注意:有关如何在 IIS 中配置共享配置为脱机文件的详细信息,请访问下面的 Microsoft 网站:

    http://learn.iis.net/page.aspx/212/offline-files-for-shared-configuration

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

    查找拥有群集磁盘资源的群集节点的 Web 站点的内容文件所在的位置:

    1. 导航到管理工具,然后单击故障转移群集管理器
    2. 连接到群集。如果您是在一个群集节点上,群集将自动显示在列表中。
    3. 存储下查找网页内容将驻留在其的磁盘资源。若要执行此操作,展开存储树中的磁盘资源。请确保存储未由任何其他高可用性应用程序在群集上。您会发现在可用存储下的存储。
    4. 注意群集节点的该资源处于联机状态。您将在该群集节点上配置 IIS。
    5. 注意群集磁盘资源名称。您将使用此内容的文件。

    在群集节点上的资源处于联机状态,Web 服务器配置为使用 Web 站点的内容的共享的磁盘:

    1. 导航到管理工具,然后单击Internet Information Services (IIS) 管理器
    2. 在左窗格中,展开服务器节点。
    3. 展开网站,然后单击站点下的正在配置的站点。
    4. 在右窗格中,选择管理 Web 站点下的高级设置
    5. 找到的物理路径属性在常规设置,然后键入在 Web 站点的内容文件的位置的位置。这是您在前一过程的第 5 步中记下的群集磁盘资源的位置。♢其实这个群集磁盘资源,有安全方面的要求,域账号有读写权限,包括以后新建的虚拟应用程序,使用新的群集磁盘资源,也要设置域账号有读写权限。♢ 对于ASP.NET 应用程序,还要设置该域账号对C:WindowsMicrosoft.NETFramework64v2.0.50727Temporary ASP.NET Files 有读写的权限 ♢ 应用程序的物理路径凭据,也要设置为该域账号
    6. 单击确定

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

    若要配置高可用性的 IIS Web 服务器中的最后一步,设置可用于监视的 Web 站点和网站应用程序池通用脚本资源:

    1. 在每个群集节点上,WindowsSystem32inetsrvClusweb7.vbs 将这篇文章的末尾此脚本。 注意这个脚本不能保存带有编码格式的
    2. 默认情况下,脚本监视网站名为"默认 Web 站点"和名为"默认应用程序池"应用程序池。如果这不是正确的 Web 站点和应用程序池,更改网站名称APP_POOL_NAME变量。请确保所有群集节点上存在相同的 Web 站点和应用程序池脚本中。请注意名称区分大小写。
    3. 导航到管理工具,然后单击故障转移群集管理器
    4. 连接到群集。如果您是在一个群集节点上,群集将自动显示在列表中。
    5. 用鼠标右键单击该群集,然后单击配置服务或应用程序向导将创建高可用性的工作负荷。
    6. 单击通用脚本
    7. 从以下路径中选择脚本文件: %systemroot%System32Inetsrvclusweb7.vbs
    8. 客户端将用于连接到高可用性的 Web 站点的 Web 站点名称设置的客户端访问点 (CAP) 的名称。指定静态的 Ip 用于首字下沉的网站。如果您使用的 DHCP,则将不显示此选项。
    9. 选择存储步骤中,选择 Web 站点内容文件驻留在其的群集共享的磁盘。存储类型应为未使用任何其他高可用性应用程序在群集上。请注意是否用于 IIS 共享配置文件共享同一个群集上,此处应能使用不同的磁盘资源。
    10. 确认这些设置后,该向导将创建群集组,群集资源和资源之间的依赖关系,然后使资源联机。

    注意:若要承载相同的故障转移群集上的多个高可用性的 Web 站点,请按照与上述相同的步骤。但是,为每个 Web 站点和其他群集的共享的存储使用一个不同的脚本文件。例如,%systemroot%system32inetsrv 中使用的第一个网站的第三个,第二,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 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 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 = 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>

  • 相关阅读:
    【Vue】状态管理
    【Vue】路由
    【Vue】组件
    【Vue】基础(数据 & 计算属性 & 方法)
    【Vue】基础(虚拟DOM & 响应式原理)
    【Vue】基础(生命周期 & 常用指令)
    【Vue】搭建开发环境
    【Mongodb】事务
    【Mongodb】视图 && 索引
    【Mongodb】聚合查询 && 固定集合
  • 原文地址:https://www.cnblogs.com/SharkXu/p/IIS7CLUSTER.html
Copyright © 2011-2022 走看看