溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

發(fā)布時(shí)間:2020-07-21 20:15:02 來(lái)源:網(wǎng)絡(luò) 閱讀:4721 作者:老收藏家 欄目:建站服務(wù)器

  OK~ WSFC 2012 R2 年度盛宴開(kāi)始~ 在本文中,老王將用一系列的場(chǎng)景,把動(dòng)態(tài)仲裁,動(dòng)態(tài)見(jiàn)證,票數(shù)調(diào)整,LowerQuorumPriorityNodeID,阻止仲裁等群集仲裁技術(shù)串起來(lái),完成一個(gè)又一個(gè)復(fù)雜的場(chǎng)景,本篇文章可能并不太適合對(duì)于WSFC不了解的朋友,適合對(duì)于WSFC群集仲裁技術(shù)及2012動(dòng)態(tài)仲裁技術(shù)有一定初步了解的朋友,如果您還不了解WSFC,建議您去先看下老王寫(xiě)過(guò)的博客,或者其它地方相關(guān)的資料,如果您對(duì)于WSFC仲裁,動(dòng)態(tài)仲裁技術(shù)已經(jīng)有了初步的了解,相信跟老王這篇文章中的場(chǎng)景會(huì)幫助您更加深入的理解群集投票,動(dòng)態(tài)仲裁等知識(shí),話不多說(shuō),我們現(xiàn)在就開(kāi)始,跟著老王上車吧,過(guò)山車開(kāi)了~滴

 

 開(kāi)始之前先介紹環(huán)境,為了準(zhǔn)備這次的博客,老王一共開(kāi)了七臺(tái)虛擬機(jī),主要是為了重現(xiàn)一些真實(shí)的分區(qū)場(chǎng)景,之前在2008R2的時(shí)候,我們用了六臺(tái)服務(wù)器,兩邊各兩個(gè)節(jié)點(diǎn),一臺(tái)域控+ISCSI,一臺(tái)路由服務(wù)器,但是只有一側(cè)有域控,另外一側(cè)沒(méi)有域控,因此發(fā)生分區(qū)時(shí),沒(méi)有域控的一方是沒(méi)辦法上線聯(lián)機(jī)搶奪群集的,雖然效果是一樣的,最終兩端出現(xiàn)分區(qū),群集都無(wú)法使用,我們強(qiáng)制選擇其中一方啟動(dòng),在這次的環(huán)境里面老王特地用了七臺(tái)服務(wù)器,兩端都有域控,都可以形成群集的一個(gè)場(chǎng)景


  環(huán)境介紹


  北京站點(diǎn)


   HV01

   MGMET:80.0.0.2  GW:80.0.0.254 DNS:80.0.0.1 100.0.0.20 

   ISCSI:90.0.0.2

   CLUS:70.0.0.2


   HV02

   MGMET:80.0.0.3  GW:80.0.0.254 DNS:80.0.0.1 100.0.0.20

   ISCSI:90.0.0.3

   CLUS:70.0.0.3


   BJDC&ISCSI

   Lan:80.0.0.1 GW:80.0.0.254

   ISCSI:90.0.0.1


  佛山站點(diǎn)


   HV03

   MGMET:100.0.0.4  GW:100.0.0.254 DNS:100.0.0.20 80.0.0.1

   ISCSI:90.0.0.4

   CLUS:70.0.0.4


   HV04

   MGMET:100.0.0.5  GW:100.0.0.254 DNS:100.0.0.20 80.0.0.1

   ISCSI:90.0.0.5

   CLUS:70.0.0.5


   FSDC

   Lan:100.0.0.20 GW:100.0.0.254


 Router 

   

    03Route

    Beijing:80.0.0.254

    Fuosha:100.0.0.254

 

   首先我們先來(lái)看一道開(kāi)胃小菜,在這個(gè)場(chǎng)景中我們將模擬,一個(gè)四個(gè)節(jié)點(diǎn)的跨站點(diǎn)群集,在見(jiàn)證磁盤(pán)始終在線的情況下節(jié)點(diǎn)逐個(gè)宕機(jī)的場(chǎng)景,以下是老王已經(jīng)組建起來(lái)的一個(gè)多站點(diǎn)群集,其中的群集名稱和群集IP,可能在后面的圖會(huì)變,因?yàn)閷?shí)驗(yàn)過(guò)程中老王拆了又建了幾次群集,不過(guò)其他架構(gòu)都按照規(guī)劃好的不會(huì)改變。

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

