專利名稱:一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的實(shí)現(xiàn)方法和系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種保持ORACLE數(shù)據(jù)庫服務(wù)高可用的方法,特別適用于ORACLE數(shù)據(jù)庫的DATAGUARD特性,通過與開源軟件DRBD和Keepalived的組合搭配,無論在switchover(計(jì)劃內(nèi)切換,無損切換)或者是failover (計(jì)劃外切換,有損切換)時(shí),均可以在不丟失數(shù)據(jù)的前提下實(shí)現(xiàn)數(shù)據(jù)庫的主從切換,并保障數(shù)據(jù)庫服務(wù)的高可用。
背景技術(shù):
目前ORACLE數(shù)據(jù)庫軟件的Dataguard特性(以下簡 稱Dataguard)是應(yīng)用較為普遍的數(shù)據(jù)庫高可用解決方案,它通過一主(Primary)多從(Standby)的運(yùn)行機(jī)制,當(dāng)主庫出現(xiàn)故障時(shí),可以通過提升某個(gè)從庫的角色為新主庫的方式,實(shí)現(xiàn)數(shù)據(jù)庫服務(wù)的高可用。Dataguard提供有兩種故障切換機(jī)制,分別應(yīng)用于不同的場景,操作步驟和實(shí)現(xiàn)原理也略有差異,下面對上述兩種切換機(jī)制的操作步驟分別進(jìn)行描述A>. SWITCHOVER(計(jì)劃內(nèi)切換,無損切換)的操作步驟如下I).檢查Dataguard環(huán)境,驗(yàn)證歸檔文件、初始化參數(shù)等是否符合需求;2).查詢主庫端數(shù)據(jù)庫狀態(tài),驗(yàn)證是否可執(zhí)行角色切換;3).如狀態(tài)允許,則切換主庫身份為Standby ;4).關(guān)閉原主庫;5).重新啟動(dòng)原主庫到加載(mount)模式;6).查詢從庫端數(shù)據(jù)庫狀態(tài),驗(yàn)證是否可執(zhí)行角色切換;7).如狀態(tài)允許,則切換從庫身份為Primary ;8).打開新主庫;9).原主庫啟動(dòng)歸檔文件接收和應(yīng)用。B〉. FAILOVER(計(jì)劃外切換,有損切換)的操作步驟如下I).檢查Dataguard環(huán)境,驗(yàn)證歸檔文件、初始化參數(shù)等是否符合需求;2).取消當(dāng)前歸檔應(yīng)用進(jìn)程;3).執(zhí)行完成歸檔應(yīng)用操作;4).查詢從庫數(shù)據(jù)庫狀態(tài),驗(yàn)證是否可執(zhí)行角色切換;5).如狀態(tài)允許,則切換從庫身份為Primary ;6).打開新主庫。但是,上述方式也有缺憾,主要表現(xiàn)在IX操作復(fù)雜度高,必須由專業(yè)的數(shù)據(jù)庫管理員(DBA)經(jīng)過培訓(xùn)后才能夠處理;2〉.執(zhí)行切換操作時(shí),主庫和從庫之間需要有交互,無法實(shí)現(xiàn)自動(dòng)無值守的切換;3〉.切換操作步驟多,停機(jī)時(shí)間較長,出現(xiàn)問題的機(jī)率大;4〉.切換對現(xiàn)有環(huán)境影響較大,如執(zhí)行FAILOVER時(shí),將破壞當(dāng)前的Dataguard環(huán)境,導(dǎo)致操作后必須重建Dataguard環(huán)境;5〉.無法實(shí)現(xiàn)訪問IP的統(tǒng)一,由于主從分別為不同的數(shù)據(jù)庫節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的物理IP均不相同,當(dāng)執(zhí)行過切換操作后,前端應(yīng)用連接的數(shù)據(jù)庫服務(wù)IP也必須同步變更。因此,需要提供一種快速、可靠、易于實(shí)施和維護(hù)、故障快速恢復(fù)的數(shù)據(jù)庫服務(wù)高可性綜合解決方案。
發(fā)明內(nèi)容
本發(fā)明主要解決大型ORACLE數(shù)據(jù)庫軟件平臺(tái),服務(wù)中斷導(dǎo)致業(yè)務(wù)長時(shí)間停頓的問題,針對傳統(tǒng)的DataGuard災(zāi)備方案無法提供實(shí)時(shí)全面的高可用服務(wù),故障切換時(shí)間長,并且一旦執(zhí)行切換,前端的應(yīng)用程序也必須同步進(jìn)行修改等不足,通過在現(xiàn)有DataGuard環(huán)境中引入 DRBD (Distributed Replicated Block Device)和 Keepalived 軟件的方式,提供一種快速、可靠、易于實(shí)施和維護(hù)、故障快速恢復(fù)的數(shù)據(jù)庫服務(wù)高可性綜合解決方案。
根據(jù)本發(fā)明,提供一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的實(shí)現(xiàn)方法,該方法包括為各數(shù)據(jù)庫節(jié)點(diǎn)分配虛擬IP ;對數(shù)據(jù)庫節(jié)點(diǎn)進(jìn)行心跳檢測,判斷數(shù)據(jù)庫主、從節(jié)點(diǎn)是否存活,當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)不可訪問時(shí),自動(dòng)將虛擬IP飄移至從節(jié)點(diǎn),并切換從節(jié)點(diǎn)的身份為主節(jié)點(diǎn)。優(yōu)選地,該方法進(jìn)一步包括當(dāng)啟動(dòng)數(shù)據(jù)庫節(jié)點(diǎn)服務(wù)器時(shí),檢查該節(jié)點(diǎn)的數(shù)據(jù)庫服務(wù)是否可用,若不可用,則啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn)。優(yōu)選地,在各數(shù)據(jù)庫節(jié)點(diǎn)中分別創(chuàng)建有兩塊DRBD共享盤,用于存儲(chǔ)各數(shù)據(jù)庫節(jié)點(diǎn)中的差異性數(shù)據(jù),通過DRBD內(nèi)置的C型完全同步協(xié)議保持主從節(jié)點(diǎn)的數(shù)據(jù)的一致性,所述兩塊DRBD共享盤分別定義為主共享盤和從共享盤,通過檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn),從而實(shí)現(xiàn)數(shù)據(jù)庫主從節(jié)點(diǎn)的切換或啟動(dòng)。優(yōu)選地,通過檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn)包括檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,若當(dāng)前節(jié)點(diǎn)的DRBD磁盤狀態(tài)中顯示另一節(jié)點(diǎn)的身份為從節(jié)點(diǎn),則啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn),若當(dāng)前節(jié)點(diǎn)的DRBD磁盤狀態(tài)中顯示另一節(jié)點(diǎn)的身份為主節(jié)點(diǎn),則啟動(dòng)當(dāng)前節(jié)點(diǎn)為從節(jié)點(diǎn)。優(yōu)選地,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)包括以下步驟檢查當(dāng)前節(jié)點(diǎn)是否啟動(dòng)了數(shù)據(jù)庫服務(wù),如已啟動(dòng)則首先關(guān)閉;放棄從共享盤的主角色,將其改為從角色;持有主共享盤的主角色;映射DRBD共享盤至具有主角色的DRBD共享盤;創(chuàng)建軟鏈接指向具有主角色的DRBD共享盤的數(shù)據(jù)文件目錄;正常啟動(dòng)當(dāng)前節(jié)點(diǎn)數(shù)據(jù)庫。優(yōu)選地,啟動(dòng)當(dāng)前節(jié)點(diǎn)為從節(jié)點(diǎn)包括以下步驟檢查當(dāng)前節(jié)點(diǎn)是否啟動(dòng)了數(shù)據(jù)庫服務(wù),如已啟動(dòng)則首先關(guān)閉;放棄主共享盤的主角色,將其改為從角色;持有從共享盤的主角色;映射DRBD共享盤至具有從角色的DRBD共享盤;創(chuàng)建軟鏈接指向具有從角色的DRBD共享盤的數(shù)據(jù)文件目錄;
啟動(dòng)當(dāng)前節(jié)點(diǎn)數(shù)據(jù)庫到只讀打開模式;啟動(dòng)Dataguard的實(shí)時(shí)日志應(yīng)用。根據(jù)本發(fā)明的另一個(gè)方面,提供一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的系統(tǒng),該系統(tǒng)包括Dataguard模塊,該模塊與DRBD之間組織搭配,在各數(shù)據(jù)庫節(jié)點(diǎn)中分別創(chuàng)建有兩塊DRBD共享盤,用于存儲(chǔ)各數(shù)據(jù)庫節(jié)點(diǎn)中的差異性數(shù)據(jù),所述兩塊DRBD共享盤分別定義為主共享盤和從共享盤;DRBD數(shù)據(jù)保護(hù)模塊,該模塊利用DRBD內(nèi)置的C型完全同步協(xié)議保持主從節(jié)點(diǎn)的數(shù)據(jù)的一致性;
角色控制模塊,該模塊通過檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn),從而實(shí)現(xiàn)數(shù)據(jù)庫主從節(jié)點(diǎn)的切換和啟動(dòng)。優(yōu)選地,該系統(tǒng)進(jìn)一步包括虛擬IP模塊,該模塊為各數(shù)據(jù)庫節(jié)點(diǎn)分配虛擬IP ;對數(shù)據(jù)庫節(jié)點(diǎn)進(jìn)行心跳檢測,判斷數(shù)據(jù)庫主、從節(jié)點(diǎn)是否存活,當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)不可訪問時(shí),自動(dòng)將虛擬IP飄移至從節(jié)點(diǎn),并切換從節(jié)點(diǎn)的身份為主節(jié)點(diǎn);當(dāng)啟動(dòng)數(shù)據(jù)庫節(jié)點(diǎn)服務(wù)器時(shí),檢查該節(jié)點(diǎn)的數(shù)據(jù)庫服務(wù)是否可用,若不可用,則啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn)。優(yōu)選地,所述差異性數(shù)據(jù)包括控制文件、聯(lián)機(jī)日志文件。本發(fā)明為解決上述現(xiàn)有解決方案中的不足,在傳統(tǒng)Dataguard在基礎(chǔ)上引入了第三方開源軟件DRBD和Keepalived,組合構(gòu)建了一套易維護(hù),實(shí)現(xiàn)數(shù)據(jù)庫服務(wù)高可用性的全面解決方案。本方案在保留Oracle Dataguard特性在保護(hù)數(shù)據(jù)方面的所有功能的同時(shí),有下列功能上的增強(qiáng)擺脫了原有Dataguard切換操作的專業(yè)性,基本避免了數(shù)據(jù)庫層的操作,將角色切換的步驟轉(zhuǎn)換為操作系統(tǒng)層的命令,進(jìn)行一系列封裝之后,使得普通SA人員也可以輕松執(zhí)行,降低原有Dataguard環(huán)境的維護(hù)復(fù)雜度;完全規(guī)避了 Dataguard中failover切換對數(shù)據(jù)庫環(huán)境的破壞,減少了后期的維護(hù)成本;提供了虛擬IP,使得前端的應(yīng)用程序不會(huì)因后端數(shù)據(jù)庫層服務(wù)的變動(dòng)而進(jìn)行修改,減少了維護(hù)操作、降低了耦合度;自動(dòng)檢測功能,自動(dòng)角色切換,實(shí)現(xiàn)了數(shù)據(jù)庫服務(wù)的高可用性。
圖I示出根據(jù)本發(fā)明實(shí)施例的一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的實(shí)現(xiàn)方法的流程圖。圖2示出根據(jù)本發(fā)明實(shí)施例的一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的系統(tǒng)的結(jié)構(gòu)圖。圖3示出根據(jù)本發(fā)明實(shí)施例的一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的實(shí)現(xiàn)方法的基礎(chǔ)架構(gòu)圖。
具體實(shí)施方式
下面結(jié)合附圖和具體實(shí)施方式
對本發(fā)明作進(jìn)一步描述。圖I示出根據(jù)本發(fā)明實(shí)施例的一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的實(shí)現(xiàn)方法的流程圖。在步驟Sll中,為各數(shù)據(jù)庫節(jié)點(diǎn)分配虛擬IP。在步驟S12中,對數(shù)據(jù)庫節(jié)點(diǎn)進(jìn)行心跳檢測,判斷數(shù)據(jù)庫主、從節(jié)點(diǎn)是否存活,當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)不可訪問時(shí),自動(dòng)將虛擬IP飄移至從節(jié)點(diǎn),并切換從節(jié)點(diǎn)的身份為主節(jié)點(diǎn)。根據(jù)本發(fā)明實(shí)施例,當(dāng)啟動(dòng)數(shù)據(jù)庫節(jié)點(diǎn)服務(wù)器時(shí),檢查該節(jié)點(diǎn)的數(shù)據(jù)庫服務(wù)是否可用,若不可用,則啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn)。具體地,在各數(shù)據(jù)庫節(jié)點(diǎn)中分別創(chuàng)建有兩塊DRBD共享盤,用于存儲(chǔ)各數(shù)據(jù)庫節(jié)點(diǎn)中的差異性數(shù)據(jù),通過DRBD內(nèi)置的C型完全同步協(xié)議保持主從節(jié)點(diǎn)的數(shù)據(jù)的一致性,所述 兩塊DRBD共享盤分別定義為主共享盤和從共享盤,通過檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn),從而實(shí)現(xiàn)數(shù)據(jù)庫主從節(jié)點(diǎn)的切換或啟動(dòng)。通過檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn)包括檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,若當(dāng)前節(jié)點(diǎn)的DRBD磁盤狀態(tài)中顯示另一節(jié)點(diǎn)的身份為從節(jié)點(diǎn),則啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn),若當(dāng)前節(jié)點(diǎn)的DRBD磁盤狀態(tài)中顯示另一節(jié)點(diǎn)的身份為主節(jié)點(diǎn),則啟動(dòng)當(dāng)前節(jié)點(diǎn)為從節(jié)點(diǎn)。啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)包括以下步驟檢查當(dāng)前節(jié)點(diǎn)是否啟動(dòng)了數(shù)據(jù)庫服務(wù),如已啟動(dòng)則首先關(guān)閉;放棄從共享盤的主角色,將其改為從角色;持有主共享盤的主角色;映射DRBD共享盤至具有主角色的DRBD共享盤;創(chuàng)建軟鏈接指向具有主角色的DRBD共享盤的數(shù)據(jù)文件目錄;正常啟動(dòng)當(dāng)前節(jié)點(diǎn)數(shù)據(jù)庫。啟動(dòng)當(dāng)前節(jié)點(diǎn)為從節(jié)點(diǎn)包括以下步驟檢查當(dāng)前節(jié)點(diǎn)是否啟動(dòng)了數(shù)據(jù)庫服務(wù),如已啟動(dòng)則首先關(guān)閉;放棄主共享盤的主角色,將其改為從角色;持有從共享盤的主角色;映射DRBD共享盤至具有從角色的DRBD共享盤;創(chuàng)建軟鏈接指向具有從角色的DRBD共享盤的數(shù)據(jù)文件目錄;啟動(dòng)當(dāng)前節(jié)點(diǎn)數(shù)據(jù)庫到只讀打開模式;啟動(dòng)Dataguard的實(shí)時(shí)日志應(yīng)用。圖2示出根據(jù)本發(fā)明實(shí)施例的一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的系統(tǒng)的結(jié)構(gòu)圖。該系統(tǒng)包括=Dataguard模塊,該模塊與DRBD之間組織搭配,在各數(shù)據(jù)庫節(jié)點(diǎn)中分別創(chuàng)建有兩塊DRBD共享盤,用于存儲(chǔ)各數(shù)據(jù)庫節(jié)點(diǎn)中的差異性數(shù)據(jù),所述兩塊DRBD共享盤分別定義為主共享盤和從共享盤。DataGuard模塊以傳統(tǒng)的ORACLE DataGuard特性為基礎(chǔ),需要首先部署一套Dataguard環(huán)境,為了與DRBD之間組織搭配,數(shù)據(jù)庫的相關(guān)文件應(yīng)放置于DRBD共享盤中,考慮到大型數(shù)據(jù)庫平臺(tái)的數(shù)據(jù)規(guī)模較大,如將所有文件均放置于DRBD共享盤,則DRBD共享盤之間的交互將會(huì)非常的頻繁,這可能會(huì)對磁盤I/O能力和網(wǎng)絡(luò)帶寬均帶來考驗(yàn),為了降低DRBD共享盤上保存的數(shù)據(jù)量,通過對Dataguard環(huán)境中各類文件的抽象處理,可以發(fā)現(xiàn)Dataguard環(huán)境中主從兩端差異主要是在控制文件、聯(lián)機(jī)日志文件兩種類型。DRBD數(shù)據(jù)保護(hù)模塊,該模塊利用DRBD內(nèi)置的C型完全同步協(xié)議保持主從節(jié)點(diǎn)的數(shù)據(jù)的一致性。確保即使主端意外巖機(jī)也不會(huì)丟失數(shù)據(jù)。通過DRBD確保Dataguard環(huán)境中的主(primary)角色永遠(yuǎn)固定存在(相當(dāng)于避免了 failover的情形),實(shí)現(xiàn)了無論何時(shí)、何種情況下執(zhí)行切換操作,均不會(huì)對Dataguard環(huán)境造成影響。
角色控制模塊,該模塊通過檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn),從而實(shí)現(xiàn)數(shù)據(jù)庫主從節(jié)點(diǎn)的切換和啟動(dòng)。通過Bash Shell實(shí)現(xiàn)一系列功能。根據(jù)本發(fā)明實(shí)施例,該系統(tǒng)進(jìn)一步包括虛擬IP模塊,該模塊通過Keepalived實(shí)現(xiàn)三項(xiàng)功能虛擬IP :為各數(shù)據(jù)庫節(jié)點(diǎn)分配虛擬I,P前端應(yīng)用只要連接虛擬IP即可,而不用關(guān)心該IP究竟在哪個(gè)數(shù)據(jù)庫節(jié)點(diǎn);心跳檢測判斷數(shù)據(jù)庫的主和從節(jié)點(diǎn)是否存活,當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)不可訪問時(shí),自動(dòng)將虛擬IP飄移至從節(jié)點(diǎn),并切換從節(jié)點(diǎn)的身份為主節(jié)點(diǎn);啟動(dòng)數(shù)據(jù)庫服務(wù)當(dāng)啟動(dòng)數(shù)據(jù)庫節(jié)點(diǎn)服務(wù)器時(shí),檢查該節(jié)點(diǎn)的數(shù)據(jù)庫服務(wù)是否可 用,若不可用,則啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn)。圖3示出根據(jù)本發(fā)明實(shí)施例的一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的實(shí)現(xiàn)方法的基礎(chǔ)架構(gòu)圖。
具體實(shí)施方式
如下I、創(chuàng)建DRBD共享磁盤DRBD數(shù)據(jù)保護(hù)模塊使用DRBD內(nèi)置的c型完全同步協(xié)議,保持主端和從端數(shù)據(jù)的一致性,確保即使主端意外巖機(jī)也不會(huì)丟失數(shù)據(jù)。通過DRBD確保Dataguard環(huán)境中的pr imary角色永遠(yuǎn)固定存在,相當(dāng)于避免了 failover的情形,實(shí)現(xiàn)了無論何時(shí)、何種情況下執(zhí)行切換操作,均不會(huì)對Dataguard環(huán)境造成影響。根據(jù)上述的DRBD數(shù)據(jù)保護(hù)模塊的功能,由DRBD提供主從節(jié)點(diǎn)間數(shù)據(jù)的一致性保護(hù),考慮到ORACLE數(shù)據(jù)庫作為大型數(shù)據(jù)庫軟件,通常提供大量數(shù)據(jù)的存儲(chǔ)服務(wù),如果將所有ORACLE數(shù)據(jù)庫的相關(guān)文件均放置于DRBD共享磁盤,那么不僅需要超大的DRBD共享磁盤,而且由于主從之間相互同步的需要,對網(wǎng)絡(luò)層的要求也會(huì)比較高。通過對數(shù)據(jù)文件類型的分析,我們注意到ORACLE Dataguard的主節(jié)點(diǎn)和從節(jié)點(diǎn)之間,文件的差異主要體現(xiàn)在下列三種文件
主節(jié)點(diǎn)從節(jié)點(diǎn)
Redolog Files沒有或有卻未使用
沒有或有卻未使用Standby Redolog Files
Control FilesStandby Control Files這兩類文件數(shù)量很少而且文件大小一般都不大(規(guī)模以Gb計(jì)),其它如datafile、spfile、archivelog files,密鑰文件等在主從兩端均相同(spfile小有差異但不影響主從身份),基于它的這個(gè)特點(diǎn),我們可以設(shè)計(jì)每個(gè)數(shù)據(jù)庫節(jié)點(diǎn)中均創(chuàng)建兩塊DRBD共享磁盤,并將這兩塊DRBD共享磁盤分別定義為主共享盤(pridata)和從共享盤(stddata),僅用于保存主節(jié)點(diǎn)和從節(jié)點(diǎn)上的這幾種不同類型的文件,這樣設(shè)計(jì)的優(yōu)點(diǎn)在于能夠大大降低DRBD盤同步的數(shù)據(jù)量,進(jìn)而提高性能。2、配置 Dataguard 環(huán)境按照ORACLE的標(biāo)準(zhǔn)步驟配置Dataguard環(huán)境,唯一需要注意的是,在存儲(chǔ)相關(guān)數(shù)據(jù)文件時(shí),除主從節(jié)點(diǎn)中的 Redolog Files、Control Files、Standby Redolog Files 和Standby Control Files幾類文件保存在DRBD的共享盤外,其它文件則保存在本地存儲(chǔ)設(shè)備中,如圖3所示。3、創(chuàng)建控制模塊主從節(jié)點(diǎn)中的控制模塊完全相同,該控制模塊由Bash Shell編寫,主要實(shí)現(xiàn)下列功能A>.檢測當(dāng)前服務(wù)器是否啟動(dòng)了數(shù)據(jù)庫服務(wù),如已啟動(dòng)則首先關(guān)閉;B〉.檢測當(dāng)前節(jié)點(diǎn)DRBD主共享盤pridata的角色,如果另一節(jié)點(diǎn)的角色是從(secondary),則執(zhí)行啟動(dòng)當(dāng)前節(jié)點(diǎn)為主(primary)節(jié)點(diǎn)的操作,后續(xù)步驟如下I).放棄DRBD從共享盤stddata的主角色,改為從角色;
2).持有DRBD主共享盤pridata的主角色;3).映射DRBD共享盤至具有主角色的DRBD共享盤;4).創(chuàng)建軟鏈接指向具有主角色的DRBD共享盤的數(shù)據(jù)文件目錄;5).正常啟動(dòng)當(dāng)前節(jié)點(diǎn)數(shù)據(jù)庫。C〉.如果當(dāng)前節(jié)點(diǎn)DRBD主共享盤pridata的角色狀態(tài)顯示另一節(jié)點(diǎn)的角色為主角色,則執(zhí)行啟動(dòng)當(dāng)前節(jié)點(diǎn)為從節(jié)點(diǎn)的操作,后續(xù)步驟如下I).放棄DRBD主共享盤pridata的主角色,改為從角色;2).持有DRBD從共享盤stddata的主角色;3).映射DRBD共享盤至具有從角色的DRBD共享盤;4).創(chuàng)建軟鏈接指向具有從角色的DRBD共享盤的數(shù)據(jù)文件目錄;5).啟動(dòng)當(dāng)前節(jié)點(diǎn)數(shù)據(jù)庫到只讀打開模式;6).啟動(dòng)Dataguard的實(shí)時(shí)日志應(yīng)用;4、配置虛擬IP模塊安裝和配置Keepalived,通過Keepalived實(shí)現(xiàn)三項(xiàng)功能■虛擬IP :前端應(yīng)用只要連接虛擬IP即可,而不用關(guān)心該IP究竟在哪個(gè)數(shù)據(jù)庫節(jié)點(diǎn);■心跳檢測判斷數(shù)據(jù)庫的主和從節(jié)點(diǎn)是否存活,當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)不可訪問時(shí),自動(dòng)將虛擬IP飄移至從節(jié)點(diǎn),并切換從節(jié)點(diǎn)的身份為主節(jié)點(diǎn)?!鰡?dòng)數(shù)據(jù)庫服務(wù)當(dāng)操作系統(tǒng)啟動(dòng)時(shí)調(diào)用keepalived,由keepalived調(diào)用角色控制模塊中的功能,啟動(dòng)數(shù)據(jù)庫服務(wù)。雖然ke印alived是最后配置,但實(shí)現(xiàn)上對于整個(gè)解決方案來說,卻是先調(diào)用keepalived,再由keepalived調(diào)用其它模塊。虛擬IP的配置和啟動(dòng)數(shù)據(jù)庫服務(wù)均是在keepalived軟件的配置文件haresource中進(jìn)行配置,注意上述兩項(xiàng)功能對應(yīng)的腳本程序應(yīng)該位于keepalived能夠訪問到的路徑下。本發(fā)明使ORACLE Dataguard故障切換(角色切換)環(huán)節(jié)避開了主/從兩節(jié)點(diǎn)數(shù)據(jù)庫層面的交互,并盡可能的減化了 DB層的操作,將切換的主要工序前置到OS層,提高了切換的響應(yīng)速度,同時(shí)降低了操作門檻,使得具有系統(tǒng)操作權(quán)限的普通操作人員,也可以通過調(diào)用角色控制模塊中的腳本,執(zhí)行數(shù)據(jù)庫主從身份的切換。通過與開源軟件DRBD+Keepalived的組合搭配,可以在不丟失數(shù)據(jù)(無論是角色切換switchover或者是故障切換failover)的前提下實(shí)現(xiàn)數(shù)據(jù)庫的主從切換,并能夠保障數(shù)據(jù)庫服務(wù)的高可用,無須前端應(yīng)用程序進(jìn)行同步修改,提供一種快速、可靠、易于實(shí)施和維護(hù)、故障快速恢復(fù)的數(shù)據(jù)庫服務(wù)高可性綜合解決方案。應(yīng)當(dāng)理解,以上借助本發(fā)明的優(yōu)選實(shí)施例對本發(fā)明的技術(shù)方案進(jìn)行了詳細(xì)說明。本領(lǐng)域的普通技術(shù)人員在閱讀本發(fā)明說明書的基礎(chǔ)上可以對實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方 案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的精神和范圍。本發(fā)明的保護(hù)范圍僅由隨附權(quán)利要求書限定。
權(quán)利要求
1.一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的實(shí)現(xiàn)方法,其特征在于,該方法包括 為各數(shù)據(jù)庫節(jié)點(diǎn)分配虛擬IP ; 對數(shù)據(jù)庫節(jié)點(diǎn)進(jìn)行心跳檢測,判斷數(shù)據(jù)庫主、從節(jié)點(diǎn)是否存活,當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)不可訪問時(shí),自動(dòng)將虛擬IP飄移至從節(jié)點(diǎn),并切換從節(jié)點(diǎn)的身份為主節(jié)點(diǎn)。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,該方法進(jìn)一步包括 當(dāng)啟動(dòng)數(shù)據(jù)庫節(jié)點(diǎn)服務(wù)器時(shí),檢查該節(jié)點(diǎn)的數(shù)據(jù)庫服務(wù)是否可用,若不可用,則啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn)。
3.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,在各數(shù)據(jù)庫節(jié)點(diǎn)中分別創(chuàng)建有兩塊DRBD共享盤,用于存儲(chǔ)各數(shù)據(jù)庫節(jié)點(diǎn)中的差異性數(shù)據(jù),通過DRBD內(nèi)置的C型完全同步協(xié)議保持主從節(jié)點(diǎn)的數(shù)據(jù)的一致性,所述兩塊DRBD共享盤分別定義為主共享盤和從共享盤,通過檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn),從而實(shí)現(xiàn)數(shù)據(jù)庫主從節(jié)點(diǎn)的切換或啟動(dòng)。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,通過檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn)包括 檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,若當(dāng)前節(jié)點(diǎn)的DRBD磁盤狀態(tài)中顯示另一節(jié)點(diǎn)的身份為從節(jié)點(diǎn),則啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn),若當(dāng)前節(jié)點(diǎn)的DRBD磁盤狀態(tài)中顯示另一節(jié)點(diǎn)的身份為主節(jié)點(diǎn),則啟動(dòng)當(dāng)前節(jié)點(diǎn)為從節(jié)點(diǎn)。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)包括以下步驟 檢查當(dāng)前節(jié)點(diǎn)是否啟動(dòng)了數(shù)據(jù)庫服務(wù),如已啟動(dòng)則首先關(guān)閉; 放棄從共享盤的主角色,將其改為從角色; 持有主共享盤的主角色; 映射DRBD共享盤至具有主角色的DRBD共享盤; 創(chuàng)建軟鏈接指向具有主角色的DRBD共享盤的數(shù)據(jù)文件目錄; 正常啟動(dòng)當(dāng)前節(jié)點(diǎn)數(shù)據(jù)庫。
6.根據(jù)權(quán)利要求4所述的方法,其特征在于,啟動(dòng)當(dāng)前節(jié)點(diǎn)為從節(jié)點(diǎn)包括以下步驟 檢查當(dāng)前節(jié)點(diǎn)是否啟動(dòng)了數(shù)據(jù)庫服務(wù),如已啟動(dòng)則首先關(guān)閉; 放棄主共享盤的主角色,將其改為從角色; 持有從共享盤的主角色; 映射DRBD共享盤至具有從角色的DRBD共享盤; 創(chuàng)建軟鏈接指向具有從角色的DRBD共享盤的數(shù)據(jù)文件目錄; 啟動(dòng)當(dāng)前節(jié)點(diǎn)數(shù)據(jù)庫到只讀打開模式; 啟動(dòng)Dataguard的實(shí)時(shí)日志應(yīng)用。
7.一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的系統(tǒng),其特征在于,該系統(tǒng)包括 Dataguard模塊,該模塊與DRBD之間組織搭配,在各數(shù)據(jù)庫節(jié)點(diǎn)中分別創(chuàng)建有兩塊DRBD共享盤,用于存儲(chǔ)各數(shù)據(jù)庫節(jié)點(diǎn)中的差異性數(shù)據(jù),所述兩塊DRBD共享盤分別定義為主共享盤和從共享盤; DRBD數(shù)據(jù)保護(hù)模塊,該模塊利用DRBD內(nèi)置的C型完全同步協(xié)議保持主從節(jié)點(diǎn)的數(shù)據(jù)的一致性; 角色控制模塊,該模塊通過檢測當(dāng)前節(jié)點(diǎn)的DRBD主共享盤的角色,啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn),從而實(shí)現(xiàn)數(shù)據(jù)庫主從節(jié)點(diǎn)的切換和啟動(dòng)。
8.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,該系統(tǒng)進(jìn)一步包括 虛擬IP模塊,該模塊為各數(shù)據(jù)庫節(jié)點(diǎn)分配虛擬IP ;對數(shù)據(jù)庫節(jié)點(diǎn)進(jìn)行心跳檢測,判斷數(shù)據(jù)庫主、從節(jié)點(diǎn)是否存活,當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)不可訪問時(shí),自動(dòng)將虛擬IP飄移至從節(jié)點(diǎn),并切換從節(jié)點(diǎn)的身份為主節(jié)點(diǎn);當(dāng)啟動(dòng)數(shù)據(jù)庫節(jié)點(diǎn)服務(wù)器時(shí),檢查該節(jié)點(diǎn)的數(shù)據(jù)庫服務(wù)是否可用,若不可用,則啟動(dòng)當(dāng)前節(jié)點(diǎn)為主節(jié)點(diǎn)或從節(jié)點(diǎn)。
9.根據(jù)權(quán)利要求7所述的系統(tǒng),其特征在于,所述差異性數(shù)據(jù)包括控制文件、聯(lián)機(jī)日志文件。
全文摘要
本發(fā)明涉及一種保持ORACLE數(shù)據(jù)庫服務(wù)高可用的方法。公開了一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的實(shí)現(xiàn)方法,該方法包括為各數(shù)據(jù)庫節(jié)點(diǎn)分配虛擬IP;對數(shù)據(jù)庫節(jié)點(diǎn)進(jìn)行心跳檢測,判斷數(shù)據(jù)庫主、從節(jié)點(diǎn)是否存活,當(dāng)發(fā)現(xiàn)主節(jié)點(diǎn)不可訪問時(shí),自動(dòng)將虛擬IP飄移至從節(jié)點(diǎn),并切換從節(jié)點(diǎn)的身份為主節(jié)點(diǎn)。本發(fā)明進(jìn)一步公開了一種保持Oracle數(shù)據(jù)庫服務(wù)高可用的系統(tǒng)。本發(fā)明特別適用于ORACLE數(shù)據(jù)庫的DATAGUARD特性,通過與開源軟件DRBD和Keepalived的組合搭配,無論在switchover(計(jì)劃內(nèi)切換,無損切換)或者是failover(計(jì)劃外切換,有損切換)時(shí),均可以在不丟失數(shù)據(jù)的前提下實(shí)現(xiàn)數(shù)據(jù)庫的主從切換,并保障數(shù)據(jù)庫服務(wù)的高可用。
文檔編號(hào)G06F17/30GK102810111SQ20121013920
公開日2012年12月5日 申請日期2012年5月7日 優(yōu)先權(quán)日2012年5月7日
發(fā)明者潘海東, 梅春, 李丙洋 申請人:互動(dòng)在線(北京)科技有限公司