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

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

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故障转移群集(图文教程)插图

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

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

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

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

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

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

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

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

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

新建正向查找区域NET

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

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

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

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

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

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

测试解析

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

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

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

主机A创建群集TEST

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

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

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

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

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

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

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

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

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

主机B/C连接到群集TEST

主机B(192.168.0.25)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

继续关闭B主机

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

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

此时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:WindowsSystem32inetsrv主机A打开故障转移群集管理器 连接到群集TEST

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

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

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

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

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

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

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

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

配置IIS故障转移

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

注:

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

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

参考:

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

免费资源网 – https://freexyz.cn/


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容