可以看到我們?cè)谌杭信芰艘粋€(gè)DTC應(yīng)用,當(dāng)前DTC應(yīng)用綁定了兩個(gè)IP地址,它們之間是OR關(guān)系

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

  

   在多站點(diǎn)群集的設(shè)計(jì)規(guī)劃中有很多需要考慮的地方,例如存儲(chǔ)復(fù)制,網(wǎng)絡(luò)檢測(cè),加密處理,AD的同步,DNS的緩存等都會(huì)影響到多站點(diǎn)的故障轉(zhuǎn)移時(shí)間,后續(xù)會(huì)單獨(dú)寫(xiě)博客來(lái)詳細(xì)講,這里簡(jiǎn)單講兩個(gè)影響客戶端直接訪問(wèn)的地方


   默認(rèn)情況下在多站點(diǎn)群集中,例如我們的DTC應(yīng)用當(dāng)前在北京站點(diǎn)運(yùn)行,它的聯(lián)機(jī)地址會(huì)是80.0.0.89,當(dāng)它轉(zhuǎn)移到佛山站點(diǎn),聯(lián)機(jī)地址會(huì)是100.0.0.89,但是這時(shí)候,客戶端能不能訪問(wèn)DTC服務(wù)呢,不一定


    設(shè)想一下,北京和佛山站點(diǎn)做了AD多站點(diǎn),它們的DNS會(huì)相互同步,當(dāng)DTC在北京站點(diǎn)時(shí)它是80.0.0.89,經(jīng)過(guò)一段時(shí)間它同步到了佛山站點(diǎn),佛山的DNS也知道了DTC是80.0.0.89這個(gè)地址,那么當(dāng)北京站點(diǎn)宕機(jī),轉(zhuǎn)移到佛山站點(diǎn)了,雖然這時(shí)候DTC應(yīng)用已經(jīng)聯(lián)機(jī),但是當(dāng)客戶端訪問(wèn)DTC,會(huì)返回80.0.0.89這個(gè)地址,并不會(huì)返回100.0.0.89的可用地址,這也導(dǎo)致了停機(jī)時(shí)間的延遲


    原因是由DNS的緩存機(jī)制導(dǎo)致,默認(rèn)情況下群集應(yīng)用聯(lián)機(jī)后注冊(cè)的主機(jī)記錄都是會(huì)有1200秒的TTL,即是說(shuō),客戶端如果請(qǐng)求了這個(gè)VCO的主機(jī)記錄,1200秒以內(nèi),不會(huì)再重新請(qǐng)求了,會(huì)使用緩存中的地址


    2008時(shí)代WSFC新增了用于多站點(diǎn)的HostRecordTTL屬性,使我們可以設(shè)置VCO記錄注冊(cè)到DNS時(shí)的TTL,TTL生命周期現(xiàn)在可以進(jìn)行縮短,微軟建議縮短為300秒,即五分鐘之后重新請(qǐng)求DNS新的地址


    打開(kāi)佛山站點(diǎn)的客戶端,輸入ipconfig /display可以看到被緩存的VCO記錄和生存時(shí)間(TTL)


    WSFC動(dòng)態(tài)仲裁及投票調(diào)整2


   另外一個(gè)2008時(shí)代新增用于多站點(diǎn)的屬性則是RegisterAllProvidersIP,正常情況下,我們的VCO即使你設(shè)計(jì)了多個(gè)地址,它們默認(rèn)會(huì)是OR的關(guān)系,即始終只注冊(cè)一個(gè)群集IP地址,當(dāng)前在北京站點(diǎn)就是80網(wǎng)段的地址,當(dāng)聯(lián)機(jī)到佛山站點(diǎn),則會(huì)有CNO替VCO去注冊(cè)更新成100網(wǎng)段的地址,同一時(shí)間VCO默認(rèn)只有一個(gè)站點(diǎn)的地址在線,通過(guò)RegisterAllProvidersIP屬性我們可以讓CNO去幫我們注冊(cè)所有的VCO地址,但是這就要求群集應(yīng)用支持地址重試


   一個(gè)完美的場(chǎng)景應(yīng)該是群集應(yīng)用默認(rèn)連接到80網(wǎng)段的地址,當(dāng)80網(wǎng)段不可用,自動(dòng)重試連接到100網(wǎng)段聯(lián)機(jī)使用,因?yàn)樗械刂范家呀?jīng)注冊(cè)至DNS,所以可以減少由于DNS緩存導(dǎo)致的停機(jī)時(shí)間,在群集應(yīng)用支持自動(dòng)重試的話,可以使用這個(gè)屬性 ,SQL Server 2012開(kāi)始支持在連接字符串加入MultiSubnetFailover=True參數(shù)和RegisterAllProvidersIP配合使用,當(dāng)連接其中一個(gè)地址不通,會(huì)自動(dòng)連接另外一個(gè)

 

這里我們遵循微軟的建議,配置DTC應(yīng)用的HostRecordTTL為300


設(shè)置方法如下


#獲取群集應(yīng)用資源名稱 

Get-ClusterResource | Select Name, ResourceType

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

#獲取群集應(yīng)用資源屬性

Get-ClusterResource "devtestdtc" | Get-ClusterParameter

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

#修改HostRecordTTL屬性,脫機(jī)再聯(lián)機(jī)可以看到設(shè)置已經(jīng)生效

Get-ClusterResource "devtestdtc" | Set-ClusterParameter HostRecordTTL 300

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

輔菜說(shuō)完,下面來(lái)看我們的正菜,可以看到目前我們是四個(gè)節(jié)點(diǎn)的群集,見(jiàn)證磁盤(pán)可以正常參與投票


#查看節(jié)點(diǎn)投票數(shù)

Get-ClusterNode | ft ID, NodeName, NodeWeight, DynamicWeight, State -AutoSize

#查看見(jiàn)證投票數(shù)

(Get-Cluster).WitnessDynamicWeight 


這兩個(gè)命令后面我們會(huì)經(jīng)常用到

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

當(dāng)前群集DTC正常運(yùn)行在HV01

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

我們直接將HV01進(jìn)行斷電操作,可以看到群集應(yīng)用自動(dòng)轉(zhuǎn)移至HV02,HV01已下線所以去掉了它的投票,同時(shí)由于現(xiàn)在是4票,所以自動(dòng)去掉了見(jiàn)證磁盤(pán)的一票,始終保證投票數(shù)為奇數(shù)。

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

直接將HV02也斷電,我們徹底失去了北京站點(diǎn),可以看到現(xiàn)在又自動(dòng)加上了見(jiàn)證磁盤(pán)的一票,現(xiàn)在群集還是三票,我直接強(qiáng)制DNS服務(wù)器更新,然后在客戶端ipconfig /flushdns了,此時(shí)再嘗試聯(lián)devtestdtc則會(huì)返回100網(wǎng)段的地址,如果不清除DNS緩存,可以等300秒時(shí)間到了,再次請(qǐng)求自動(dòng)更新至100網(wǎng)段

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

