WINDOWS2016故障转移群集(图文教程)

WIN2016故障转移群集

准备工作:

主机名

IP

域名

WINA

192.168.0.24

WINA.NET

WINB

192.168.0.25

WINB.NET

WINC

192.168.0.26

WINC.NET

所有主机配置主机信息 修改好主机名IP  DNS为本机IP   (以单台主机A为例)

WINDOWS2016故障转移群集(图文教程)_第1张图片

WINDOWS2016故障转移群集(图文教程)_第2张图片

互相ping测试连通性 (以单台主机A为例)

WINDOWS2016故障转移群集(图文教程)_第3张图片

所有主机安装角色功能 DNS和故障转移群集 (以单台主机A为例)

WINDOWS2016故障转移群集(图文教程)_第4张图片

WINDOWS2016故障转移群集(图文教程)_第5张图片

WINDOWS2016故障转移群集(图文教程)_第6张图片

WINDOWS2016故障转移群集(图文教程)_第7张图片

所有主机配置DNS解析记录 并测试解析

新建正向查找区域NET

WINDOWS2016故障转移群集(图文教程)_第8张图片

WINDOWS2016故障转移群集(图文教程)_第9张图片

WINDOWS2016故障转移群集(图文教程)_第10张图片

WINDOWS2016故障转移群集(图文教程)_第11张图片

WINDOWS2016故障转移群集(图文教程)_第12张图片

WINDOWS2016故障转移群集(图文教程)_第13张图片

WINDOWS2016故障转移群集(图文教程)_第14张图片

WINDOWS2016故障转移群集(图文教程)_第15张图片

WINDOWS2016故障转移群集(图文教程)_第16张图片

新建反向查找区域

WINDOWS2016故障转移群集(图文教程)_第17张图片

WINDOWS2016故障转移群集(图文教程)_第18张图片

WINDOWS2016故障转移群集(图文教程)_第19张图片

WINDOWS2016故障转移群集(图文教程)_第20张图片

WINDOWS2016故障转移群集(图文教程)_第21张图片

WINDOWS2016故障转移群集(图文教程)_第22张图片

WINDOWS2016故障转移群集(图文教程)_第23张图片

WINDOWS2016故障转移群集(图文教程)_第24张图片

新建正向查找区域记录 默认已生成本机记录

WINDOWS2016故障转移群集(图文教程)_第25张图片

WINDOWS2016故障转移群集(图文教程)_第26张图片

WINDOWS2016故障转移群集(图文教程)_第27张图片

WINDOWS2016故障转移群集(图文教程)_第28张图片

WINDOWS2016故障转移群集(图文教程)_第29张图片

WINDOWS2016故障转移群集(图文教程)_第30张图片

WINDOWS2016故障转移群集(图文教程)_第31张图片

新建反向查找记录  (我们新建正向记录勾选了PTR指针 默认已经新建了B/C主机的反向记录) 现在只需新建一条本机的PTR记录

WINDOWS2016故障转移群集(图文教程)_第32张图片

WINDOWS2016故障转移群集(图文教程)_第33张图片

WINDOWS2016故障转移群集(图文教程)_第34张图片

测试解析

WINDOWS2016故障转移群集(图文教程)_第35张图片

WINDOWS2016故障转移群集(图文教程)_第36张图片

A主机配置故障转移群集 B/C主机连接到群集 指定虚拟IP192.168.0.88

主机A创建群集TEST

WINDOWS2016故障转移群集(图文教程)_第37张图片

WINDOWS2016故障转移群集(图文教程)_第38张图片

WINDOWS2016故障转移群集(图文教程)_第39张图片

WINDOWS2016故障转移群集(图文教程)_第40张图片

WINDOWS2016故障转移群集(图文教程)_第41张图片

WINDOWS2016故障转移群集(图文教程)_第42张图片

WINDOWS2016故障转移群集(图文教程)_第43张图片

WINDOWS2016故障转移群集(图文教程)_第44张图片

WINDOWS2016故障转移群集(图文教程)_第45张图片

主机B/C连接到群集TEST

主机B(192.168.0.25)

WINDOWS2016故障转移群集(图文教程)_第46张图片

WINDOWS2016故障转移群集(图文教程)_第47张图片

查看群集当前在用主机为哪台  (网卡应有88IP)

WINDOWS2016故障转移群集(图文教程)_第48张图片

所有主机安装IIS    80端口为默认网页 访问测试

WINDOWS2016故障转移群集(图文教程)_第49张图片

