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为例)


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

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




所有主机配置DNS解析记录 并测试解析
新建正向查找区域NET









新建反向查找区域








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







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



测试解析


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









主机B/C连接到群集TEST
主机B(192.168.0.25)


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

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









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


继续关闭B主机


此时C主机拥有了88IP 网页依然可以打开
参考:
https://blog.csdn.net/demonson/article/details/81708809
注:
经后期测试 建议不要将群集所有主机全部宕机 否则会出现问题
进阶:
以上内容为群集搭建及群集中某主机宕机后恢复业务的情况
下面记录一种主机没有宕机 IIS站点挂掉无法提供服务的情况
新建文本文档 修改为IIS.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>
将文件复制到所有群集主机的相同目录下 如:C:\Windows\System32\inetsrv主机A打开故障转移群集管理器 连接到群集TEST








配置IIS故障转移




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

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

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

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

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

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

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

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

至此 我们实现了 主机在非宕机情况下 IIS站点挂掉后切换主机提供服务的情况
注:
1、本测试中99IP对应的不是整个IIS服务 只是一个站点(默认站点)
2、用户上传的附件需要一个群集共用的存储介质 目前还未解决 待完善
参考:
https://www.cnblogs.com/alanlau/archive/2011/08/25/2153472.html
到此这篇关于WINDOWS2016故障转移群集(图文教程)的文章就介绍到这了,更多相关WINS2016故障转移群集内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!