DTC當(dāng)前在HV03上面運(yùn)行,我們?cè)侔袶V03也斷電,現(xiàn)在群集只剩下HV04,可以看到現(xiàn)在群集會(huì)顯示三票,但其實(shí)已經(jīng)不重要了,因?yàn)槲覀冎皇O乱粋€(gè)節(jié)點(diǎn),他可以和見(jiàn)證磁盤(pán)聯(lián)系,因此可以存活至最后。

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

以上是我們的第一道小菜,怎么樣,還算簡(jiǎn)單開(kāi)胃把,可以看出在見(jiàn)證磁盤(pán)在情況下,群集節(jié)點(diǎn)逐步宕機(jī),WSFC2012R2會(huì)始終動(dòng)態(tài)的調(diào)整群集投票,確保群集投票始終是奇數(shù),即始終一方可以存活,最后可以只剩下一個(gè)節(jié)點(diǎn)和見(jiàn)證存活。


接下來(lái)我們來(lái)模擬第二個(gè)場(chǎng)景,北京站點(diǎn)和佛山站點(diǎn)的管理網(wǎng)絡(luò)失去聯(lián)系,即80網(wǎng)絡(luò)和100網(wǎng)絡(luò)不通,我們直接關(guān)掉路由服務(wù)器,為了防止其中一方聯(lián)系到見(jiàn)證磁盤(pán)獲勝,我們也模擬見(jiàn)證磁盤(pán)失去聯(lián)系


WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

這時(shí)候我們可以看到,群集檢測(cè)到見(jiàn)證磁盤(pán)失效,已經(jīng)自動(dòng)調(diào)整三個(gè)節(jié)點(diǎn)投票數(shù)為奇數(shù)


另外可以看到我們把管理網(wǎng)絡(luò)斷開(kāi)了,群集依然可以正常工作,為什么呢,因?yàn)槿杭瘍?nèi)置的網(wǎng)絡(luò)拓?fù)渖善鲿?huì)實(shí)時(shí)自動(dòng)生成調(diào)整全網(wǎng)檢測(cè)的拓?fù)?,管理網(wǎng)絡(luò)既可以對(duì)外訪問(wèn)也可以做心跳檢測(cè),心跳網(wǎng)絡(luò)只可以做心跳檢測(cè),因此只要不影響群集節(jié)點(diǎn)之間心跳檢測(cè),是不會(huì)有任何反應(yīng)的。

 

群集并不會(huì)知道你的管理網(wǎng)絡(luò)故障,因?yàn)樵诒本┱军c(diǎn)管理網(wǎng)絡(luò)可以正常訪問(wèn),在佛山站點(diǎn)管理網(wǎng)絡(luò)也可以正常訪問(wèn),群集就以為它是好的,心跳檢測(cè)還有其它卡可以進(jìn)行嘛


WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

  假設(shè)現(xiàn)在這家公司的員工都從佛山出差來(lái)北京辦公,即所有的用戶都要在北京80網(wǎng)段的客戶端訪問(wèn),但是如果這時(shí)候群集DTC忽然漂移佛山去了,雖然它在佛山也可以正常工作,但是北京站點(diǎn)的用戶都訪問(wèn)不到那邊,因?yàn)槲覀冎婪鹕秸军c(diǎn)100網(wǎng)段已經(jīng)和外界失去聯(lián)系


   默認(rèn)如果不做調(diào)整群集應(yīng)用,DTC是應(yīng)用是隨機(jī)漂移的,不一定會(huì)漂到那個(gè)節(jié)點(diǎn)去,可能看那個(gè)節(jié)點(diǎn)內(nèi)存多,它就過(guò)去哪里了,一旦漂到佛山站點(diǎn)的服務(wù)器就慘了


   這時(shí)我們可以通過(guò)以下手段進(jìn)行控制,首先設(shè)置DTC的習(xí)慣節(jié)點(diǎn)為HV01,HV02,這樣如果當(dāng)前DTC托管在北京,當(dāng)它發(fā)生故障轉(zhuǎn)移的時(shí)候,會(huì)優(yōu)先考慮轉(zhuǎn)移到HV01或HV02

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

   但是僅僅設(shè)置首選所有者還是不夠的,因?yàn)樵O(shè)置首選所有者,只是在沒(méi)有發(fā)生分區(qū)的情況下會(huì)有用,當(dāng)發(fā)生了一個(gè)網(wǎng)絡(luò)分區(qū),HV01 HV02沒(méi)辦法與HV03 HV04聯(lián)系,這時(shí)由于HV01沒(méi)有投票數(shù),而HV03 HV04一方有投票數(shù),所以應(yīng)用還是會(huì)轉(zhuǎn)移到佛山站點(diǎn)運(yùn)行


   應(yīng)對(duì)這種場(chǎng)景,我們可以徹底去掉HV03,HV04站點(diǎn)的投票數(shù),這樣做了之后,即便發(fā)生一個(gè)網(wǎng)絡(luò)分區(qū),北京站點(diǎn)剩下一票,佛山站點(diǎn)兩票,但因?yàn)槲覀內(nèi)サ袅朔鹕秸军c(diǎn)兩臺(tái)服務(wù)器的投票數(shù),所以佛山站點(diǎn)會(huì)嘗試形成群集,但是始終是沒(méi)辦法成功的,因?yàn)樗麄儧](méi)有合法的票數(shù)。


   即是說(shuō)我們通過(guò)手動(dòng)去掉投票數(shù),讓佛山的兩個(gè)節(jié)點(diǎn)永遠(yuǎn)也沒(méi)辦法形成群集,要不然就訪問(wèn)北京的節(jié)點(diǎn),北京的節(jié)點(diǎn)一旦無(wú)法啟動(dòng),群集應(yīng)用就停止訪問(wèn)或強(qiáng)制啟動(dòng)。


