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為例)
互相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故障轉移群集內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 詳解JVM之運行時常量池
- Python+Selenium實現一鍵摸魚&采集數據
- 淺析Python實現DFA算法
- ThinkPHP基於think-queue的隊列插件實現消息推送
- Go實現Redis連接池方法