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故障转移群集内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/weixin_42256332/article/details/89151749