#手動(dòng)去掉群集投票數(shù)


(Get-ClusterNode -Name hv03).NodeWeight = 0

(Get-ClusterNode -Name hv04).NodeWeight = 0


在2008和2008R2中可以通過(guò)添加一個(gè)Hotfix來(lái)獲得手動(dòng)控制節(jié)點(diǎn)的投票的功能,2012及之后則WSFC自帶

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

   以上是手動(dòng)調(diào)整群集投票數(shù)的場(chǎng)景之一,即我們知道一方的站點(diǎn)已經(jīng)無(wú)法對(duì)外提供訪問(wèn)服務(wù),需要讓該站點(diǎn)始終停止對(duì)外服務(wù),直到網(wǎng)絡(luò)恢復(fù)再重新賦予投票數(shù)


   手動(dòng)調(diào)整投票數(shù)老王認(rèn)為是很有用處的一項(xiàng)技術(shù),除了這種已知站點(diǎn)無(wú)法對(duì)外提供的場(chǎng)景,在其它很多場(chǎng)景下也都有用武之地


   例如在一個(gè)完全手動(dòng)故障的場(chǎng)景,有北京,天津,河北三個(gè)站點(diǎn),只有北京站點(diǎn)的節(jié)點(diǎn)有投票,手動(dòng)取消了天津和河北的投票,因?yàn)楫?dāng)故障發(fā)生時(shí),可能要舉行一個(gè)災(zāi)難恢復(fù)會(huì)議,商討一下,當(dāng)前由那個(gè)站點(diǎn)繼續(xù)承擔(dān)群集更合適,例如商討天津站點(diǎn)當(dāng)前更合適承擔(dān)群集,手動(dòng)賦予天津站點(diǎn)節(jié)點(diǎn)票數(shù),節(jié)點(diǎn)檢測(cè)到當(dāng)前有投票,于是天津站點(diǎn)啟動(dòng)形成群集,繼續(xù)對(duì)外提供服務(wù)


   或者還有一個(gè)場(chǎng)景,假設(shè)當(dāng)前有北京站點(diǎn),河北站點(diǎn)兩個(gè)站點(diǎn),兩個(gè)節(jié)點(diǎn)各有兩個(gè)節(jié)點(diǎn),當(dāng)前群集一共四個(gè)節(jié)點(diǎn),我手動(dòng)去掉了河北站點(diǎn)其中一個(gè)節(jié)點(diǎn)的投票,讓它始終不參與群集投票,這時(shí)假設(shè)群集發(fā)生了故障,北京站點(diǎn)和河北站點(diǎn)的三個(gè)節(jié)點(diǎn)都已經(jīng)無(wú)法啟動(dòng)提供服務(wù),我們可以強(qiáng)制啟動(dòng)去掉投票的節(jié)點(diǎn),重新賦予它票數(shù),讓它繼續(xù)對(duì)外提供服務(wù),或者北京站點(diǎn)宕機(jī),強(qiáng)制仲裁后所有業(yè)務(wù)都跑到河北站點(diǎn)的一個(gè)節(jié)點(diǎn)運(yùn)行,已經(jīng)把機(jī)器的負(fù)載跑滿,這時(shí)候可以把去掉投票的節(jié)點(diǎn)重新賦予投票,一起承擔(dān)負(fù)載,這樣作為一個(gè)災(zāi)備節(jié)點(diǎn)來(lái)使用。


    接下來(lái)我們假設(shè)當(dāng)前群集是動(dòng)態(tài)仲裁,群集見(jiàn)證磁盤(pán)先失效,繼而管理網(wǎng)絡(luò)也失效,心跳網(wǎng)絡(luò)也失效,出現(xiàn)一個(gè)分區(qū)時(shí)的場(chǎng)景


   針對(duì)網(wǎng)絡(luò)分區(qū),我們到時(shí)除了把路由服務(wù)器關(guān)了,也把HV03 HV04的心跳網(wǎng)卡直接改了個(gè)網(wǎng)絡(luò)

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

    針對(duì)見(jiàn)證磁盤(pán)失效,我們還是依舊采用直接ISCSI上面禁用磁盤(pán)的方式,可以看到大概過(guò)了30秒左右,仲裁檢測(cè)到了見(jiàn)證磁盤(pán)已經(jīng)處于非聯(lián)機(jī)狀態(tài),于是自動(dòng)去掉了它的票數(shù),同時(shí)也隨機(jī)去掉了一個(gè)節(jié)點(diǎn)的票數(shù),現(xiàn)在群集變成了三票

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

仲裁磁盤(pán)會(huì)按照故障轉(zhuǎn)移策略,在各個(gè)節(jié)點(diǎn)嘗試聯(lián)機(jī)掛起

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

都嘗試失敗后會(huì)顯示為失敗狀態(tài),過(guò)一段時(shí)間會(huì)在嘗試聯(lián)機(jī)掛起,但始終不會(huì)成功

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

