一種使用keepalived軟件實(shí)現(xiàn)數(shù)據(jù)庫HA應(yīng)用的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種實(shí)現(xiàn)數(shù)據(jù)庫HA(高可用)應(yīng)用的方法,尤其是一種使用keepalived軟件實(shí)現(xiàn)數(shù)據(jù)庫HA應(yīng)用的方法。
【背景技術(shù)】
[0002]Keepalived軟件一般用于檢測Web服務(wù)器的狀態(tài),如果有一臺web服務(wù)器死機(jī)或工作出現(xiàn)故障,將被keepalived檢測到,并將有故障的web服務(wù)器從系統(tǒng)中剔除,當(dāng)web服務(wù)器工作正常后,keepalived將自動將web服務(wù)器加入到服務(wù)器群中,上述這些工作全部自動完成,需要人介入?yún)⑴c的僅僅是修復(fù)故障的web服務(wù)器。
[0003]除此之外,keepalived還常常被用于實(shí)現(xiàn)基于Linux系統(tǒng)的應(yīng)用負(fù)載均衡和高可用(HA),當(dāng)keepalived服務(wù)啟動時(shí),主機(jī)角色(包括master、backup、fault)的選擇一般遵循如圖1所示的邏輯圖。
[0004]在設(shè)計(jì)數(shù)據(jù)庫HA時(shí),非常重要的一點(diǎn)是確保不出現(xiàn)腦裂的情況(腦裂,是指主庫和備庫出現(xiàn)了不可逆轉(zhuǎn)的差異數(shù)據(jù))。為了防止腦裂,數(shù)據(jù)庫在進(jìn)行主備切換時(shí),必須確保數(shù)據(jù)不會被多臺主機(jī)修改,或者必須確保failded主節(jié)點(diǎn)完全關(guān)機(jī)后才能激活備節(jié)點(diǎn),為此,增加了 notify和fence機(jī)制。具體來說,當(dāng)一個(gè)節(jié)點(diǎn)進(jìn)入master狀態(tài)后,會觸發(fā)notify和fence其對端服務(wù)器,激活數(shù)據(jù)庫,但是,有可能出現(xiàn)在上述動作還沒有完成前track script就被觸發(fā)的情況,如果在notify動作完成前觸發(fā)track script的話,會導(dǎo)致failed狀態(tài)出現(xiàn),進(jìn)而將進(jìn)入master狀態(tài)的節(jié)點(diǎn)主機(jī)變成fault狀態(tài)。從圖1可以得出,當(dāng)原master狀態(tài)節(jié)點(diǎn)進(jìn)入fault狀態(tài)后,其他的backup狀態(tài)節(jié)點(diǎn)則會開始競選master資格,而競選必將觸發(fā)新的一輪notify,那么,如果在隨后每次觸發(fā)notify時(shí)都出現(xiàn)在notify完成之前track script觸發(fā)的情況,系統(tǒng)將永無休止的進(jìn)行下去,而無法完成此次切換,如果多次出現(xiàn)上述情況,也必然導(dǎo)致系統(tǒng)切換時(shí)間成本的增加,效率降低。也就是說,在使用Keepalived來構(gòu)建數(shù)據(jù)庫的HA時(shí),在notify_* (*是主機(jī)角色)和notifyscript調(diào)用結(jié)束前,如果track (檢查)發(fā)生了,那么可能會導(dǎo)致track結(jié)果為不正常,進(jìn)而觸發(fā)master角色又轉(zhuǎn)變成backup,而這次角色翻轉(zhuǎn)又將再一次觸發(fā)調(diào)用notify_backup,notify script,如此循環(huán)往復(fù)(上述意外再次發(fā)生),則陷入永遠(yuǎn)無法完成切換的死循環(huán)。
【發(fā)明內(nèi)容】
[0005]為克服現(xiàn)有技術(shù)中存在的技術(shù)問題,本發(fā)明提出一種使用keepalived軟件實(shí)現(xiàn)數(shù)據(jù)庫HA應(yīng)用的方法。
[0006]為達(dá)到上述目的,本發(fā)明所采用的技術(shù)方案是:
一種使用keepalived軟件實(shí)現(xiàn)數(shù)據(jù)庫HA應(yīng)用的方法,其特征在于,包括如下步驟:
節(jié)點(diǎn)狀態(tài)切換為master后,同步調(diào)用notify_*腳本,*是master、backup 二者中的一個(gè);等待notify_*腳本調(diào)用結(jié)束并返回結(jié)果為正常;觸發(fā)跟蹤腳本track_script。
[0007]上述技術(shù)方案還可以進(jìn)一步完善: 作為優(yōu)選,所述的notify_mater執(zhí)行如下步驟:fence切換至master狀態(tài)節(jié)點(diǎn)的對端節(jié)點(diǎn);激活standby數(shù)據(jù)庫;將track_scrip.sh文件軟鏈接指向track_master.sh文件。
[0008]作為優(yōu)選,所述的track_master.sh用于檢查本地監(jiān)聽、檢查本地表空間的讀寫中的至少一種。
[0009]作為優(yōu)選,所述的notify_backup執(zhí)行如下步驟:關(guān)閉數(shù)據(jù)庫;將track_scrip.sh文件軟鏈接指向track_backup.sh文件;啟動數(shù)據(jù)庫。
[0010]作為優(yōu)選,track_backup.sh用于檢查VIP監(jiān)聽、檢查本地監(jiān)聽、檢查本地表空間的讀、檢查流復(fù)制、檢查復(fù)制延遲中的至少一種。
[0011]作為優(yōu)選,使用keepalived軟件實(shí)現(xiàn)數(shù)據(jù)庫HA應(yīng)用的方法還包括如下步驟:配置數(shù)據(jù)庫流復(fù)制環(huán)境,備份數(shù)據(jù)庫實(shí)時(shí)從主數(shù)據(jù)庫獲取Xlog信息并實(shí)時(shí)恢復(fù);啟用keepalived 主節(jié)點(diǎn)(master)、備節(jié)點(diǎn)(backup)。
[0012]由于上述技術(shù)方案的采用,本發(fā)明具有以下優(yōu)點(diǎn):
本發(fā)明通過在節(jié)點(diǎn)進(jìn)入master狀態(tài)后同步調(diào)用notify,避免了 keepalived軟件在數(shù)據(jù)庫HA架構(gòu)中遇到無休止切換的問題。此外,本發(fā)明通過設(shè)置軟鏈接,實(shí)現(xiàn)了不同的狀態(tài)下使用不同的track腳本。
【附圖說明】
[0013]圖1是keepalived服務(wù)啟動時(shí),各主機(jī)角色的選擇邏輯圖;
圖2是一種數(shù)據(jù)庫跟蹤腳本邏輯圖。
【具體實(shí)施方式】
[0014]下面通過實(shí)施例并結(jié)合附圖,對本發(fā)明的技術(shù)方案做進(jìn)一步解釋說明。
[0015]Keepalived 一般包含3個(gè)組件,分別是核心組件,監(jiān)控檢查組件以及VRRP組件,其中:
1、核心組件用于解析配置文件,F(xiàn)ORK監(jiān)控和VRRP子進(jìn)程,監(jiān)控子進(jìn)程的狀態(tài)并在必要的時(shí)候重啟子進(jìn)程。
[0016]2、監(jiān)控檢查組件負(fù)責(zé)監(jiān)控負(fù)載均衡主機(jī)的狀態(tài)。
[0017]3、VRRP組件遵循VRRP協(xié)議設(shè)計(jì),用于檢測主機(jī)狀態(tài),接口狀態(tài),負(fù)責(zé)主機(jī)角色的轉(zhuǎn)換,主機(jī)角色包含MA STER, BACKUP, FAULT三種。
[0018]在配置ke印alived前,需要對數(shù)據(jù)庫HA環(huán)境進(jìn)行系統(tǒng)規(guī)劃,如配置至少2臺主機(jī),與主機(jī)數(shù)量對應(yīng)的IP,并另外設(shè)置至少一個(gè)虛擬IP用于漂移(跟隨角色轉(zhuǎn)換進(jìn)行漂移,master在哪臺主機(jī)就漂移到哪臺物理主機(jī)上,因此,應(yīng)用程序只需要鏈接到虛擬IP即可,而無需關(guān)注master庫在哪個(gè)物理主機(jī)上)。配置keepalived時(shí),將各主機(jī)IP加入單播peer,以確定keepalived發(fā)送和接收vrrp包的范圍。
[0019]以下介紹一種實(shí)施例,應(yīng)用本實(shí)施例,可以使keepalived用于構(gòu)建數(shù)據(jù)庫HA,并應(yīng)用于大多數(shù)的數(shù)據(jù)庫HA架構(gòu)中,如基于流復(fù)制的HA、基于塊設(shè)備復(fù)制的HA、基于共享存儲的HA、基于分布式存儲的HA。
[0020]一種使用keepalived軟件實(shí)現(xiàn)數(shù)據(jù)庫HA應(yīng)用的方法,包括如下步驟:
(I)節(jié)點(diǎn)狀態(tài)切換為master后,同步調(diào)用notify_*腳本,*是master、backup 二者中的一個(gè);
(2)等待notify_*腳本調(diào)用結(jié)束并返回結(jié)果為正常;
(3)觸發(fā)跟蹤腳本track_script;
(4)配置數(shù)據(jù)庫流復(fù)制環(huán)境,備份數(shù)據(jù)庫使用流復(fù)制協(xié)議