IIS故障转移群集安装

时间:2021-10-26 01:12:22

IIS故障转移群集安装

以下配置故障转移功能配置适应win2008r2企业版和数据中心版本,标准版和其它版不适应

 

Windows Server 2008故障转移群集类似,所说的故障转移群集的新特征并不是对所有的Windows Server 2008 R2版本都适用的。只适用于Windows Server 2008 R2企业版和Windows Server 2008 R2数据中心,不适用Windows Web Server 2008 R2和Windows Server 2008R2标准版。

1.安装准备:

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

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

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

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

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

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

2. 计算机加入域

1. 首先打开【计算机右键】,然后依次打开【属性】→【计算机名】→点击【更改】如下图加入域即可,之后【确定】再【确定】就可以了。

 

 

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

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

2. 点击【安装】按钮。

3. 安装中。

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

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

 

3. IIS服务功能安装

http://wenku.baidu.com/link?url=6pkHYwEsWP9UkKP1KOQIT5JuD4Oaa12fFbeGbwtOEz1MHICSWM6D2mwjA8A7giZP2WyD5-_q6bsY9VjmzAyBQpA-SBlfZJX61pokKVxI2PO

以下地址有更详细的安装和配置过程如果有想知道更详细的配置可以直接打开网址进一步查看。

 

 

4. 添加群集

在主服务器上:

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

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

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

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

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

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

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

5. 添加vbs脚本文件

'<begin script sample>

 

 

'This script provides highavailability 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 applicationpool, change the APP_POOL_NAME below

'More thorough andapplication-specific health monitoring logic can be added to the script ifneeded

 

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 andapplication pool you want to configure high availability for

'Make sure that the same web siteand application pool in the script exist on all cluster nodes. Note that thenames 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 onthis node

Function FindSiteIndex(collection,siteName)

 

    Dim i

 

    FindSiteIndex= -1   

 

    For i = 0 To (CInt(collection.Count) - 1)

        If collection.Item(i).GetPropertyByName("name").Value = siteNameThen

            FindSiteIndex= i

            Exit For

        End If      

    Next

 

End Function

 

 

'Find the index of theapplication 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 = appPoolNameThen

            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 theApplicationPool

Function GetAppPoolState(adminManager,appPool)

 

    Dim configSection, index, appPoolState

 

    setconfigSection = 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 thisnode

Function StartW3SVC()

 

    Dim objWmiProvider

    Dim objService

    Dim strServiceState

    Dim response

 

    'Check tosee if the service is running

    setobjWmiProvider = GetObject("winmgmts:/root/cimv2")

    setobjService = objWmiProvider.get("win32_service='w3svc'")

    strServiceState= objService.state

 

    If ucase(strServiceState) = "RUNNING" Then

        StartW3SVC= True

    Else

        'Ifthe 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 forthe 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 ifit is already started

    If appPool.GetPropertyByName("state").Value = 1 Then

        StartAppPool= True

        Exit Function

    End If

 

    'Try Tostart the application pool

    Set appPoolMethods = appPool.Methods

    Set startMethod = appPoolMethods.Item(START_APP_POOL)

    Set callStartMethod = startMethod.CreateInstance()

    callStartMethod.Execute()

     

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

 

    ifsiteSection.GetPropertyByName("state").Value = 1 Then

        'Siteis already started

        StartWebSite= True

        Exit Function

    End If

 

    'Try tostart site

    Set siteMethods = siteSection.Methods

    Set startMethod = siteMethods.Item(START_WEB_SITE)

    Set executeMethod = startMethod.CreateInstance()

    executeMethod.Execute()

 

    'Check tosee 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 thesite

    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 entrypoint

'Make sure the website and theapplication pool are started

Function Online( )

 

    Dim bOnline

    'Makesure w3svc is started

    bOnline =StartW3SVC()

 

    If bOnline <> True Then

        Resource.LogInformation"The resource failed to come online because w3svc could not bestarted."

        Online= False

        Exit Function

    End If

 

 

    'Makesure the application pool is started

    bOnline =StartAppPool()

    If bOnline <> True Then

        Resource.LogInformation"The resource failed to come online because the application pool could notbe started."

        Online= False

        Exit Function

    End If

 

 

    'Makesure the website is started

    bOnline =StartWebSite()

    If bOnline <> True Then

        Resource.LogInformation"The resource failed to come online because the web site could not bestarted."

        Online= False

        Exit Function

    End If

 

    Online =true

 

End Function

 

  

'Cluster resource offline entrypoint

'Stop the website

Function Offline( )

 

    StopWebSite()

    Offline =true

 

End Function

 

 

'Cluster resource LooksAlive entrypoint

'Check for the health of thewebsite 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 thestate of the website

    ifGetWebSiteState(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 thestate of the Application Pool

     ifGetAppPoolState(adminManager, APP_POOL_NAME) <> 1 Then

         Resource.LogInformation"The resource failed because Application Pool " & APP_POOL_NAME & " is not started."

         LooksAlive= false 

     Exit Function

     endif

 

     ' Web site and Application Pool state are valid return true

     LooksAlive= true

End Function

 

 

'Cluster resource IsAlive entrypoint

'Do the same health checks asLooksAlive

'If a more thorough than what wedo in LooksAlive is required, this should be performed here

Function IsAlive()  

 

    IsAlive =LooksAlive

 

End Function

 

 

'Cluster resource Open entrypoint

Function Open()

 

    Open =true

 

End Function

 

 

'Cluster resource Close entrypoint

Function Close()

 

    Close =true

 

End Function

 

 

'Cluster resource Terminate entrypoint

Function Terminate()

 

    Terminate= true

 

End Function

'<end script sample>

 

 

6. 添加服务应用程序

在主服务器上:

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

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

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

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

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

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

7. 配置服务应用程序

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

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

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

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