可以看到現(xiàn)在由于見(jiàn)證磁盤(pán)失敗,仲裁已經(jīng)動(dòng)態(tài)的調(diào)整了投票數(shù),又隨機(jī)去掉了一個(gè)節(jié)點(diǎn)的投票數(shù),現(xiàn)在群集還是奇數(shù)三個(gè)投票

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2


  如果這時(shí)一個(gè)網(wǎng)絡(luò)分區(qū)發(fā)生,北京站點(diǎn)與佛山站點(diǎn)沒(méi)辦法心跳檢測(cè),沒(méi)有網(wǎng)卡可以用于檢測(cè),這時(shí)候佛山的站點(diǎn)會(huì)獲勝,繼續(xù)對(duì)外提供服務(wù),而北京站點(diǎn)則會(huì)關(guān)閉


  因?yàn)楸本┱军c(diǎn)被選中去掉了一個(gè)投票,只有一票,而佛山站點(diǎn)有兩票,所以佛山站點(diǎn)可以形成群集,形成群集后佛山站點(diǎn)又自動(dòng)去了一票,現(xiàn)在佛山站點(diǎn)也是奇數(shù)投票數(shù)


WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

  大家可以看到,這里的核心在于,群集選擇去掉那個(gè)站點(diǎn)的投票,被去掉投票的站點(diǎn),當(dāng)發(fā)生投票時(shí)會(huì)被關(guān)閉,默認(rèn)情況下群集會(huì)根據(jù)各個(gè)節(jié)點(diǎn)的狀態(tài)變化,網(wǎng)絡(luò)監(jiān)測(cè)情況,不斷的去調(diào)整票數(shù),每次都會(huì)隨機(jī)選擇去掉投票站點(diǎn)的節(jié)點(diǎn)是誰(shuí),這有點(diǎn)像是每次都要隨機(jī)抓一個(gè)倒霉蛋,反正都是抓,那么我們可不可以控制每次固定抓一個(gè)人呢,答案是可以的


  通過(guò)2012R2里面新增的LowerQuorumPriorityNodeID屬性,我們可以控制在偶數(shù)節(jié)點(diǎn)下,讓動(dòng)態(tài)仲裁始終去掉指定節(jié)點(diǎn)的投票,實(shí)現(xiàn)當(dāng)發(fā)生50/50網(wǎng)絡(luò)分區(qū)時(shí)始終是我們想要的站點(diǎn)獲勝,或者在兩個(gè)節(jié)點(diǎn)的情況下,最終動(dòng)態(tài)仲裁要隨機(jī)去掉一個(gè)節(jié)點(diǎn)的投票,我們也可以根據(jù)情況事前指定,始終去掉指定節(jié)點(diǎn)的投票。


#查看當(dāng)前LowerQuorum節(jié)點(diǎn),默認(rèn)是0,即每次發(fā)生變化時(shí)隨機(jī)調(diào)整

(Get-Cluster).LowerQuorumPriorityNodeID

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

 #獲取節(jié)點(diǎn)ID,手動(dòng)設(shè)置每次偶數(shù)投票數(shù)時(shí)丟棄HV04節(jié)點(diǎn)投票,每次都確保北京站點(diǎn)獲勝

(Get-Cluster).LowerQuorumPriorityNodeID=3

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

當(dāng)再次發(fā)生網(wǎng)絡(luò)分區(qū)時(shí)可以看到,佛山站點(diǎn)關(guān)閉,北京站點(diǎn)存活下來(lái),并自動(dòng)調(diào)整為奇數(shù)投票

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

群集應(yīng)用也始終正常運(yùn)行著

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

