本發(fā)明涉及云平臺基礎(chǔ)數(shù)據(jù)庫領(lǐng)域,具體涉及一種自動恢復(fù)掉電的MariaDB Galera Cluster的方法。
背景技術(shù):
數(shù)據(jù)庫是云平臺的基礎(chǔ)組件,如何保證數(shù)據(jù)庫的高可靠性是云平臺建設(shè)需重點(diǎn)專注的項(xiàng)目。為保證云平臺運(yùn)行的高效性,現(xiàn)如今普遍采用MariaDB Galera Cluster,MariaDB Galera Cluster是MariaDB數(shù)據(jù)庫的同步多主集群,但數(shù)據(jù)庫集群在全部掉電并再次上電后,數(shù)據(jù)庫集群的功能無法自動恢復(fù),需人工介入使數(shù)據(jù)庫集群恢復(fù),費(fèi)時(shí)費(fèi)力,且不符合現(xiàn)如今提倡的自動化社會的建設(shè)需求。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種自動恢復(fù)掉電的MariaDB Galera Cluster的方法,能夠快速恢復(fù)云平臺服務(wù)。
為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是,包括:
當(dāng)MariaDB Galera Cluster的節(jié)點(diǎn)掉電并上電后,上報(bào)所有節(jié)點(diǎn)的狀態(tài)ID至服務(wù)發(fā)現(xiàn)集群中;
遍歷節(jié)點(diǎn)的狀態(tài)ID,并判斷當(dāng)前狀態(tài)ID的值是否為所有節(jié)點(diǎn)狀態(tài)ID的值中最大,若是,則啟動當(dāng)前狀態(tài)ID對應(yīng)節(jié)點(diǎn)的服務(wù),若否,則跳過;
當(dāng)最大值的狀態(tài)ID對應(yīng)的節(jié)點(diǎn)服務(wù)啟動后,啟動所有其它節(jié)點(diǎn)的服務(wù)。
在上述技術(shù)方案的基礎(chǔ)上,狀態(tài)ID的值通過全局事務(wù)ID獲取。
在上述技術(shù)方案的基礎(chǔ)上,所述節(jié)點(diǎn)的狀態(tài)ID通過啟動腳本上報(bào)至服務(wù)發(fā)現(xiàn)集群中。
在上述技術(shù)方案的基礎(chǔ)上,待數(shù)據(jù)庫守護(hù)腳本確定所有節(jié)點(diǎn)的狀態(tài)ID均已上報(bào)至服務(wù)發(fā)現(xiàn)集群中后,開始依次遍歷節(jié)點(diǎn)的狀態(tài)ID。
在上述技術(shù)方案的基礎(chǔ)上,對于執(zhí)行非事務(wù)性操作時(shí)崩潰的MariaDB Galera Cluster:
所有節(jié)點(diǎn)的狀態(tài)ID上報(bào)至服務(wù)發(fā)現(xiàn)集群中后,依次遍歷節(jié)點(diǎn)的狀態(tài)ID,當(dāng)首次出現(xiàn)值為-1的狀態(tài)ID,則啟動該狀態(tài)ID對應(yīng)的節(jié)點(diǎn)的服務(wù),執(zhí)行數(shù)據(jù)庫恢復(fù)服務(wù),當(dāng)成功恢復(fù)一個(gè)節(jié)點(diǎn)后,啟動所有其它節(jié)點(diǎn)的服務(wù)。
在上述技術(shù)方案的基礎(chǔ)上,所述服務(wù)發(fā)現(xiàn)集群為Etcd服務(wù)發(fā)現(xiàn)集群。
與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:當(dāng)節(jié)點(diǎn)掉電并上電后,通過將節(jié)點(diǎn)的狀態(tài)ID的值上報(bào)至Etcd服務(wù)發(fā)現(xiàn)集群中,比對找到狀態(tài)ID的值最大的節(jié)點(diǎn),并啟動該節(jié)點(diǎn)的服務(wù),然后啟動所有其它節(jié)點(diǎn)的服務(wù),從而自動恢復(fù)MariaDB Galera Cluster,且整個(gè)過程無需人工干預(yù),便能快速恢復(fù)云平臺基礎(chǔ)數(shù)據(jù)庫服務(wù)。
附圖說明
圖1為本發(fā)明一種自動恢復(fù)掉電的MariaDB Galera Cluster的方法的流程圖。
具體實(shí)施方式
以下結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。
參見圖1所示,本發(fā)明提供一種自動恢復(fù)掉電的MariaDB Galera Cluster的方法,用于恢復(fù)掉電并再次上電的MariaDB Galera Cluster的服務(wù)。MariaDB Galera Cluster為一種多主讀寫的數(shù)據(jù)庫集群,MariaDB Galera Cluster是MariaDB數(shù)據(jù)庫的同步多主集群,MariaDB數(shù)據(jù)庫是MySQL的一個(gè)分支,MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。本發(fā)明包括以下步驟:
步驟S1:當(dāng)MariaDB Galera Cluster的節(jié)點(diǎn)掉電并上電后,通過啟動腳本上報(bào)所有節(jié)點(diǎn)的狀態(tài)ID至服務(wù)發(fā)現(xiàn)集群中,本實(shí)施例中服務(wù)發(fā)現(xiàn)集群為Etcd服務(wù)發(fā)現(xiàn)集群;
步驟S2:通過數(shù)據(jù)庫守護(hù)腳本確定所有節(jié)點(diǎn)的狀態(tài)ID均已上報(bào)至Etcd服務(wù)發(fā)現(xiàn)集群中后,遍歷節(jié)點(diǎn)的狀態(tài)ID,并判斷當(dāng)前狀態(tài)ID的值是否為所有節(jié)點(diǎn)狀態(tài)ID的值中最大,若是,則啟動當(dāng)前狀態(tài)ID對應(yīng)節(jié)點(diǎn)的服務(wù),若否,則跳過。狀態(tài)ID的值越大,表示該節(jié)點(diǎn)在數(shù)據(jù)庫中所存儲信息越全,因此最大狀態(tài)ID的值的節(jié)點(diǎn)必須首先啟動。Etcd服務(wù)發(fā)現(xiàn)集群為一種共享的鍵值存儲系統(tǒng),用于服務(wù)發(fā)現(xiàn)。
狀態(tài)ID的值的獲取是通過全局事務(wù)ID來實(shí)現(xiàn)的,可以在grastate.dat文件中找到相應(yīng)配置,例如某個(gè)狀態(tài)ID的grastate.dat文件的配置為:
#GALERA saved state
version:2.1
uuid:e8dc56f3-ce33-4df8-8b44-c692ac62cc9f
seqno:346578973
cert_index:
其中,seqno字段的值即為節(jié)點(diǎn)的狀態(tài)ID的值,即狀態(tài)ID的值為grastate.dat文件的配置中seqno字段的值,通過比較seqno字段的值即可判斷當(dāng)前狀態(tài)ID的值是否為所有節(jié)點(diǎn)狀態(tài)ID的值中最大。一般情況下,通過運(yùn)行mysqld--wsrep-recover選項(xiàng),便能夠從error log中找到全局事務(wù)ID。
步驟S3:當(dāng)最大值的狀態(tài)ID對應(yīng)的節(jié)點(diǎn)服務(wù)啟動后,啟動所有其它節(jié)點(diǎn)的服務(wù),此時(shí)MariaDB Galera Cluster的全部節(jié)點(diǎn)的服務(wù)啟動,從而恢復(fù)云平臺的服務(wù)。
對于執(zhí)行非事務(wù)性操作時(shí)崩潰的MariaDB Galera Cluster,例如在執(zhí)行ALTER TABLE時(shí),此時(shí),seqno字段的值可能為-1,因而,所有節(jié)點(diǎn)的狀態(tài)ID上報(bào)至Etcd服務(wù)發(fā)現(xiàn)集群中后,依次遍歷節(jié)點(diǎn)的狀態(tài)ID,當(dāng)首次出現(xiàn)值為-1的狀態(tài)ID,則啟動該狀態(tài)ID對應(yīng)的節(jié)點(diǎn)的服務(wù),執(zhí)行數(shù)據(jù)庫恢復(fù)服務(wù),當(dāng)成功恢復(fù)一個(gè)節(jié)點(diǎn)后,啟動所有其它節(jié)點(diǎn)的服務(wù),從而恢復(fù)云平臺的服務(wù)。
當(dāng)節(jié)點(diǎn)掉電并上電后,通過將節(jié)點(diǎn)的狀態(tài)ID的值上報(bào)至Etcd服務(wù)發(fā)現(xiàn)集群中,比對找到狀態(tài)ID的值最大的節(jié)點(diǎn),并啟動該節(jié)點(diǎn)的服務(wù),然后啟動所有其它節(jié)點(diǎn)的服務(wù),從而自動恢復(fù)MariaDB Galera Cluster,且整個(gè)過程無需人工干預(yù),便能快速恢復(fù)云平臺服務(wù)。
本發(fā)明不局限于上述實(shí)施方式,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤飾,這些改進(jìn)和潤飾也視為本發(fā)明的保護(hù)范圍之內(nèi)。本說明書中未作詳細(xì)描述的內(nèi)容屬于本領(lǐng)域?qū)I(yè)技術(shù)人員公知的現(xiàn)有技術(shù)。