WINDOWS2016故障转移群集(图文教程)_第50张图片

WINDOWS2016故障转移群集(图文教程)_第51张图片

WINDOWS2016故障转移群集(图文教程)_第52张图片

WINDOWS2016故障转移群集(图文教程)_第53张图片

WINDOWS2016故障转移群集(图文教程)_第54张图片

WINDOWS2016故障转移群集(图文教程)_第55张图片

WINDOWS2016故障转移群集(图文教程)_第56张图片

WINDOWS2016故障转移群集(图文教程)_第57张图片

关闭掉在用主机(网卡有88的主机 同时只会有一台)  查看在用主机被选为了哪台 192.168.0.88:80是否还可以打开 (使用网络中其他主机来打开网页)

关闭掉A主机后 B主机拥有了88IP 网页依然可以打开

WINDOWS2016故障转移群集(图文教程)_第58张图片

WINDOWS2016故障转移群集(图文教程)_第59张图片

继续关闭B主机

WINDOWS2016故障转移群集(图文教程)_第60张图片

WINDOWS2016故障转移群集(图文教程)_第61张图片

此时C主机拥有了88IP  网页依然可以打开

参考:

https://blog.csdn.net/demonson/article/details/81708809

注:

经后期测试 建议不要将群集所有主机全部宕机 否则会出现问题

进阶:

以上内容为群集搭建及群集中某主机宕机后恢复业务的情况

下面记录一种主机没有宕机 IIS站点挂掉无法提供服务的情况  

新建文本文档 修改为IIS.vbs  内容如下(虚线内内容)  注意修改网站和应用程序池名称(默认无需修改)

'

 

 

'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

'

将文件复制到所有群集主机的相同目录下 如:C:\Windows\System32\inetsrv主机A打开故障转移群集管理器 连接到群集TEST

WINDOWS2016故障转移群集(图文教程)_第62张图片

WINDOWS2016故障转移群集(图文教程)_第63张图片

WINDOWS2016故障转移群集(图文教程)_第64张图片

WINDOWS2016故障转移群集(图文教程)_第65张图片

WINDOWS2016故障转移群集(图文教程)_第66张图片

WINDOWS2016故障转移群集(图文教程)_第67张图片

WINDOWS2016故障转移群集(图文教程)_第68张图片

WINDOWS2016故障转移群集(图文教程)_第69张图片

配置IIS故障转移

WINDOWS2016故障转移群集(图文教程)_第70张图片

WINDOWS2016故障转移群集(图文教程)_第71张图片

WINDOWS2016故障转移群集(图文教程)_第72张图片

WINDOWS2016故障转移群集(图文教程)_第73张图片

此时我们在群集下角色列表里可以看到IIS故障转移群集角色

WINDOWS2016故障转移群集(图文教程)_第74张图片

查看一下WINC(192.168.0.26)主机的网卡情况

WINDOWS2016故障转移群集(图文教程)_第75张图片

测试访问http://192.168.0.99  --------  可以打开

WINDOWS2016故障转移群集(图文教程)_第76张图片

现在我们模拟WINC主机IIS网页服务挂掉/端口无法访问 打开WINC主机IIS管理器 展开网页 停止默认网站

WINDOWS2016故障转移群集(图文教程)_第77张图片

再次打开浏览器 打开http://192.168.0.99  ----- 依然可以打开

WINDOWS2016故障转移群集(图文教程)_第78张图片

主机A上查看群集角色 已经自动切换到WINB提供web服务

WINDOWS2016故障转移群集(图文教程)_第79张图片

查看WINB主机网卡信息   99IP已自动切换到WINB 我们打开的是WINB的网页

WINDOWS2016故障转移群集(图文教程)_第80张图片

同理 我们关闭WINB的IIS网站 99又会切换到WINA 访问依然不受影响

WINDOWS2016故障转移群集(图文教程)_第81张图片

至此 我们实现了 主机在非宕机情况下 IIS站点挂掉后切换主机提供服务的情况

注:

1、本测试中99IP对应的不是整个IIS服务 只是一个站点(默认站点)

2、用户上传的附件需要一个群集共用的存储介质 目前还未解决 待完善

参考:

https://www.cnblogs.com/alanlau/archive/2011/08/25/2153472.html

到此这篇关于WINDOWS2016故障转移群集(图文教程)的文章就介绍到这了,更多相关WINS2016故障转移群集内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(WINDOWS2016故障转移群集(图文教程))