以上為老王給朋友們上來(lái)的第二道菜和第三道菜


    第二道菜我們?cè)谝粋€(gè)已知站點(diǎn)故障的情況下,手動(dòng)取消了該站點(diǎn)的投票,阻止應(yīng)用遷移到上面提供服務(wù),這里我們是假設(shè)的一個(gè)沒(méi)有分區(qū)的場(chǎng)景,因?yàn)閮啥诉€是可以通過(guò)心跳網(wǎng)卡互相做心跳檢測(cè)的,我們?cè)诒本┱军c(diǎn)設(shè)置取消佛山站點(diǎn)的投票,佛山站點(diǎn)是可以知道的,如果是心跳網(wǎng)卡也發(fā)生了故障,即兩邊沒(méi)辦法進(jìn)行進(jìn)行心跳檢測(cè),這時(shí)候就要分情況來(lái)看,如果分區(qū)之前我們已經(jīng)設(shè)置好了取消投票的站點(diǎn),那么很好,群集會(huì)選擇沒(méi)被設(shè)置取消投票的站點(diǎn)啟動(dòng),如果已經(jīng)出現(xiàn)分區(qū)之后,那么只有強(qiáng)制啟動(dòng)需要的少數(shù)站點(diǎn),啟動(dòng)之后再設(shè)置取消另外站點(diǎn)的投票,當(dāng)另外站點(diǎn)上線時(shí)會(huì)以強(qiáng)制仲裁方為主。


    第三道菜呢,默認(rèn)情況下在見(jiàn)證磁盤(pán)失效的動(dòng)態(tài)仲裁場(chǎng)景中,當(dāng)發(fā)生偶數(shù)投票節(jié)點(diǎn)的情況下會(huì)動(dòng)態(tài)隨機(jī)為我們?nèi)サ粢粋€(gè)節(jié)點(diǎn)的票數(shù),我們可以通過(guò)LowerQuorumPriorityNodeID屬性來(lái)手動(dòng)下降一個(gè)站點(diǎn),確保當(dāng)中間網(wǎng)絡(luò)分區(qū)發(fā)生時(shí),始終是自己想要的站點(diǎn)獲勝


   因此大家可以看出,在動(dòng)態(tài)仲裁存在的場(chǎng)景下,我們幾乎很少會(huì)用到強(qiáng)制仲裁,因?yàn)槲覀冇泻芏嘈碌募夹g(shù)可以選擇,例如LowerQuorumPriorityNodeID,事前手動(dòng)調(diào)整投票數(shù),強(qiáng)制仲裁在一些場(chǎng)景下也或許有用,尤其是2012R2之后,阻止仲裁技術(shù)發(fā)生了改變,多數(shù)節(jié)點(diǎn)一方檢測(cè)到少數(shù)節(jié)點(diǎn)一方存在仲裁會(huì)自動(dòng)執(zhí)行阻止仲裁操作,即確保承認(rèn)強(qiáng)制仲裁一方為群集,與其群集數(shù)據(jù)庫(kù)同步至最新后,才會(huì)啟動(dòng)自身群集服務(wù),在之前2008時(shí)代,如果遇到強(qiáng)制仲裁的場(chǎng)景下,大多數(shù)時(shí)間都需要手動(dòng)去執(zhí)行阻止仲裁,否則會(huì)出現(xiàn)群集數(shù)據(jù)庫(kù)覆蓋等情況,到了2012R2則會(huì)自動(dòng)幫助我們做這件事


   所以老王給大家的建議是,按照?qǐng)鼍斑x擇合適的技術(shù),能通過(guò)手動(dòng)調(diào)整投票解決或者通過(guò)LowerQuorumPriorityNodeID解決就盡量不用強(qiáng)制仲裁,2012R2之前使用強(qiáng)制仲裁需要考慮阻止仲裁問(wèn)題,2012R2不需要考慮。


   實(shí)際上在動(dòng)態(tài)仲裁啟動(dòng)的情況下,絕大部分場(chǎng)景動(dòng)態(tài)仲裁都能幫助我們保證群集的可用性,始終讓群集保持奇數(shù)投票,即便動(dòng)態(tài)仲裁默認(rèn)選擇的站點(diǎn)你不滿意,也可以用LowerQuorumPriorityNodeID,票數(shù)調(diào)整,強(qiáng)制仲裁等技術(shù)切換到滿意的站點(diǎn),像是以前50/50的腦裂分區(qū)場(chǎng)景,在動(dòng)態(tài)仲裁的情況下是很難見(jiàn)到了,因此如果想看到腦裂場(chǎng)景最好的辦法就是關(guān)閉動(dòng)態(tài)仲裁


    在第四道菜中,我們將模擬一個(gè)腦裂場(chǎng)景,北京佛山兩個(gè)站點(diǎn),關(guān)閉動(dòng)態(tài)仲裁的情況下,禁用見(jiàn)證磁盤(pán),兩端出現(xiàn)網(wǎng)絡(luò)分區(qū)時(shí)心跳網(wǎng)絡(luò)和管理網(wǎng)絡(luò)都已關(guān)閉,沒(méi)辦法進(jìn)行站點(diǎn)間心跳檢測(cè)

     

#確認(rèn)群集動(dòng)態(tài)仲裁狀態(tài),默認(rèn)為1,修改為0

(Get-Cluster).DynamicQuorum = 0

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

緊接著我們觸發(fā)網(wǎng)絡(luò)分區(qū),修改HV03和HV04心跳網(wǎng)卡為其它網(wǎng)段,然后暫停路由服務(wù)器,讓兩端管理網(wǎng)絡(luò)和心跳網(wǎng)絡(luò)都不能互相做站點(diǎn)間的心跳檢測(cè),但是在各自站點(diǎn)內(nèi)又都可以正常和AD通信

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

這時(shí)打開(kāi)各個(gè)節(jié)點(diǎn)上面可以看到日志,提示群集網(wǎng)絡(luò)已分區(qū)

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

運(yùn)行查看投票數(shù)節(jié)點(diǎn)命令,可以看到當(dāng)前所有節(jié)點(diǎn),都在各自站點(diǎn)嘗試形成加入群集

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

但是這種狀態(tài)僅維持不到20秒,再次運(yùn)行命令就會(huì)看到群集服務(wù)已經(jīng)停止

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

在每個(gè)節(jié)點(diǎn)的事件管理器都可以看到關(guān)于群集服務(wù)停止的系統(tǒng)日志

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2


可見(jiàn)當(dāng)出現(xiàn)腦裂分區(qū)時(shí),群集會(huì)出現(xiàn)短暫的爭(zhēng)奪階段,緊接著群集仲裁會(huì)檢測(cè)到當(dāng)前發(fā)生分區(qū),之后會(huì)關(guān)閉所有群集節(jié)點(diǎn),老王并沒(méi)有看到網(wǎng)上說(shuō)的發(fā)生仲裁時(shí)各個(gè)分區(qū)各自生成群集,然后爭(zhēng)奪寫(xiě)入群集磁盤(pán)的場(chǎng)景,或許時(shí)間太短了沒(méi)有看到,或許是2012開(kāi)始針對(duì)于腦裂分區(qū)做了優(yōu)化,檢測(cè)到腦裂會(huì)自動(dòng)關(guān)閉,不過(guò)老王實(shí)際看到的效果就是這樣,我感覺(jué)這樣都關(guān)了也好,誰(shuí)也別搶,讓管理員手動(dòng)選擇


假設(shè)這時(shí)管理員判定當(dāng)前權(quán)威站點(diǎn)應(yīng)該是北京站點(diǎn),手動(dòng)在HV01上面執(zhí)行強(qiáng)制啟動(dòng)命令


