一種基于Galera的控制節(jié)點(diǎn)主備切換的高可用方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及云計算領(lǐng)域,具體涉及一種基于Galera的控制節(jié)點(diǎn)主備切換的高可用方法及系統(tǒng)。
【背景技術(shù)】
[0002]在云計算數(shù)據(jù)中心中,通過控制節(jié)點(diǎn)管理計算節(jié)點(diǎn)、存儲集群狀態(tài)、配置數(shù)據(jù)、動態(tài)調(diào)度集群資源,控制節(jié)點(diǎn)是云計算中整個集群的核心。
[0003]當(dāng)控制節(jié)點(diǎn)出現(xiàn)宕機(jī)時,該控制節(jié)點(diǎn)對應(yīng)的集群會處于無中心節(jié)點(diǎn)管理的狀態(tài),使得該集群的部分功能無法正常使用;當(dāng)控制節(jié)點(diǎn)上的數(shù)據(jù)出現(xiàn)損壞時,與該節(jié)點(diǎn)對應(yīng)的集群的狀態(tài)及配置數(shù)據(jù)會丟失,甚至用戶的業(yè)務(wù)數(shù)據(jù)也會丟失,因此,控制節(jié)點(diǎn)影響著集群的正常工作。
[0004]目前,為了避免控制節(jié)點(diǎn)故障導(dǎo)致的集群難以正常工作,通常采用以下兩種方式:
[0005](1)使用至少兩個控制節(jié)點(diǎn)共同分擔(dān)集群的管理工作,每個控制節(jié)點(diǎn)上的工作負(fù)載平均分配,集群的數(shù)據(jù)在每個控制節(jié)點(diǎn)上都有冗余備份,當(dāng)任意一個控制節(jié)點(diǎn)宕機(jī)時,該控制節(jié)點(diǎn)上的工作負(fù)載會自動轉(zhuǎn)移至另一個控制節(jié)點(diǎn)上。
[0006](2)使用主備高可用技術(shù),S卩:包括當(dāng)前主控節(jié)點(diǎn)和備控節(jié)點(diǎn),當(dāng)前主控節(jié)點(diǎn)用于管理對應(yīng)的集群,備控節(jié)點(diǎn)用于備份當(dāng)前主控節(jié)點(diǎn)的數(shù)據(jù),還用于檢測主控節(jié)點(diǎn)是否發(fā)生故障,并用于檢測到主控節(jié)點(diǎn)發(fā)生故障時,管理當(dāng)前主控節(jié)點(diǎn)對應(yīng)的集群。
[0007]目前主備高可用技術(shù)一般采用MySQL(—個關(guān)系型數(shù)據(jù)庫管理系統(tǒng))異步復(fù)制將主控節(jié)點(diǎn)上的數(shù)據(jù)備份到備控節(jié)點(diǎn)上,同時備控節(jié)點(diǎn)監(jiān)聽主控節(jié)點(diǎn)的心跳,當(dāng)發(fā)現(xiàn)主控節(jié)點(diǎn)離線時,備控節(jié)點(diǎn)升級為主控節(jié)點(diǎn),并啟動MySQL和httpcKApache超文本傳輸協(xié)議HTTP服務(wù)器的主程序)等控制節(jié)點(diǎn)服務(wù),配置浮動IP,管理集群。
[0008]上述方法在使用時,存在以下缺陷:
[0009]使用MySQL進(jìn)行異步復(fù)制時,先將數(shù)據(jù)寫入主控節(jié)點(diǎn),再將數(shù)據(jù)復(fù)制到備控節(jié)點(diǎn),當(dāng)主控節(jié)點(diǎn)宕機(jī)時,會有一部分?jǐn)?shù)據(jù)已經(jīng)寫到主控節(jié)點(diǎn),但還沒來得及復(fù)制到備控節(jié)點(diǎn),此時備控節(jié)點(diǎn)升級為主控節(jié)點(diǎn),沒有復(fù)制到備控節(jié)點(diǎn)中的數(shù)據(jù)發(fā)生丟失,影響集群的正常工作。
【發(fā)明內(nèi)容】
[0010]針對現(xiàn)有技術(shù)中存在的缺陷,本發(fā)明的目的在于提供一種基于Galera的控制節(jié)點(diǎn)主備切換的高可用方法及系統(tǒng),能夠在主控節(jié)點(diǎn)與備控節(jié)點(diǎn)發(fā)生切換時,保證數(shù)據(jù)的完整性,保證集群的正常工作。
[0011 ]為達(dá)到以上目的,本發(fā)明采取的技術(shù)方案是:
[0012]—種基于Galera的控制節(jié)點(diǎn)主備切換的高可用系統(tǒng),包括主控節(jié)點(diǎn)和備控節(jié)點(diǎn),所述系統(tǒng)還包括主監(jiān)測發(fā)送模塊、備監(jiān)測發(fā)送模塊、主存儲模塊、備存儲模塊、主計時執(zhí)行模塊和備計時執(zhí)行模塊;所述主存儲模塊位于主控節(jié)點(diǎn)內(nèi),所述備存儲模塊位于備控節(jié)點(diǎn)內(nèi);所述主計時執(zhí)行模塊位于主控節(jié)點(diǎn)內(nèi),所述備計時執(zhí)行模塊位于備控節(jié)點(diǎn)內(nèi);
[0013]所述主監(jiān)測發(fā)送模塊監(jiān)測、發(fā)送主控節(jié)點(diǎn)的心跳信息,并接收備監(jiān)測發(fā)送模塊發(fā)送的心跳響應(yīng)信息;
[0014]所述備監(jiān)測發(fā)送模塊用于監(jiān)測備控節(jié)點(diǎn)的心跳信息,接收主監(jiān)測發(fā)送模塊發(fā)送的心跳信息,并將備控節(jié)點(diǎn)的心跳信息和主控節(jié)點(diǎn)的心跳信息作為心跳響應(yīng)信息發(fā)送至主監(jiān)測發(fā)送模塊;
[0015]所述主存儲模塊、備存儲模塊均用于接收并存儲集群信息;
[0016]所述主計時執(zhí)行模塊用于計算主監(jiān)測發(fā)送模塊最近一次接收到心跳響應(yīng)信息的時間與當(dāng)前時間的時間差,并在時間差大于30?60s時,ping仲裁IP,如果不能ping通仲裁IP,則將主控節(jié)點(diǎn)降級為備控節(jié)點(diǎn);
[0017]所述備計時執(zhí)行模塊用于計算備監(jiān)測發(fā)送模塊最近一次接收到心跳信息的時間與當(dāng)前時間的時間差,并在時間差大于30?60s時,ping仲裁IP,如果能ping通仲裁IP,則將備控節(jié)點(diǎn)升級為主控節(jié)點(diǎn)。
[0018]在上述技術(shù)方案的基礎(chǔ)上,所述高可用系統(tǒng)還包括用于主監(jiān)測發(fā)送模塊和備監(jiān)測發(fā)送模塊之間的心跳信息交互的管理模塊。
[0019]在上述技術(shù)方案的基礎(chǔ)上,所述主存儲模塊、備存儲模塊均為GaleraMySQL數(shù)據(jù)庫。
[0020]在上述技術(shù)方案的基礎(chǔ)上,所述主監(jiān)測發(fā)送模塊判斷主存儲模塊中的信息是否與備存儲模塊中的信息同步,并在未同步時重啟主控節(jié)點(diǎn)的Gal era My SQL數(shù)據(jù)庫,等待備控節(jié)點(diǎn)的Gal era My SQL數(shù)據(jù)庫連接至主控節(jié)點(diǎn)的Gal eraMy SQL數(shù)據(jù)庫。
[0021]在上述技術(shù)方案的基礎(chǔ)上,所述備監(jiān)測發(fā)送模塊判斷主存儲模塊中的信息是否與備存儲模塊中的信息同步,并在未同步時重啟備控節(jié)點(diǎn)的Gal era My SQL數(shù)據(jù)庫,使備控節(jié)點(diǎn)的Galera MySQL數(shù)據(jù)庫連接到主控節(jié)點(diǎn)的GaleraMySQL數(shù)據(jù)庫。
[0022]在上述技術(shù)方案的基礎(chǔ)上,所述高可用系統(tǒng)還包括數(shù)據(jù)同步模塊,所述數(shù)據(jù)同步模塊用于主存儲模塊和備存儲模塊之間的信息同步交互。
[0023]—種基于Galera的控制節(jié)點(diǎn)主備切換的高可用方法,包括以下步驟:
[0024]主控節(jié)點(diǎn)按預(yù)設(shè)頻率向備控節(jié)點(diǎn)發(fā)送心跳信息,備控節(jié)點(diǎn)接收到心跳信息后向主控節(jié)點(diǎn)發(fā)送心跳響應(yīng)信息;
[0025]備控節(jié)點(diǎn)判斷滿足以下條件:a、沒有接收到心跳信息的時間超過預(yù)設(shè)閾值,b、能ping通仲裁IP,則自動使備控節(jié)點(diǎn)提升為主控節(jié)點(diǎn);
[0026]主控節(jié)點(diǎn)判斷滿足以下條件:c、沒有接收到心跳響應(yīng)信息的時間超過預(yù)設(shè)閾值,b、不能p ing通仲裁IP,則自動使主控節(jié)點(diǎn)降級為備控節(jié)點(diǎn)。
[0027]在上述技術(shù)方案的基礎(chǔ)上,所述主控節(jié)點(diǎn)包括主存儲模塊,所述備控節(jié)點(diǎn)包括備存儲模塊,所述主存儲模塊、備存儲模塊均為Galera MySQL數(shù)據(jù)庫,兩GaleraMySQL數(shù)據(jù)庫中的信息強(qiáng)制實時同步。
[0028]在上述技術(shù)方案的基礎(chǔ)上,所述方法還包括以下步驟:
[0029]主監(jiān)測發(fā)送模塊判斷主存儲模塊中的信息與備存儲模塊中的信息異步,重啟主控節(jié)點(diǎn)的Gal era My SQL數(shù)據(jù)庫,等待備控節(jié)點(diǎn)的Gal eraMy SQL數(shù)據(jù)庫連接至主控節(jié)點(diǎn)的GaleraMySQL 數(shù)據(jù)庫。
[0030]在上述技術(shù)方案的基礎(chǔ)上,所述方法還包括以下步驟:
[0031]備監(jiān)測發(fā)送模塊判斷主存儲模塊中的信息與備存儲模塊中的信息異步,重啟備控節(jié)點(diǎn)的Gal eraMy SQL數(shù)據(jù)庫并連接到主控節(jié)點(diǎn)的Gal eraMy SQL數(shù)據(jù)庫。
[0032]與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
[0033](1)本發(fā)明中基于Galera的控制節(jié)點(diǎn)主備切換的高可用系統(tǒng),包括主存儲模塊和備存儲模塊,且主存儲模塊和備存儲模塊均為Galera MySQL數(shù)據(jù)庫,該數(shù)據(jù)庫具有數(shù)據(jù)強(qiáng)一致性,每次在主控節(jié)點(diǎn)上的寫操作一定是等數(shù)據(jù)復(fù)制到備控節(jié)點(diǎn)后才返回,保證發(fā)生主備控切換時,備存儲模塊上的所有數(shù)據(jù)均與主存儲模塊上的相同,避免數(shù)據(jù)丟失。
[0034](2)本發(fā)明中基于Galera的控制節(jié)點(diǎn)主備切換的高可用方法,包括以下步驟:主控節(jié)點(diǎn)按3?7s/次的頻率向備控節(jié)點(diǎn)發(fā)送心跳信息,備控節(jié)點(diǎn)判斷未接收到心跳信息的時間是否超過30?60s,并在超過30?60s時,自動使備控節(jié)點(diǎn)提升為主控節(jié)點(diǎn)。由于網(wǎng)絡(luò)間歇性少量丟包也會引起短時間故障,且該故障并不會影響集群的正常工作,若此時進(jìn)行主備切換,會導(dǎo)致主備切換過于頻繁,影響系統(tǒng)的穩(wěn)定性,本發(fā)明中在超時30?60s后才進(jìn)行操作,能夠避免頻繁的主備切換,使得系統(tǒng)比較穩(wěn)定。
[0035](3)本發(fā)明中基于Galera的控制節(jié)點(diǎn)主備切換的高可用方法,包括主監(jiān)測發(fā)送模塊判斷主存儲模塊中的信息與備存儲模塊中的信息異步,重啟主控節(jié)點(diǎn)的Galera MySQL數(shù)據(jù)庫,等待備控節(jié)點(diǎn)的GaleraMySQL數(shù)據(jù)庫連接至主控節(jié)點(diǎn)的Galera MySQL數(shù)據(jù)庫;備監(jiān)測發(fā)送模塊判斷主存儲模塊中的信息與備存儲模塊中的信息異步,重啟備控節(jié)點(diǎn)的GaleraMySQL數(shù)據(jù)庫并連接到主控節(jié)點(diǎn)的Galera MySQL數(shù)據(jù)庫。能夠?qū)崟r調(diào)整兩Galera MySQL數(shù)據(jù)庫的狀態(tài),避免兩GaleraMySQL數(shù)據(jù)庫因數(shù)據(jù)同步網(wǎng)絡(luò)斷開而鎖定。
【附圖說明】
[0036]圖1為本發(fā)明實施例中基于Galera的控制節(jié)點(diǎn)主備切換的高可用系統(tǒng)的結(jié)構(gòu)示意圖;
[0037]圖2為本發(fā)明實施例中基于Galera的控制節(jié)點(diǎn)主備切換的高可用方法的流程圖。
【具體實施方式】
[0038]以下結(jié)合附圖及實施例對本發(fā)明作進(jìn)一步詳細(xì)說明。
[0039]參見圖1所示,本發(fā)明實施例提供一種基于Galera的控制節(jié)點(diǎn)主備切換的高可用系統(tǒng),主控節(jié)點(diǎn)和備控節(jié)點(diǎn)同時運(yùn)行并共用一浮動IP地址和一仲裁IP地址。Galera是一個基于同步復(fù)制的多主MySQL集群。
[0040]該高可用系統(tǒng)包括主監(jiān)測發(fā)送模塊、備監(jiān)測發(fā)送模塊、主存儲模塊、備存儲模塊、主計時執(zhí)行模塊、備計時執(zhí)行模塊、管理模塊和數(shù)據(jù)同步模塊。
[0041]主監(jiān)測發(fā)送模塊用于監(jiān)測、發(fā)送主控節(jié)點(diǎn)的心跳信息,還用于接收備監(jiān)測發(fā)送模塊發(fā)送的心跳響應(yīng)信息;主監(jiān)測發(fā)送模塊還用于判斷主存儲模塊中的信息是否與備存儲模塊中的信息同步,并在未同步時重啟主控節(jié)點(diǎn)的Ga 1 e r a My SQL數(shù)據(jù)庫,等待備控節(jié)點(diǎn)的Galera MySQL數(shù)據(jù)庫連接。
[0042]備監(jiān)測發(fā)送模塊用于監(jiān)測備控節(jié)點(diǎn)的心跳信息,并在接收主監(jiān)測發(fā)送模塊發(fā)送的心跳信息后,將備控節(jié)點(diǎn)的心跳信息和主控節(jié)點(diǎn)的心跳信息作為心跳響應(yīng)信息發(fā)送至主監(jiān)測發(fā)送模塊;備監(jiān)測發(fā)送模塊還用于判斷備存儲模塊中的信息是否與主存儲模塊中的信息同步,并在未同步時重啟備控節(jié)點(diǎn)的Gal eraMy SQL數(shù)據(jù)庫,連接到主控節(jié)點(diǎn)的Ga 1 eraMy SQL數(shù)據(jù)庫。
[0043]主存儲模塊用于接收并存儲集群信息;備存儲模塊用于接收并存儲集群信息,且本發(fā)明實施例中,主存儲模塊、備存儲模塊均為Galera MySQL數(shù)據(jù)庫,該數(shù)據(jù)庫具有數(shù)據(jù)強(qiáng)一致性,每次在主控節(jié)點(diǎn)上的寫操作一定是等數(shù)據(jù)復(fù)制到備控節(jié)點(diǎn)后才返回,保證發(fā)生主備控切換時,備存儲模塊上的所有數(shù)據(jù)均與主存儲模塊上的相同,避免數(shù)據(jù)丟失。
[0044]主計時執(zhí)行模塊用于計算主監(jiān)測發(fā)送模塊最近一次接收到心跳響應(yīng)信息的時間與當(dāng)前時間的時間差,并在時間差大于30?60s時,ping(Ping是Windows、Unix和Linux系統(tǒng)下的一個命令。ping也屬于一個通信協(xié)議,是TCP/IP協(xié)議的一部分,利用“ping”命令可以檢查網(wǎng)絡(luò)是否連通)仲裁IP,如果不能ping通仲裁IP,則將主控節(jié)點(diǎn)降級為備控節(jié)點(diǎn)。
[0045]備計時執(zhí)行模塊用于計算備監(jiān)測發(fā)送模塊最近一次接收到心跳信息的時間與當(dāng)前時間的時間差,并在時間差大于30?60s時,ping仲裁IP,如果能ping通仲裁IP,則將備控節(jié)點(diǎn)升級為主控節(jié)點(diǎn)。
[0046]管理模塊用于主監(jiān)測發(fā)送模塊和備監(jiān)測發(fā)送模塊之間的心跳信息交互;數(shù)據(jù)同步模塊用于主存儲模塊和備存儲模塊之間的信息同步交互。
[0047]—種基于Galera的控制節(jié)點(diǎn)主備切換的高可用方法,包括以下步驟:
[0048]主控節(jié)點(diǎn)按預(yù)設(shè)頻率(本實施例中預(yù)設(shè)頻率為為3?7