IIS故障转移群集安装

具体参考MSDN:http://support.microsoft.com/kb/970759/

 

1.安装准备:

1. 所有集群服务器都必须加入域。

2. 所有集群服务器都需要安装故障转移群集功能和IIS服务。

3. 所有集群服务器部署的网站名称、内容和应用程序池名必须一致。

4. 所有集群服务器都部署vbs脚本文件并配置相同的路径。

5. 只需要在主集群服务器上添加群集和服务应用程序即可。

6. 每个网站对应一个vbs脚本文件,每个网站需要配置一个服务应用程序。

2. 故障转移群集功能安装

1. 首先打开【开始】菜单,然后依次打开【控制面板】→【管理工具】→【服务器管理器】,选择左边的【功能】,在右边页面点击【添加功能】。勾选【故障转移群集】,点击【下一步】按钮。

clip_image002

2. 点击【安装】按钮。

clip_image004

3. 安装中。

clip_image006

4. 安装成功,点击【关闭】按钮完成安装。

clip_image008

5. 在群集的每一台服务器上按照以上步骤安装故障服务功能。

3. 添加群集

在主服务器上:

1. 首先打开【开始】菜单,然后依次打开【控制面板】→【管理工具】→【故障转移群集管理器】,点击【创建一个群集(C)…】

clip_image010

2. 点击【下一步】按钮。

clip_image012

3. 输入需要配置为群集的服务器的名称,点击【添加】按钮加入下方列表,也可以点击【浏览】按钮选择;输入完全后,点击【下一步】按钮。

clip_image014

4. 输入一个群集名称,设定一个未被使用的IP地址,点击【下一步】按钮。

clip_image016

5. 点击【下一步】按钮。

clip_image018

clip_image020

6. 添加群集成功,点击【完成】按钮退出。

clip_image022

7. 完成后,在左侧窗口会出现群集。节点就包含了之前选择的服务器,因此它们的故障转移群集管理器中也会出现这个群集。

clip_image024

4. 添加vbs脚本文件

1. Vbs脚本代码如下,需要修改SITE_NAME和APP_POOL_NAME,分别对应架设的网站名和应用程序池名。

将文件拷贝到每台服务器的C:\Windows\System32\inetsrv目录下。

vbs脚本代码如下:

'<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>

 

5. 添加服务应用程序

在主服务器上:

1. 右击【服务和应用程序】,选择【配置服务或应用程序(S)…】

clip_image002[4]

2. 点击【下一步】按钮。

clip_image004[4]

3. 选择【通用脚本】,点击【下一步】按钮。

clip_image006[4]

4. 输入vbs文件的路径,每台服务器上都必须是同样的路径(比如文件名是clusweb7.vbs),点击【下一步】按钮。

clip_image008[4]

5. 设置对外公开访问点的名称以及IP地址,点击【下一步】按钮。

clip_image010[4]

6. 以后的步骤点击【下一步】按钮,直到配置完成,点击【完成】按钮完成添加服务应用程序。

clip_image012[4]

6. 配置服务应用程序

1. 默认出现故障是不能自动转移的,需要进行设置。在左侧窗口点击刚刚新建的服务和应用程序,在右侧窗口点击【属性】。

clip_image014[4]

2. 选择【故障转移】选项卡,下图的配置是指6个小时之内出现故障的次数大于等于1次,不会执行自动转移,这里修改完之后点击【确定】按钮保存退出。

clip_image016[4]

3. 选择vbs脚本文件,右击选择【属性】。

clip_image018[4]

4. 选择【策略】选项卡,设定指定时段内重新启动的最多次数为0(这样设定后当前使用的服务器出现故障后不会自动尝试重启IIS服务,而是直接执行故障转移),点击【确定】按钮保存退出,至此全部安装设置完毕。

clip_image020[4]

posted @ 2011-08-25 16:27  alanlau  阅读(3455)  评论(0编辑  收藏  举报