#強(qiáng)制啟動(dòng)HV01

net stop clussvc

net start clussvc /FQ

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

HV01上面首先運(yùn)行查看節(jié)點(diǎn)投票數(shù)命令,首先會(huì)看到HV01的投票,緊接著HV02由于和HV01是一個(gè)分區(qū)內(nèi),檢測(cè)到這一方發(fā)生強(qiáng)制仲裁,他會(huì)優(yōu)先融入進(jìn)來(lái),狀態(tài)會(huì)先是Joining,最終變成Up

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

實(shí)際上在這一步的時(shí)候,老王是希望看到一個(gè)東西的效果,什么呢,就是阻止仲裁的效果,老王在10/90這種比例下,強(qiáng)制仲裁了10的一方之后,當(dāng)剩下的90網(wǎng)絡(luò)聯(lián)機(jī)之后,可以在日志看到阻止仲裁的日志,但是在50/50比例下,當(dāng)各節(jié)點(diǎn)網(wǎng)絡(luò)恢復(fù)正常后,老王沒(méi)看到這個(gè)日志

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

但是當(dāng)老王嘗試用命令查看節(jié)點(diǎn)阻止仲裁狀態(tài)的時(shí)候卻可以看到


#查看各阻止仲裁狀態(tài) 1代表節(jié)點(diǎn)目前需要阻止仲裁,0代表節(jié)點(diǎn)當(dāng)前不需要阻止仲裁


(Get-ClusterNode -Name HV02).NeedsPreventQuorum

(Get-ClusterNode -Name HV03).NeedsPreventQuorum

(Get-ClusterNode -Name HV04).NeedsPreventQuorum


可以看到節(jié)點(diǎn)2已經(jīng)去掉了阻止仲裁的狀態(tài),3和4節(jié)點(diǎn)仍需要阻止仲裁

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2


什么是阻止仲裁呢,在上面老王也提到過(guò)一點(diǎn),阻止仲裁簡(jiǎn)單來(lái)講,就是讓其它節(jié)點(diǎn)遵守強(qiáng)制仲裁分區(qū)的技術(shù),我們用強(qiáng)制仲裁之后,會(huì)把強(qiáng)制仲裁節(jié)點(diǎn)的paxos標(biāo)記提至最高,即成為群集內(nèi)最權(quán)威的存活節(jié)點(diǎn),你們其它所有節(jié)點(diǎn)的群集數(shù)據(jù)庫(kù)都要以我的為準(zhǔn),阻止仲裁就是為了配置強(qiáng)制仲裁的這個(gè)目標(biāo),當(dāng)其它節(jié)點(diǎn)網(wǎng)絡(luò)連通后可以和強(qiáng)制仲裁節(jié)點(diǎn)通信,節(jié)點(diǎn)會(huì)檢測(cè)到當(dāng)前環(huán)境內(nèi)存在強(qiáng)制仲裁的節(jié)點(diǎn),我應(yīng)該以他為首,我不應(yīng)該形成群集,即使我是多數(shù)節(jié)點(diǎn)的一方,然后群集服務(wù)會(huì)暫時(shí)停止,直到可以阻止仲裁節(jié)點(diǎn)的群集數(shù)據(jù)庫(kù)完全和強(qiáng)制仲裁一方同步一致之后,才可以重新加入強(qiáng)制仲裁啟動(dòng)節(jié)點(diǎn)形成的群集分區(qū)


在2012R2之前,遇到阻止仲裁的場(chǎng)景,尤其是10/90場(chǎng)景,你強(qiáng)制啟動(dòng)了少數(shù),是需要手動(dòng)在其他站點(diǎn)執(zhí)行阻止仲裁的,2012R2開(kāi)始支持這種檢測(cè)到強(qiáng)制仲裁,自動(dòng)阻止仲裁。


可以看到當(dāng)佛山節(jié)點(diǎn)恢復(fù)和北京站點(diǎn)通信后,經(jīng)過(guò)一段時(shí)間,節(jié)點(diǎn)的阻止仲裁狀態(tài)也變成了0,并且正常上線加入了強(qiáng)制仲裁方形成的群集分區(qū)

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2


最后一道菜我們來(lái)嘗試一個(gè)反轉(zhuǎn)性的場(chǎng)景,假設(shè)當(dāng)前北京站點(diǎn)有1個(gè)節(jié)點(diǎn),佛山站點(diǎn)有3個(gè)節(jié)點(diǎn),佛山站點(diǎn)發(fā)生了網(wǎng)絡(luò)故障,雖然佛山內(nèi)部三個(gè)節(jié)點(diǎn)可以通信,但是它們無(wú)法對(duì)外提供服務(wù),我們需要強(qiáng)制反轉(zhuǎn)至北京節(jié)點(diǎn)提供服務(wù),本場(chǎng)景見(jiàn)證磁盤(pán)禁用,群集啟用動(dòng)態(tài)仲裁


#重新啟用群集動(dòng)態(tài)仲裁

(Get-Cluster).DynamicQuorum = 1

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

修改HV02為100.0.0.3,網(wǎng)關(guān)為100.0.0.254,DNS設(shè)置為100.0.0.20 80.0.0.1

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

#重新注冊(cè)網(wǎng)卡DNS記錄

ipconfig /registerdns

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

確保兩個(gè)站點(diǎn)的DNS上面都記錄了HV02的新地址

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

直接將HV02 HV03 HV04三個(gè)節(jié)點(diǎn)的群集網(wǎng)卡都改到同一個(gè)網(wǎng)絡(luò),然后暫停路由服務(wù)器

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

