轉(zhuǎn)眼已經(jīng)是2018年了,真快啊,在這里老王首先祝福各位博友新的一年身體健康,事業(yè)順利,在新的一年里老王仍然會(huì)繼續(xù)為大家分享微軟企業(yè)級(jí)技術(shù),也歡迎大家與我一同探討,共同學(xué)習(xí),這新年第一篇老王想和大家聊聊WSFC的群集數(shù)據(jù)庫(kù),以及和它相關(guān)的一些組件
成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為埇橋區(qū)等服務(wù)建站,埇橋區(qū)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為埇橋區(qū)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
首先,我們回憶下之前介紹過的群集基礎(chǔ)概念,里面有提到Windows群集的運(yùn)作機(jī)制,群集在運(yùn)作過程中會(huì)產(chǎn)生一個(gè)群集數(shù)據(jù)庫(kù),存放在各節(jié)點(diǎn)注冊(cè)表中,如果有磁盤見證也會(huì)存放在磁盤見證一份,群集會(huì)把各節(jié)點(diǎn)的狀況,以及節(jié)點(diǎn)承載的群集角色紛紛記錄在注冊(cè)表中,然后在各節(jié)點(diǎn)與磁盤見證上復(fù)制,當(dāng)其中一個(gè)節(jié)點(diǎn)宕機(jī),群集協(xié)調(diào)其它活著的節(jié)點(diǎn)檢查自身的群集數(shù)據(jù)庫(kù)注冊(cè)表,查看宕機(jī)節(jié)點(diǎn)承載的角色,進(jìn)行failover
因此大家可以看出,群集數(shù)據(jù)庫(kù)儲(chǔ)存了群集運(yùn)作過程中節(jié)點(diǎn)狀態(tài),群集狀態(tài),群集角色狀態(tài)等配置數(shù)據(jù),它需要被復(fù)制到各個(gè)節(jié)點(diǎn),當(dāng)災(zāi)難發(fā)生時(shí)其它節(jié)點(diǎn)會(huì)參照群集數(shù)據(jù)庫(kù)進(jìn)行failover,因此如果重要的群集,應(yīng)該針對(duì)于群集節(jié)點(diǎn)OS進(jìn)行備份,系統(tǒng)狀態(tài)中會(huì)包括群集數(shù)據(jù)庫(kù)
群集數(shù)據(jù)庫(kù)注冊(cè)表位置,位于各節(jié)點(diǎn)HKEY_LOCAL_MACHINE\Cluster單元下,可以在里面看到群集的配置,各節(jié)點(diǎn)的狀態(tài),群集角色的配置
其中paxos標(biāo)記為2008開始WSFC新增的功能,在2008之前,群集只有“仲裁驅(qū)動(dòng)器”會(huì)保存一份群集數(shù)據(jù)庫(kù)的最新副本,各個(gè)節(jié)點(diǎn)都需要和仲裁盤進(jìn)行同步,由仲裁盤復(fù)制群集數(shù)據(jù)庫(kù)到各節(jié)點(diǎn),各節(jié)點(diǎn)在關(guān)機(jī)重啟后也必須連接到仲裁盤同步下載群集數(shù)據(jù)庫(kù),如果仲裁盤出現(xiàn)故障,則群集將無(wú)法啟動(dòng),因此在2008之前,仲裁磁盤成為了單一故障點(diǎn),2008開始,群集引入了paxos標(biāo)記的機(jī)制,每個(gè)節(jié)點(diǎn)本身都可以保存群集數(shù)據(jù)庫(kù)最新副本,如果某個(gè)節(jié)點(diǎn)修改群集數(shù)據(jù),則該節(jié)點(diǎn)paxos標(biāo)記增加,隨后各節(jié)點(diǎn)感應(yīng)到有更新的paxos標(biāo)記,會(huì)自動(dòng)與其同步群集數(shù)據(jù)庫(kù)內(nèi)容,當(dāng)節(jié)點(diǎn)宕機(jī)恢復(fù)后,會(huì)對(duì)比自身paxos標(biāo)記與磁盤見證paxos標(biāo)記,如果如果磁盤見證更新,則與其同步后上線,如果磁盤見證檢測(cè)到群集節(jié)點(diǎn)有更新paxos標(biāo)記的群集數(shù)據(jù)庫(kù)也會(huì)與其同步
默認(rèn)情況下節(jié)點(diǎn)群集服務(wù)每次啟動(dòng)都會(huì)檢查群集數(shù)據(jù)庫(kù)注冊(cè)表配置單元,確保完整才可以正常啟動(dòng)群集,如果非最新,則需與其他節(jié)點(diǎn)或磁盤見證同步群集數(shù)據(jù)庫(kù),如果節(jié)點(diǎn)群集服務(wù)未啟動(dòng),則不會(huì)加載群集數(shù)據(jù)庫(kù)注冊(cè)表配置單元,除了我們說(shuō)的每個(gè)節(jié)點(diǎn)本身的群集數(shù)據(jù)庫(kù)注冊(cè)表單元,如果節(jié)點(diǎn)是見證磁盤所在節(jié)點(diǎn),還會(huì)額外加載一個(gè)0.Cluster配置單元,非見證磁盤所有者節(jié)點(diǎn),不會(huì)加載這個(gè)配置單元
在群集數(shù)據(jù)庫(kù)注冊(cè)表中我們可以看到關(guān)于群集的配置信息,在碰見一些棘手的問題時(shí)我們也許會(huì)需要改動(dòng)它們,例如有一些資源沒辦法圖形界面或命令行界面刪除,這時(shí)候就可以在注冊(cè)表里面進(jìn)行刪除處理,但是官方并不建議這樣做,以下為官方推薦做法:刪除群集資源的標(biāo)準(zhǔn)操作,建議采用標(biāo)準(zhǔn)做法,輕易不要直接操作注冊(cè)表
除了注冊(cè)表,我們?cè)诹硗庖粋€(gè)位置也可以找到關(guān)于群集數(shù)據(jù)庫(kù)的文件,C:\Windows\Cluster目錄中,事實(shí)上CLUSDB正是群集數(shù)據(jù)庫(kù)的實(shí)體存在,每次群集服務(wù)啟動(dòng)時(shí)都會(huì)將CLUSDB加載到注冊(cè)表配置單元,我們只有從注冊(cè)表配置單元才可以看到群集數(shù)據(jù)庫(kù)的內(nèi)容,至于為什么要設(shè)計(jì)成這樣的架構(gòu),老王猜想可能是因?yàn)閮?chǔ)存為文件格式更易于各節(jié)點(diǎn)間傳輸,或者備份恢復(fù)操作。
打開群集見證磁盤,可以看到0.Hive的磁盤文件,它將會(huì)被加載到見證磁盤所在節(jié)點(diǎn)的注冊(cè)表配置單元
下面我們來(lái)實(shí)際驗(yàn)證下群集數(shù)據(jù)庫(kù)的同步,首先,我們隨便在一個(gè)節(jié)點(diǎn)上面修改群集的配置
修改前節(jié)點(diǎn)paxos標(biāo)記
修改后節(jié)點(diǎn)paxos標(biāo)記
其它節(jié)點(diǎn)檢測(cè)到其它節(jié)點(diǎn)有paxos標(biāo)記更新,與其同步群集數(shù)據(jù)庫(kù),同步完成后paxos標(biāo)記為最新
0.Cluster 見證磁盤注冊(cè)表單元也同步群集數(shù)據(jù)庫(kù)為最新,paxos標(biāo)記更新一致
其它節(jié)點(diǎn)查看群集注冊(cè)表,可以看到同步后最新的群集數(shù)據(jù)庫(kù)配置
0.Cluster見證磁盤注冊(cè)表單元 也可以看到同步后最新的群集數(shù)據(jù)庫(kù)配置
查看群集日志
此為后來(lái)老王又修改了一次群集實(shí)時(shí)遷移網(wǎng)絡(luò)后的分析
GUM (Global Update Manager) ,檢測(cè)到有節(jié)點(diǎn)群集配置發(fā)生變化,有paxos更新,提醒Node2節(jié)點(diǎn)與其更新,Node2節(jié)點(diǎn)收到請(qǐng)求后與Node1同步最新群集數(shù)據(jù)庫(kù)
接收到GUM的信號(hào)后接下來(lái)由Database Manager組件負(fù)責(zé)數(shù)據(jù)庫(kù)同步,進(jìn)一步我們可以看出,具體同步的是那些注冊(cè)表鍵值,由此可見,每次群集數(shù)據(jù)庫(kù)是增量的,僅同步修改后的內(nèi)容,同步完成后,確保群集數(shù)據(jù)庫(kù)已為最新,更新節(jié)點(diǎn)paxos標(biāo)記
對(duì)于群集數(shù)據(jù)庫(kù)的處理,磁盤見證和文件共享見證,云見證有所不同,如上所述,磁盤見證中也保存著群集數(shù)據(jù)庫(kù)的副本,使用CLFS組件與DM組件,確保磁盤見證內(nèi)數(shù)據(jù)庫(kù)文件為最新,而文件共享和云見證,則不會(huì)在目錄中存放群集數(shù)據(jù)庫(kù)副本,只是負(fù)責(zé)存放一個(gè)日志,記錄著群集當(dāng)前那個(gè)節(jié)點(diǎn)擁有最新的paxos標(biāo)記
之前老王曾經(jīng)和大家說(shuō)過一個(gè)時(shí)間分區(qū)場(chǎng)景的問題,節(jié)點(diǎn)1,節(jié)點(diǎn)2,使用文件共享見證或云見證,節(jié)點(diǎn)1宕機(jī),節(jié)點(diǎn)2修改了群集配置內(nèi)容,然后節(jié)點(diǎn)2宕機(jī),節(jié)點(diǎn)1開機(jī)上線,會(huì)發(fā)現(xiàn)無(wú)法聯(lián)機(jī),為什么,因?yàn)镚UM組件會(huì)發(fā)現(xiàn)當(dāng)前節(jié)點(diǎn)1沒有最新的群集數(shù)據(jù)庫(kù),所以會(huì)阻止該節(jié)點(diǎn)聯(lián)機(jī),這時(shí)除非強(qiáng)制仲裁才可以啟動(dòng)節(jié)點(diǎn)1,但是啟動(dòng)后節(jié)點(diǎn)1為黃金副本,節(jié)點(diǎn)2再開機(jī)會(huì)丟失之前修改過的內(nèi)容。
如果是見證磁盤則不會(huì),同樣的場(chǎng)景,如果節(jié)點(diǎn)2修改內(nèi)容,節(jié)點(diǎn)1不在,那么修改的內(nèi)容會(huì)被同步至見證磁盤,也就是0.Cluster注冊(cè)表單元內(nèi)容,然后當(dāng)節(jié)點(diǎn)1聯(lián)機(jī)上線,GUM會(huì)檢測(cè)對(duì)比,告知節(jié)點(diǎn)1,你的群集數(shù)據(jù)庫(kù)當(dāng)前不是最新的,需要和見證磁盤進(jìn)行同步,同步前節(jié)點(diǎn)不可以獲得成員資格,群集節(jié)點(diǎn)1從見證磁盤同步到最新群集數(shù)據(jù)庫(kù)后,正常聯(lián)機(jī)上線
因此,如果群集會(huì)經(jīng)常修改一些內(nèi)容,為了避免時(shí)間分區(qū)的問題,老王通常建議采用見證磁盤
群集數(shù)據(jù)庫(kù)與其他群集組件協(xié)同:
GUM:GUM為群集全局更新管理器,負(fù)責(zé)協(xié)調(diào)群集各個(gè)節(jié)點(diǎn)群集數(shù)據(jù)庫(kù)內(nèi)容為最新,GUM工作機(jī)制分為以下幾種
1.全局周期性更新,由群集自動(dòng)完成,默認(rèn)情況下每隔四小時(shí),告知各節(jié)點(diǎn)數(shù)據(jù)庫(kù)管理器復(fù)制群集數(shù)據(jù)庫(kù)內(nèi)容
2.通知性更新,在以下場(chǎng)景發(fā)生:節(jié)點(diǎn)聯(lián)機(jī),節(jié)點(diǎn)脫機(jī),群集注冊(cè)表發(fā)生修改變化,一旦檢測(cè)到節(jié)點(diǎn)有以上變化,則立刻通知各節(jié)點(diǎn)DM組件復(fù)制最新paxos標(biāo)記數(shù)據(jù)庫(kù)
3.仲裁更新,特定于磁盤見證仲裁模型,當(dāng)群集更改無(wú)法復(fù)制到其它節(jié)點(diǎn)時(shí),對(duì)于群集修改的配置,會(huì)以恢復(fù)日志的方式存儲(chǔ)在見證磁盤,當(dāng)有節(jié)點(diǎn)恢復(fù)時(shí),自動(dòng)從見證磁盤獲取
GUM組件從NT4 Cluster Server開始就內(nèi)置在群集組件中,這個(gè)組件在2012R2之前一直處于自我運(yùn)作的情況,工作方式不能修改,2012R2之后發(fā)生了改變,在2012R2之前,GUM的原則是有最新的群集數(shù)據(jù)庫(kù)更新了,我需要通知到你們所有節(jié)點(diǎn),讓你們都更新到群集數(shù)據(jù)庫(kù)為最新,群集所有節(jié)點(diǎn)都需要響應(yīng)GUM的更改通知,如果有節(jié)點(diǎn)未響應(yīng),數(shù)據(jù)庫(kù)更改處理將延遲等待,2012R2開始,支持下圖三種模式工作,對(duì)于Hyper-V負(fù)載默認(rèn)為1,能夠?qū)崿F(xiàn)只要大部分主機(jī)響應(yīng)GUM的更改通知,就可以完成數(shù)據(jù)庫(kù)更改處理,可以使用命令修改
(Get-Cluster).DatabaseReadWriteMode = 1
一個(gè)潛在的問題,當(dāng)針對(duì)群集中的節(jié)點(diǎn)請(qǐng)求信息時(shí),節(jié)點(diǎn)必須與群集中的大多數(shù)節(jié)點(diǎn)進(jìn)行通信得到確認(rèn),然后才能發(fā)送對(duì)請(qǐng)求的響應(yīng)。對(duì)于不需要請(qǐng)求,這樣可以,但是當(dāng)請(qǐng)求經(jīng)常被放入群集時(shí),這會(huì)給群集帶來(lái)巨大的通信負(fù)擔(dān),會(huì)為虛擬主機(jī)帶來(lái)性能影響,于是2016開始微軟改默認(rèn)值為0
DM: Database Manager為數(shù)據(jù)庫(kù)管理器,負(fù)責(zé)在每個(gè)節(jié)點(diǎn)上運(yùn)行并維護(hù)群集數(shù)據(jù)庫(kù)的本地副本,包括群集本身,群集節(jié)點(diǎn)成員資格,資源組,資源類型以及特定資源(如磁盤和IP地址)的描述,數(shù)據(jù)庫(kù)管理器使用全局更新管理器將更改復(fù)制到其它節(jié)點(diǎn)
MM: MemberShip Manager為節(jié)點(diǎn)管理器,負(fù)責(zé)記錄各節(jié)點(diǎn)資格,將節(jié)點(diǎn)資格列表在各節(jié)點(diǎn)復(fù)制,確保所有節(jié)點(diǎn)一致,節(jié)點(diǎn)管理器會(huì)收到各節(jié)點(diǎn)心跳檢測(cè)的結(jié)果,如果檢測(cè)到新的成員節(jié)點(diǎn)加入,則通知GUM為其復(fù)制群集數(shù)據(jù)庫(kù)。如果檢測(cè)到某個(gè)節(jié)點(diǎn)不可用,則將該節(jié)點(diǎn)從節(jié)點(diǎn)可用列表中標(biāo)記為不可用,下次GUM復(fù)制將不會(huì)通知被MM標(biāo)記為不可用的節(jié)點(diǎn)復(fù)制群集數(shù)據(jù)庫(kù),需要注意如果節(jié)點(diǎn)僅是脫機(jī)狀態(tài),并不會(huì)從群集節(jié)點(diǎn)可用列表完全刪除,只是會(huì)被標(biāo)記為不可用,恢復(fù)后,將通知GUM完成群集數(shù)據(jù)庫(kù)復(fù)制,如果將節(jié)點(diǎn)逐出群集,則徹底從節(jié)點(diǎn)列表刪除。
RHS&RCM:RHS為群集資源主機(jī)子系統(tǒng),負(fù)責(zé)監(jiān)視各個(gè)群集資源的運(yùn)作狀態(tài),一旦RHS檢測(cè)到群集資源不可用,則會(huì)將結(jié)果報(bào)告給RCM資源控制管理器,RCM根據(jù)資源的故障轉(zhuǎn)移策略嘗試重啟或故障轉(zhuǎn)移資源,一旦RCM將資源轉(zhuǎn)移至其它節(jié)點(diǎn),則觸發(fā)節(jié)點(diǎn)群集數(shù)據(jù)庫(kù)變化,更新paxos標(biāo)記,GUM收到變化后會(huì)通知各節(jié)點(diǎn)DM復(fù)制最新的群集數(shù)據(jù)庫(kù)