少年阿賓

          那些青春的歲月

            BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
            500 Posts :: 0 Stories :: 135 Comments :: 0 Trackbacks

          在Keepalived集群中,其實(shí)并沒(méi)有嚴(yán)格意義上的主、備節(jié)點(diǎn),雖然可以在Keepalived配置文件中設(shè)置“state”選項(xiàng)為“MASTER”狀態(tài),但是這并不意味著此節(jié)點(diǎn)一直就是Master角色。控制節(jié)點(diǎn)角色的是Keepalived配置文件中的“priority”值,但并它并不控制所有節(jié)點(diǎn)的角色,另一個(gè)能改變節(jié)點(diǎn)角色的是在vrrp_script模塊中設(shè)置的“weight”值,這兩個(gè)選項(xiàng)對(duì)應(yīng)的都是一個(gè)整數(shù)值,其中“weight”值可以是個(gè)負(fù)整數(shù),一個(gè)節(jié)點(diǎn)在集群中的角色就是通過(guò)這兩個(gè)值的大小決定的。

          在一個(gè)一主多備的Keepalived集群中,“priority”值最大的將成為集群中的Master節(jié)點(diǎn),而其他都是Backup節(jié)點(diǎn)。在Master節(jié)點(diǎn)發(fā)生故障后,Backup節(jié)點(diǎn)之間將進(jìn)行“民主選舉”,通過(guò)對(duì)節(jié)點(diǎn)優(yōu)先級(jí)值“priority”和““weight”的計(jì)算,選出新的Master節(jié)點(diǎn)接管集群服務(wù)。


          在vrrp_script模塊中,如果不設(shè)置“weight”選項(xiàng)值,那么集群優(yōu)先級(jí)的選擇將由Keepalived配置文件中的“priority”值決定,而在需要對(duì)集群中優(yōu)先級(jí)進(jìn)行靈活控制時(shí),可以通過(guò)在vrrp_script模塊中設(shè)置“weight”值來(lái)實(shí)現(xiàn)。下面列舉一個(gè)實(shí)例來(lái)具體說(shuō)明。


          假定有A和B兩節(jié)點(diǎn)組成的Keepalived集群,在A節(jié)點(diǎn)keepalived.conf文件中,設(shè)置“priority”值為100,而在B節(jié)點(diǎn)keepalived.conf文件中,設(shè)置“priority”值為80,并且A、B兩個(gè)節(jié)點(diǎn)都使用了“vrrp_script”模塊來(lái)監(jiān)控mysql服務(wù),同時(shí)都設(shè)置“weight”值為10,那么將會(huì)發(fā)生如下情況。


          在兩節(jié)點(diǎn)都啟動(dòng)Keepalived服務(wù)后,正常情況是A節(jié)點(diǎn)將成為集群中的Master節(jié)點(diǎn),而B(niǎo)自動(dòng)成為Backup節(jié)點(diǎn),此時(shí)將A節(jié)點(diǎn)的mysql服務(wù)關(guān)閉,通過(guò)查看日志發(fā)現(xiàn),并沒(méi)有出現(xiàn)B節(jié)點(diǎn)接管A節(jié)點(diǎn)的日志,B節(jié)點(diǎn)仍然處于Backup狀態(tài),而A節(jié)點(diǎn)依舊是Master狀態(tài),在這種情況下整個(gè)HA集群將失去意義。


          下面就分析一下產(chǎn)生這種情況的原因,這也就是Keepalived集群中主、備角色選舉策略的問(wèn)題。下面總結(jié)了在Keepalived中使用vrrp_script模塊時(shí)整個(gè)集群角色的選舉算法,由于“weight”值可以是正數(shù)也可以是負(fù)數(shù),因此,要分兩種情況進(jìn)行說(shuō)明。


          1. “weight”值為正數(shù)時(shí)

          在vrrp_script中指定的腳本如果檢測(cè)成功,那么Master節(jié)點(diǎn)的權(quán)值將是“weight值與”priority“值之和,如果腳本檢測(cè)失敗,那么Master節(jié)點(diǎn)的權(quán)值保持為“priority”值,因此切換策略為:

          Master節(jié)點(diǎn)“vrrp_script”腳本檢測(cè)失敗時(shí),如果Master節(jié)點(diǎn)“priority”值小于Backup節(jié)點(diǎn)“weight值與”priority“值之和,將發(fā)生主、備切換。

          Master節(jié)點(diǎn)“vrrp_script”腳本檢測(cè)成功時(shí),如果Master節(jié)點(diǎn)“weight”值與“priority”值之和大于Backup節(jié)點(diǎn)“weight”值與“priority”值之和,主節(jié)點(diǎn)依然為主節(jié)點(diǎn),不發(fā)生切換。


          2. “weight”值為負(fù)數(shù)時(shí)

          在“vrrp_script”中指定的腳本如果檢測(cè)成功,那么Master節(jié)點(diǎn)的權(quán)值仍為“priority”值,當(dāng)腳本檢測(cè)失敗時(shí),Master節(jié)點(diǎn)的權(quán)值將是“priority“值與“weight”值之差,因此切換策略為:

          Master節(jié)點(diǎn)“vrrp_script”腳本檢測(cè)失敗時(shí),如果Master節(jié)點(diǎn)“priority”值與“weight”值之差小于Backup節(jié)點(diǎn)“priority”值,將發(fā)生主、備切換。

          Master節(jié)點(diǎn)“vrrp_script”腳本檢測(cè)成功時(shí),如果Master節(jié)點(diǎn)“priority”值大于Backup節(jié)點(diǎn)“priority”值時(shí),主節(jié)點(diǎn)依然為主節(jié)點(diǎn),不發(fā)生切換。


          在熟悉了Keepalived主、備角色的選舉策略后,再來(lái)分析一下剛才實(shí)例,由于A、B兩個(gè)節(jié)點(diǎn)設(shè)置的“weight”值都為10,因此符合選舉策略的第一種,在A節(jié)點(diǎn)停止Mysql服務(wù)后,A節(jié)點(diǎn)的腳本檢測(cè)將失敗,此時(shí)A節(jié)點(diǎn)的權(quán)值將保持為A節(jié)點(diǎn)上設(shè)置的“priority”值,即為100,而B(niǎo)節(jié)點(diǎn)的權(quán)值將變?yōu)?#8220;weight”值與“priority”值之和,也就是90(10+80),這樣就出現(xiàn)了A節(jié)點(diǎn)權(quán)值仍然大于B節(jié)點(diǎn)權(quán)值的情況,因此不會(huì)發(fā)生主、備切換。


          對(duì)于“weight”值的設(shè)置,有一個(gè)簡(jiǎn)單的標(biāo)準(zhǔn),即“weight”值的絕對(duì)值要大于Master和Backup節(jié)點(diǎn)“priority”值之差。對(duì)于上面A、B兩個(gè)節(jié)點(diǎn)的例子,只要設(shè)置“weight”值大于20即可保證集群正常運(yùn)行和切換。由此可見(jiàn),對(duì)于“weight值的設(shè)置,要非常謹(jǐn)慎,如果設(shè)置不好,將導(dǎo)致集群角色選舉失敗,使集群陷于癱瘓狀態(tài)。

          posted on 2015-10-12 00:50 abin 閱讀(691) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): keepAlive

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 汾阳市| 铜川市| 唐河县| 肃北| 遵义市| 庆安县| 自治县| 连城县| 江津市| 渭南市| 哈密市| 宽甸| 富蕴县| 治多县| 柏乡县| 定兴县| 军事| 墨竹工卡县| 鄂州市| 莱州市| 阿城市| 黄大仙区| 彰化县| 遂宁市| 黑河市| 白河县| 海伦市| 合川市| 大同县| 大新县| 黄骅市| 柳江县| 灵台县| 莱西市| 麟游县| 定西市| 九龙城区| 荃湾区| 中宁县| 称多县| 共和县|