這時(shí)候在HV01上面運(yùn)行查看群集節(jié)點(diǎn)投票數(shù)的命令可以看到群集服務(wù)已停止

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

如果在HV03上面運(yùn)行查看群集投票的命令則可以看到當(dāng)前群集已經(jīng)在佛山站點(diǎn)順利形成,因?yàn)檫@邊占據(jù)多的投票數(shù),所以北京站點(diǎn)的群集目前會(huì)被關(guān)閉

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

#使用命令強(qiáng)制仲裁啟動(dòng)北京站點(diǎn)的群集

net stop clussvc

net start clussvc /FQ

啟動(dòng)完成后可以看到,在北京站點(diǎn)現(xiàn)在可以看到群集節(jié)點(diǎn)投票狀態(tài)了,同時(shí)也提升了paxos標(biāo)記,更新HV01的群集數(shù)據(jù)庫(kù)為最新

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

由于HV02 HV03 HV04還沒(méi)有和HV01聯(lián)網(wǎng),沒(méi)辦法知道北京站點(diǎn)那邊發(fā)生了強(qiáng)制仲裁,所以還會(huì)嘗試形成群集,在HV03上面查看群集投票狀態(tài),可以看到還是舊的記錄

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

這時(shí)我們?cè)诒本┱军c(diǎn)上面需要做一件事,由于現(xiàn)在北京站點(diǎn)和佛山站點(diǎn)依然都可以訪問(wèn)存儲(chǔ),所以當(dāng)應(yīng)用在北京站點(diǎn)聯(lián)機(jī)的時(shí)候,可能會(huì)出現(xiàn)失敗的情況,因?yàn)榉鹕接腥齻€(gè)節(jié)點(diǎn)也在和我搶群集磁盤(pán),所以當(dāng)務(wù)之急是取消掉佛山站點(diǎn)的投票數(shù),防止和北京站點(diǎn)搶占資源


#手動(dòng)取消佛山站點(diǎn)節(jié)點(diǎn)投票數(shù)


(Get-ClusterNode -Name hv02).NodeWeight = 0

(Get-ClusterNode -Name hv03).NodeWeight = 0

(Get-ClusterNode -Name hv04).NodeWeight = 0


需要注意的一點(diǎn),這里如果需要執(zhí)行去掉節(jié)點(diǎn)投票的操作,一定要在強(qiáng)制仲裁方進(jìn)行,因?yàn)橐坏┰诙鄶?shù)節(jié)點(diǎn)方執(zhí)行,當(dāng)再次網(wǎng)絡(luò)通信的時(shí)候也會(huì)被強(qiáng)制仲裁方的記錄蓋掉,不會(huì)生效。

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

之后我們?cè)俅螌⑷杭瘧?yīng)用聯(lián)機(jī),可以看到這時(shí)候?qū)嶋H上HV01已經(jīng)從佛山站點(diǎn)搶奪過(guò)來(lái)了群集磁盤(pán),佛山的三個(gè)站點(diǎn)再也沒(méi)辦法搶占群集資源,因?yàn)槿杭疟P(pán)已經(jīng)在權(quán)威一方重新上線,現(xiàn)在群集應(yīng)用可以始終在北京站點(diǎn)運(yùn)行

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

當(dāng)佛山三個(gè)站點(diǎn)網(wǎng)絡(luò)修復(fù)完成后,試圖加入北京站點(diǎn)的群集分區(qū)時(shí),可以在日志中看到阻止仲裁的日志,目前節(jié)點(diǎn)狀態(tài)不會(huì)是UP,只有當(dāng)佛山三個(gè)站點(diǎn)承認(rèn)北京站點(diǎn)為權(quán)威一方,并且群集數(shù)據(jù)庫(kù)已經(jīng)和北京站點(diǎn)同步一致后,才可以正常加入群集。

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2

經(jīng)過(guò)一段時(shí)間后,可以看到佛山節(jié)點(diǎn)已經(jīng)都完成阻止仲裁,正常加入群集,最后我們?cè)僦匦聻榉鹕焦?jié)點(diǎn)賦予投票,讓佛山節(jié)點(diǎn)可以正常參加故障轉(zhuǎn)移,賦予投票后,群集仲裁會(huì)檢測(cè)到當(dāng)前恢復(fù)四個(gè)節(jié)點(diǎn),又將根據(jù)動(dòng)態(tài)仲裁機(jī)制自動(dòng)選擇節(jié)點(diǎn)去掉一票,實(shí)現(xiàn)始終奇數(shù)投票。

WSFC動(dòng)態(tài)仲裁及投票調(diào)整2


以上為老王通過(guò)實(shí)踐得出的一點(diǎn)經(jīng)驗(yàn)之談,寫(xiě)這篇文章時(shí)老王的愿景是通過(guò)不斷的實(shí)驗(yàn)把動(dòng)態(tài)仲裁,動(dòng)態(tài)見(jiàn)證,票數(shù)調(diào)整,LowerQuorumPriorityNodeID,阻止仲裁這些技術(shù)反復(fù)驗(yàn)證明白,然后通過(guò)場(chǎng)景的形式盡可能形象的講出來(lái),告訴朋友們具體都是什么樣的功能,應(yīng)該如何使用,希望能夠用更多的人知道2012R2群集的這些技術(shù),越來(lái)越多的人來(lái)真正的使用群集,研究群集,群集絕不只是一根心跳線,一個(gè)存儲(chǔ),把節(jié)點(diǎn)連起來(lái)就完了,里面很多東西都值得我們花心思去研究,用心去研究技術(shù),自然會(huì)找到樂(lè)趣。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI