一種提升云數(shù)據(jù)庫元數(shù)據(jù)節(jié)點可靠性的方法
【專利摘要】本發(fā)明涉及云數(shù)據(jù)庫【技術(shù)領(lǐng)域】,尤其是一種提升云數(shù)據(jù)庫元數(shù)據(jù)節(jié)點可靠性的方法。本發(fā)明將元數(shù)據(jù)同時寫入多個服務(wù)器;由于每次讀寫都施加在所有的服務(wù)器上,任何時刻都有不止一份數(shù)據(jù)被保存下來,任何時刻都有不止一臺服務(wù)器在運行,它們同時下線的可能性極小,所以可用性也無需采取額外措施,便可以得到保障;因為每臺元數(shù)據(jù)服務(wù)器都是平等的,所以任何一臺元數(shù)據(jù)服務(wù)器下線都不會對整個元數(shù)據(jù)服務(wù)器集群的可用性和可靠性產(chǎn)生影響。本發(fā)明解決了單點失效問題;可以用于云數(shù)據(jù)庫元數(shù)據(jù)的處理上。
【專利說明】一種提升云數(shù)據(jù)庫元數(shù)據(jù)節(jié)點可靠性的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及云數(shù)據(jù)庫【技術(shù)領(lǐng)域】,尤其是一種提升云數(shù)據(jù)庫元數(shù)據(jù)節(jié)點可靠性的方法。
【背景技術(shù)】
[0002]當前多個應(yīng)用系統(tǒng)信息資源整合共享的狀況是:各個應(yīng)用系統(tǒng)一般都設(shè)計和建設(shè)了屬于業(yè)務(wù)本身的應(yīng)用、流程以及獨立的數(shù)據(jù)信息處理系統(tǒng)。獨立、異構(gòu)是這些應(yīng)用系統(tǒng)的共同特點。由于系統(tǒng)設(shè)計和建設(shè)的時期不同,業(yè)務(wù)模式也各自不同,信息化建設(shè)缺乏有效的總體規(guī)劃,重復建設(shè)的現(xiàn)象屢有發(fā)生。缺乏統(tǒng)一的設(shè)計標準,大多數(shù)系統(tǒng)都是由不同的廠商建設(shè)在不同的平臺上,使用不同的語言進行開發(fā),信息共享及交互困難,缺乏統(tǒng)一的管理,存在大量的信息孤島和流程孤島。越來越多的用戶期望能實現(xiàn)多個軟硬件系統(tǒng)以及不同數(shù)據(jù)源之間的互操作,在信息之間建立關(guān)聯(lián),對異構(gòu)數(shù)據(jù)源中的數(shù)據(jù)進行訪問與集成。
[0003]云數(shù)據(jù)庫是對傳統(tǒng)數(shù)據(jù)庫精簡抽象化后的簡單可訪問模型,它能將分布在各地的信息資源進行有效采集、整合、共享和應(yīng)用,并建立信息資源共享服務(wù)和信息的統(tǒng)一管理。在具體實現(xiàn)過程中,云數(shù)據(jù)庫是把各種關(guān)系型數(shù)據(jù)庫進行虛擬化,按照訪問對象進行操作,對外提供SaaS服務(wù)的數(shù)據(jù)中心實現(xiàn)方式之一。云數(shù)據(jù)庫提供了一個虛擬數(shù)據(jù)交換視圖平臺,它屏蔽掉了各種異構(gòu)數(shù)據(jù)庫的底層實現(xiàn)細節(jié),用戶或應(yīng)用程序能透明地訪問,它能將用戶或系統(tǒng)程序傳入接口中的一致性對象進行分解,為不同數(shù)據(jù)源SQL適配器生成對應(yīng)的SQL語句,它主要解決數(shù)據(jù)集中與共享的問題。
[0004]云數(shù)據(jù)元數(shù)據(jù)服務(wù)節(jié)點提供的是系統(tǒng)服務(wù),主要實現(xiàn)對整個云數(shù)據(jù)庫系統(tǒng)全局的管理,包括系統(tǒng)管理服務(wù)、系統(tǒng)監(jiān)控服務(wù)、數(shù)據(jù)目錄服務(wù)、用戶日志服務(wù)以及系統(tǒng)界面服務(wù)。單元數(shù)據(jù)服務(wù)節(jié)點的設(shè)計可以簡化系統(tǒng)的設(shè)計和實現(xiàn),但會帶來單點失效問題。引入多個元數(shù)據(jù)節(jié)點后,節(jié)點之間需進行元數(shù)據(jù)的同步復制,當某個節(jié)點更新元數(shù)據(jù)后需使之后接入的客戶端在其它任意元數(shù)據(jù)服務(wù)器上也能訪問到最新的數(shù)據(jù)。
【發(fā)明內(nèi)容】
[0005]本發(fā)明解決的技術(shù)問題在于提供一種提升云數(shù)據(jù)庫元數(shù)據(jù)節(jié)點可靠性的方法,主要解決的是云數(shù)據(jù)庫引入多個元數(shù)據(jù)節(jié)點后,需要將節(jié)點之間的虛擬數(shù)據(jù)庫元信息、虛擬表元信息、虛擬數(shù)據(jù)庫與角色及用戶之間權(quán)歸屬映射信息、數(shù)據(jù)對象歸屬、大小、校驗值、節(jié)點編號等元信息進行同步。
[0006]本發(fā)明解決上述技術(shù)問題的技術(shù)方案是:
[0007]所述的方法是將云數(shù)據(jù)庫元數(shù)據(jù)全量存儲到N (N >= I)臺服務(wù)器節(jié)點,每臺元數(shù)據(jù)服務(wù)器的數(shù)據(jù)完全相同;選擇其中一個元數(shù)據(jù)服務(wù)器作為主節(jié)點,其他的N-1臺元數(shù)據(jù)服務(wù)器作為從節(jié)點;每個從節(jié)點對主節(jié)點進行監(jiān)聽,實現(xiàn)數(shù)據(jù)的更新操作;客戶端可以連接到每一個元數(shù)據(jù)服務(wù)器節(jié)點,客戶端連接到每一個元數(shù)據(jù)服務(wù)器節(jié)點后看到的數(shù)據(jù)是相同的;當主節(jié)點發(fā)生故障時,當前主節(jié)點對應(yīng)的服務(wù)器自動從隊列中刪除,從節(jié)點監(jiān)聽到主節(jié)點故障信息后,選擇元數(shù)據(jù)服務(wù)器編碼值最小的節(jié)點作為主節(jié)點;
[0008]元數(shù)據(jù)的更新基于元數(shù)據(jù)主服務(wù)器在二進制日志中跟蹤所有對數(shù)據(jù)的更新、刪除等更改,元數(shù)據(jù)主服務(wù)器將更新寫入二進制日志文件,并維護文件的一個索引以跟蹤日志循環(huán);這些日志可以記錄發(fā)送到元數(shù)據(jù)從服務(wù)器的更新,當一個元數(shù)據(jù)從服務(wù)器連接元數(shù)據(jù)主服務(wù)器時,它通知元數(shù)據(jù)從服務(wù)器在日志中讀取的最后一次成功更新的位置;元數(shù)據(jù)從服務(wù)器接收從那時起發(fā)生的任何更新,然后封鎖并等待元數(shù)據(jù)主服務(wù)器通知新的更新;元數(shù)據(jù)從服務(wù)器上面啟動一個I/O進程,連接到主服務(wù)器上面請求讀取二進制日志,然后把讀取到的二進制日志寫到本地日志里面,從服務(wù)器上面開啟一個SQL進程定時檢查本地日志,如果發(fā)現(xiàn)有更改立即把更改的內(nèi)容在元數(shù)據(jù)從服務(wù)器上面執(zhí)行一遍;
[0009]引入時間戳規(guī)則,時間戳用來處理元數(shù)據(jù)的先后覆蓋,對于一個數(shù)據(jù)對象的元數(shù)據(jù),只有時間最近的那條是有效的;當主元數(shù)據(jù)服務(wù)器更新元數(shù)據(jù)時,給每一次元數(shù)據(jù)更新加上一個時間戳,并且確保一次元數(shù)據(jù)寫入的各個元數(shù)據(jù)從服務(wù)器擁有相同的時間戳,同時確保歷次寫入的元數(shù)據(jù)擁有不同的時間戳;對于歷次更新的元數(shù)據(jù),元數(shù)據(jù)從服務(wù)器將讀取到的元數(shù)據(jù)放在一起比對,時間戳上最近的那些元數(shù)據(jù),就是所需要的。
[0010]云數(shù)據(jù)庫元數(shù)據(jù)主節(jié)點的選擇方法是:
[0011]當元數(shù)據(jù)主服務(wù)器崩潰,或者元數(shù)據(jù)主服務(wù)器失去大多數(shù)元數(shù)據(jù)從服務(wù)器時,進入恢復模式重新選舉一個新的元數(shù)據(jù)主服務(wù)器,讓所有的元數(shù)據(jù)服務(wù)器都恢復到一個正確的狀況;具體步驟如下:
[0012]第一步,元數(shù)據(jù)主服務(wù)器構(gòu)建一個文件系統(tǒng)樹結(jié)構(gòu),每個元數(shù)據(jù)服務(wù)器有一個唯一的路徑標識,這個路徑標識可以自動編號,并且每臺元數(shù)據(jù)服務(wù)器IP地址值作為子目錄放在此路徑下;元數(shù)據(jù)主服務(wù)器一旦啟動便對此路徑進行監(jiān)視;當元數(shù)據(jù)主服務(wù)器下數(shù)據(jù)發(fā)生變化的時候,每個元數(shù)據(jù)從服務(wù)器都會收到通知;
[0013]第二步,元數(shù)據(jù)從服務(wù)器與元數(shù)據(jù)主服務(wù)器通信采用長連接方式,每個元數(shù)據(jù)從服務(wù)器與元數(shù)據(jù)主服務(wù)器通過心跳來保持連接,這個連接狀態(tài)稱為sess1n,一旦這個連接斷掉或失效,每臺元數(shù)據(jù)服務(wù)器的路徑標識子目錄將自動刪除;
[0014]第三步,元數(shù)據(jù)從服務(wù)器和元數(shù)據(jù)主服務(wù)器連接斷掉或者sess1n過期就會使元數(shù)據(jù)主服務(wù)器上的文件系統(tǒng)中記錄的節(jié)點路徑信息消失,那么在某一個元數(shù)據(jù)服務(wù)器掛掉或者斷鏈的時候,其對應(yīng)的節(jié)點路徑信息就會消失;然后集群中所有對元數(shù)據(jù)主服務(wù)器進行監(jiān)視的客戶端都會收到通知,然后取得最新列表;
[0015]第四步,默認規(guī)定IP地址值最小的為元數(shù)據(jù)主服務(wù)器,所以當我們對節(jié)點路徑信息做監(jiān)控的時候,得到服務(wù)器列表,只要所有元數(shù)據(jù)服務(wù)器邏輯認可當前最小地址值,那么當前地址值對應(yīng)的元數(shù)據(jù)服務(wù)器就被選出作為元數(shù)據(jù)主服務(wù)器;而這個元數(shù)據(jù)主服務(wù)器宕機的時候,相應(yīng)的節(jié)點路徑信息會消失,然后新的服務(wù)器列表就被推送到客戶端,然后每個節(jié)點邏輯認為地址值最小的節(jié)點為元數(shù)據(jù)主服務(wù)器,這樣就實現(xiàn)動態(tài)元數(shù)據(jù)主服務(wù)器選舉。
[0016]所述的方法中元數(shù)據(jù)的更新方法是:
[0017]第一步,元數(shù)據(jù)主服務(wù)器驗證連接,并給元數(shù)據(jù)從服務(wù)器開啟一個線程;
[0018]第二步,元數(shù)據(jù)從服務(wù)器將元數(shù)據(jù)主服務(wù)器日志的偏移值告訴元數(shù)據(jù)主服務(wù)器,元數(shù)據(jù)主服務(wù)器檢查該值是否小于當前二進制日志偏移位;如果小于,則通知元數(shù)據(jù)從服務(wù)器來取數(shù)據(jù);
[0019]第三步,元數(shù)據(jù)從服務(wù)器持續(xù)從元數(shù)據(jù)主服務(wù)器取數(shù)據(jù),直至取完;這時元數(shù)據(jù)從服務(wù)器線程進入睡眠,元數(shù)據(jù)主服務(wù)器線程同時也進入睡眠;
[0020]第四步,當元數(shù)據(jù)主服務(wù)器有更新時,元數(shù)據(jù)主服務(wù)器線程被激活,并將二進制日志推送給元數(shù)據(jù)從服務(wù)器,并通知元數(shù)據(jù)從服務(wù)器線程進入工作狀態(tài),元數(shù)據(jù)從服務(wù)器SQL線程執(zhí)行二進制日志,隨后進入睡眠狀況。
[0021]所述的方法中保持元數(shù)據(jù)一致性的方法是:
[0022]第一步,啟動進程,當達到數(shù)據(jù)復制點的條件即啟動,元數(shù)據(jù)從服務(wù)器向元數(shù)據(jù)主服務(wù)器發(fā)出包含復制元數(shù)據(jù)表名稱、本地元數(shù)據(jù)別名、全復制標志、允許表結(jié)構(gòu)改變標志、首次復制時間、復制數(shù)據(jù)起始時間戳等信息的復制訂閱授權(quán)請求消息;
[0023]第二步,請求消息經(jīng)元數(shù)據(jù)主服務(wù)器端訂閱授權(quán)認可程序確認后,元數(shù)據(jù)主服務(wù)器將向訂閱申請方回復認可的消息;
[0024]第三步,如驗證通過,此進程將符合的所有記錄推送給元數(shù)據(jù)從服務(wù)器,即元數(shù)據(jù)主服務(wù)器復制主表中時間戳值大于前一次復制數(shù)據(jù)時的最大時間戳值的數(shù)據(jù)推送給元數(shù)據(jù)從服務(wù)器。
[0025]本發(fā)明通過將元數(shù)據(jù)同步分布到N(N >= I)臺服務(wù)器上,并對元數(shù)據(jù)服務(wù)器地址按照長整形進行值轉(zhuǎn)換,對該值按大小排序后,作為元數(shù)據(jù)主節(jié)點選擇方法。為了確保N臺服務(wù)器上元數(shù)據(jù)的實時更新,對元數(shù)據(jù)主服務(wù)器上的元數(shù)據(jù)更新建立索引進行跟蹤,并實時更新到元數(shù)據(jù)從服務(wù)器。為了避免元數(shù)據(jù)的不一致性,引入了時間戳的方式確保歷次更新的元數(shù)據(jù)的一致性。
[0026]使用本發(fā)明的方法,用戶可以可靠地在分布式網(wǎng)絡(luò)環(huán)境中透明的通過元數(shù)據(jù)訪問多種數(shù)據(jù)庫,元數(shù)據(jù)主服務(wù)器出現(xiàn)問題時,元數(shù)據(jù)從服務(wù)器可以實時自動切換,能確保用戶訪問數(shù)據(jù)庫的不間斷,并能實現(xiàn)元數(shù)據(jù)的實時一致性更新。
【專利附圖】
【附圖說明】
[0027]下面結(jié)合附圖對本發(fā)明進一步說明:
[0028]圖1是本發(fā)明的云數(shù)據(jù)庫元數(shù)據(jù)主節(jié)點的選擇方法圖。
【具體實施方式】
[0029]本發(fā)明的總體思路是:單點會造成數(shù)據(jù)丟失,并引發(fā)可用性問題,因而需要將元數(shù)據(jù)同時寫入多個服務(wù)器。由于每次讀寫都施加在所有的服務(wù)器上,任何時刻都有不止一份數(shù)據(jù)被保存下來,任何時刻都有不止一臺服務(wù)器在運行,它們同時下線的可能性極小,所以可用性也無需采取額外措施,便可以得到保障。因為每臺元數(shù)據(jù)服務(wù)器都是平等的,所以任何一臺元數(shù)據(jù)服務(wù)器下線都不會對整個元數(shù)據(jù)服務(wù)器集群的可用性和可靠性產(chǎn)生影響。
[0030]具體而言,是將云數(shù)據(jù)庫元數(shù)據(jù)全量存儲到N(N >= I)臺服務(wù)器節(jié)點,每臺元數(shù)據(jù)服務(wù)器的數(shù)據(jù)完全相同;選擇其中一個元數(shù)據(jù)服務(wù)器作為主節(jié)點,其他的N-1臺元數(shù)據(jù)服務(wù)器作為從節(jié)點;每個從節(jié)點對主節(jié)點進行監(jiān)聽,實現(xiàn)數(shù)據(jù)的更新操作;客戶端可以連接到每一個元數(shù)據(jù)服務(wù)器節(jié)點,客戶端連接到每一個元數(shù)據(jù)服務(wù)器節(jié)點后看到的數(shù)據(jù)是相同的;當主節(jié)點發(fā)生故障時,當前主節(jié)點對應(yīng)的服務(wù)器自動從隊列中刪除,從節(jié)點監(jiān)聽到主節(jié)點故障信息后,選擇元數(shù)據(jù)服務(wù)器編碼值最小的節(jié)點作為主節(jié)點;
[0031]元數(shù)據(jù)的更新基于元數(shù)據(jù)主服務(wù)器在二進制日志中跟蹤所有對數(shù)據(jù)的更新、刪除等更改,元數(shù)據(jù)主服務(wù)器將更新寫入二進制日志文件,并維護文件的一個索引以跟蹤日志循環(huán);這些日志可以記錄發(fā)送到元數(shù)據(jù)從服務(wù)器的更新,當一個元數(shù)據(jù)從服務(wù)器連接元數(shù)據(jù)主服務(wù)器時,它通知元數(shù)據(jù)從服務(wù)器在日志中讀取的最后一次成功更新的位置;元數(shù)據(jù)從服務(wù)器接收從那時起發(fā)生的任何更新,然后封鎖并等待元數(shù)據(jù)主服務(wù)器通知新的更新;元數(shù)據(jù)從服務(wù)器上面啟動一個I/O進程,連接到主服務(wù)器上面請求讀取二進制日志,然后把讀取到的二進制日志寫到本地日志里面,從服務(wù)器上面開啟一個SQL進程定時檢查本地日志,如果發(fā)現(xiàn)有更改立即把更改的內(nèi)容在元數(shù)據(jù)從服務(wù)器上面執(zhí)行一遍;
[0032]引入時間戳規(guī)則,時間戳用來處理元數(shù)據(jù)的先后覆蓋,對于一個數(shù)據(jù)對象的元數(shù)據(jù),只有時間最近的那條是有效的;當主元數(shù)據(jù)服務(wù)器更新元數(shù)據(jù)時,給每一次元數(shù)據(jù)更新加上一個時間戳,并且確保一次元數(shù)據(jù)寫入的各個元數(shù)據(jù)從服務(wù)器擁有相同的時間戳,同時確保歷次寫入的元數(shù)據(jù)擁有不同的時間戳;對于歷次更新的元數(shù)據(jù),元數(shù)據(jù)從服務(wù)器將讀取到的元數(shù)據(jù)放在一起比對,時間戳上最近的那些元數(shù)據(jù),就是所需要的。
[0033]下面從三個方面對本發(fā)明進一步說明:
[0034]1、云數(shù)據(jù)庫元數(shù)據(jù)主節(jié)點的選擇方法
[0035]當元數(shù)據(jù)主服務(wù)器崩潰,或者元數(shù)據(jù)主服務(wù)器失去大多數(shù)元數(shù)據(jù)從服務(wù)器,這時就進入恢復模式重新選舉一個新的元數(shù)據(jù)主服務(wù)器,讓所有的元數(shù)據(jù)服務(wù)器都恢復到一個正確的狀況。云數(shù)據(jù)庫元數(shù)據(jù)主節(jié)點的選擇方法如圖1所示。
[0036]第一步,元數(shù)據(jù)主服務(wù)器構(gòu)建一個文件系統(tǒng)樹結(jié)構(gòu),每個元數(shù)據(jù)服務(wù)器有一個唯一的路徑標識,這個路徑標識可以自動編號,并且每臺元數(shù)據(jù)服務(wù)器IP地址值作為子目錄放在此路徑下。元數(shù)據(jù)主服務(wù)器一旦啟動便對此路徑進行監(jiān)視。當元數(shù)據(jù)主服務(wù)器下數(shù)據(jù)發(fā)生變化的時候,每個元數(shù)據(jù)從服務(wù)器都會收到通知。
[0037]第二步,元數(shù)據(jù)從服務(wù)器與元數(shù)據(jù)主服務(wù)器通信采用長連接方式,每個元數(shù)據(jù)從服務(wù)器與元數(shù)據(jù)主服務(wù)器通過心跳來保持連接,這個連接狀態(tài)稱為sess1n,一旦這個連接斷掉或失效,每臺元數(shù)據(jù)服務(wù)器的路徑標識子目錄將自動刪除。
[0038]第三步,元數(shù)據(jù)從服務(wù)器和元數(shù)據(jù)主服務(wù)器連接斷掉或者sess1n過期就會使元數(shù)據(jù)主服務(wù)器上的文件系統(tǒng)中記錄的節(jié)點路徑信息消失,那么在某一個元數(shù)據(jù)服務(wù)器掛掉或者斷鏈的時候,其對應(yīng)的節(jié)點路徑信息就會消失,然后集群中所有對元數(shù)據(jù)主服務(wù)器進行監(jiān)視的客戶端都會收到通知,然后取得最新列表。
[0039]第四步,默認規(guī)定IP地址值最小的為元數(shù)據(jù)主服務(wù)器,所以當我們對節(jié)點路徑信息做監(jiān)控的時候,得到服務(wù)器列表,只要所有元數(shù)據(jù)服務(wù)器邏輯認可當前最小地址值,那么當前地址值對應(yīng)的元數(shù)據(jù)服務(wù)器就被選出作為元數(shù)據(jù)主服務(wù)器,而這個元數(shù)據(jù)主服務(wù)器宕機的時候,相應(yīng)的節(jié)點路徑信息會消失,然后新的服務(wù)器列表就被推送到客戶端,然后每個節(jié)點邏輯認為地址值最小的節(jié)點為元數(shù)據(jù)主服務(wù)器,這樣就做到動態(tài)元數(shù)據(jù)主服務(wù)器選舉。
[0040]2、元數(shù)據(jù)的更新方法
[0041]第一步,元數(shù)據(jù)主服務(wù)器驗證連接,并給元數(shù)據(jù)從服務(wù)器開啟一個線程。
[0042]第二步,元數(shù)據(jù)從服務(wù)器將元數(shù)據(jù)主服務(wù)器日志的偏移值告訴元數(shù)據(jù)主服務(wù)器,元數(shù)據(jù)主服務(wù)器檢查該值是否小于當前二進制日志偏移位,如果小于,則通知元數(shù)據(jù)從服務(wù)器來取數(shù)據(jù)。
[0043]第三步,元數(shù)據(jù)從服務(wù)器持續(xù)從元數(shù)據(jù)主服務(wù)器取數(shù)據(jù),直至取完,這時元數(shù)據(jù)從服務(wù)器線程進入睡眠,元數(shù)據(jù)主服務(wù)器線程同時也進入睡眠。
[0044]第四步,當元數(shù)據(jù)主服務(wù)器有更新時,元數(shù)據(jù)主服務(wù)器線程被激活,并將二進制日志推送給元數(shù)據(jù)從服務(wù)器,并通知元數(shù)據(jù)從服務(wù)器線程進入工作狀態(tài),元數(shù)據(jù)從服務(wù)器SQL線程執(zhí)行二進制日志,隨后進入睡眠狀況。
[0045]3、元數(shù)據(jù)一致性方法
[0046]第一步,啟動進程,只有當達到數(shù)據(jù)復制點的條件即啟動,元數(shù)據(jù)從服務(wù)器向元數(shù)據(jù)主服務(wù)器發(fā)出包含復制元數(shù)據(jù)表名稱、本地元數(shù)據(jù)別名、全復制標志、允許表結(jié)構(gòu)改變標志、首次復制時間、復制數(shù)據(jù)起始時間戳等等信息的復制訂閱授權(quán)請求消息;
[0047]第二步,請求消息經(jīng)元數(shù)據(jù)主服務(wù)器端訂閱授權(quán)認可程序確認后,元數(shù)據(jù)主服務(wù)器將向訂閱申請方回復認可的消息;
[0048]第三步,如驗證通過,此進程將符合的所有記錄推送給元數(shù)據(jù)從服務(wù)器,即元數(shù)據(jù)主服務(wù)器復制主表中時間戳值大于前一次復制數(shù)據(jù)時的最大時間戳值的數(shù)據(jù)推送給元數(shù)據(jù)從服務(wù)器。所以應(yīng)該根據(jù)關(guān)鍵值的次序依次對元數(shù)據(jù)從服務(wù)器表中的數(shù)據(jù)進行更改,并且在更新完成的同時,將此次元數(shù)據(jù)主服務(wù)器復制主表中的時間戳值記錄到元數(shù)據(jù)從服務(wù)器的相關(guān)信息表中去。
【權(quán)利要求】
1.一種提升云數(shù)據(jù)庫元數(shù)據(jù)節(jié)點可靠性的方法,其特征在于:所述的方法是將云數(shù)據(jù)庫元數(shù)據(jù)全量存儲到~^?二 1)臺服務(wù)器節(jié)點,每臺元數(shù)據(jù)服務(wù)器的數(shù)據(jù)完全相同;選擇其中一個元數(shù)據(jù)服務(wù)器作為主節(jié)點,其他的化1臺元數(shù)據(jù)服務(wù)器作為從節(jié)點;每個從節(jié)點對主節(jié)點進行監(jiān)聽,實現(xiàn)數(shù)據(jù)的更新操作;客戶端可以連接到每一個元數(shù)據(jù)服務(wù)器節(jié)點,客戶端連接到每一個元數(shù)據(jù)服務(wù)器節(jié)點后看到的數(shù)據(jù)是相同的;當主節(jié)點發(fā)生故障時,當前主節(jié)點對應(yīng)的服務(wù)器自動從隊列中刪除,從節(jié)點監(jiān)聽到主節(jié)點故障信息后,選擇元數(shù)據(jù)服務(wù)器編碼值最小的節(jié)點作為主節(jié)點; 元數(shù)據(jù)的更新基于元數(shù)據(jù)主服務(wù)器在二進制日志中跟蹤所有對數(shù)據(jù)的更新、刪除等更改,元數(shù)據(jù)主服務(wù)器將更新寫入二進制日志文件,并維護文件的一個索引以跟蹤日志循環(huán);這些日志可以記錄發(fā)送到元數(shù)據(jù)從服務(wù)器的更新,當一個元數(shù)據(jù)從服務(wù)器連接元數(shù)據(jù)主服務(wù)器時,它通知元數(shù)據(jù)從服務(wù)器在日志中讀取的最后一次成功更新的位置;元數(shù)據(jù)從服務(wù)器接收從那時起發(fā)生的任何更新,然后封鎖并等待元數(shù)據(jù)主服務(wù)器通知新的更新;元數(shù)據(jù)從服務(wù)器上面啟動一個1/0進程,連接到主服務(wù)器上面請求讀取二進制日志,然后把讀取到的二進制日志寫到本地日志里面,從服務(wù)器上面開啟一個3嘰進程定時檢查本地日志,如果發(fā)現(xiàn)有更改立即把更改的內(nèi)容在元數(shù)據(jù)從服務(wù)器上面執(zhí)行一遍; 引入時間戳規(guī)則,時間戳用來處理元數(shù)據(jù)的先后覆蓋,對于一個數(shù)據(jù)對象的元數(shù)據(jù),只有時間最近的那條是有效的;當主元數(shù)據(jù)服務(wù)器更新元數(shù)據(jù)時,給每一次元數(shù)據(jù)更新加上一個時間戳,并且確保一次元數(shù)據(jù)寫入的各個元數(shù)據(jù)從服務(wù)器擁有相同的時間戳,同時確保歷次寫入的元數(shù)據(jù)擁有不同的時間戳;對于歷次更新的元數(shù)據(jù),元數(shù)據(jù)從服務(wù)器將讀取到的元數(shù)據(jù)放在一起比對,時間戳上最近的那些元數(shù)據(jù),就是所需要的。
2.根據(jù)權(quán)利要求1所述的提升云數(shù)據(jù)庫元數(shù)據(jù)節(jié)點可靠性的方法,其特征在于:云數(shù)據(jù)庫元數(shù)據(jù)主節(jié)點的選擇方法是: 當元數(shù)據(jù)主服務(wù)器崩潰,或者元數(shù)據(jù)主服務(wù)器失去大多數(shù)元數(shù)據(jù)從服務(wù)器時,進入恢復模式重新選舉一個新的元數(shù)據(jù)主服務(wù)器,讓所有的元數(shù)據(jù)服務(wù)器都恢復到一個正確的狀況;具體步驟如下: 第一步,元數(shù)據(jù)主服務(wù)器構(gòu)建一個文件系統(tǒng)樹結(jié)構(gòu),每個元數(shù)據(jù)服務(wù)器有一個唯一的路徑標識,這個路徑標識可以自動編號,并且每臺元數(shù)據(jù)服務(wù)器I?地址值作為子目錄放在此路徑下;元數(shù)據(jù)主服務(wù)器一旦啟動便對此路徑進行監(jiān)視;當元數(shù)據(jù)主服務(wù)器下數(shù)據(jù)發(fā)生變化的時候,每個元數(shù)據(jù)從服務(wù)器都會收到通知; 第二步,元數(shù)據(jù)從服務(wù)器與元數(shù)據(jù)主服務(wù)器通信采用長連接方式,每個元數(shù)據(jù)從服務(wù)器與元數(shù)據(jù)主服務(wù)器通過心跳來保持連接,這個連接狀態(tài)稱為86881011,一旦這個連接斷掉或失效,每臺元數(shù)據(jù)服務(wù)器的路徑標識子目錄將自動刪除; 第三步,元數(shù)據(jù)從服務(wù)器和元數(shù)據(jù)主服務(wù)器連接斷掉或者86881011過期就會使元數(shù)據(jù)主服務(wù)器上的文件系統(tǒng)中記錄的節(jié)點路徑信息消失,那么在某一個元數(shù)據(jù)服務(wù)器掛掉或者斷鏈的時候,其對應(yīng)的節(jié)點路徑信息就會消失;然后集群中所有對元數(shù)據(jù)主服務(wù)器進行監(jiān)視的客戶端都會收到通知,然后取得最新列表; 第四步,默認規(guī)定I?地址值最小的為元數(shù)據(jù)主服務(wù)器,所以當我們對節(jié)點路徑信息做監(jiān)控的時候,得到服務(wù)器列表,只要所有元數(shù)據(jù)服務(wù)器邏輯認可當前最小地址值,那么當前地址值對應(yīng)的元數(shù)據(jù)服務(wù)器就被選出作為元數(shù)據(jù)主服務(wù)器;而這個元數(shù)據(jù)主服務(wù)器宕機的時候,相應(yīng)的節(jié)點路徑信息會消失,然后新的服務(wù)器列表就被推送到客戶端,然后每個節(jié)點邏輯認為地址值最小的節(jié)點為元數(shù)據(jù)主服務(wù)器,這樣就實現(xiàn)動態(tài)元數(shù)據(jù)主服務(wù)器選舉。
3.根據(jù)權(quán)利要求1所述的提升云數(shù)據(jù)庫元數(shù)據(jù)節(jié)點可靠性的方法,其特征在于:所述的方法中元數(shù)據(jù)的更新方法是: 第一步,元數(shù)據(jù)主服務(wù)器驗證連接,并給元數(shù)據(jù)從服務(wù)器開啟一個線程; 第二步,元數(shù)據(jù)從服務(wù)器將元數(shù)據(jù)主服務(wù)器日志的偏移值告訴元數(shù)據(jù)主服務(wù)器,元數(shù)據(jù)主服務(wù)器檢查該值是否小于當前二進制日志偏移位;如果小于,則通知元數(shù)據(jù)從服務(wù)器來取數(shù)據(jù); 第三步,元數(shù)據(jù)從服務(wù)器持續(xù)從元數(shù)據(jù)主服務(wù)器取數(shù)據(jù),直至取完;這時元數(shù)據(jù)從服務(wù)器線程進入睡眠,元數(shù)據(jù)主服務(wù)器線程同時也進入睡眠; 第四步,當元數(shù)據(jù)主服務(wù)器有更新時,元數(shù)據(jù)主服務(wù)器線程被激活,并將二進制日志推送給元數(shù)據(jù)從服務(wù)器,并通知元數(shù)據(jù)從服務(wù)器線程進入工作狀態(tài),元數(shù)據(jù)從服務(wù)器301線程執(zhí)行二進制日志,隨后進入睡眠狀況。
4.根據(jù)權(quán)利要求2所述的提升云數(shù)據(jù)庫元數(shù)據(jù)節(jié)點可靠性的方法,其特征在于:所述的方法中元數(shù)據(jù)的更新方法是: 第一步,元數(shù)據(jù)主服務(wù)器驗證連接,并給元數(shù)據(jù)從服務(wù)器開啟一個線程; 第二步,元數(shù)據(jù)從服務(wù)器將元數(shù)據(jù)主服務(wù)器日志的偏移值告訴元數(shù)據(jù)主服務(wù)器,元數(shù)據(jù)主服務(wù)器檢查該值是否小于當前二進制日志偏移位;如果小于,則通知元數(shù)據(jù)從服務(wù)器來取數(shù)據(jù); 第三步,元數(shù)據(jù)從服務(wù)器持續(xù)從元數(shù)據(jù)主服務(wù)器取數(shù)據(jù),直至取完;這時元數(shù)據(jù)從服務(wù)器線程進入睡眠,元數(shù)據(jù)主服務(wù)器線程同時也進入睡眠; 第四步,當元數(shù)據(jù)主服務(wù)器有更新時,元數(shù)據(jù)主服務(wù)器線程被激活,并將二進制日志推送給元數(shù)據(jù)從服務(wù)器,并通知元數(shù)據(jù)從服務(wù)器線程進入工作狀態(tài),元數(shù)據(jù)從服務(wù)器301線程執(zhí)行二進制日志,隨后進入睡眠狀況。
5.根據(jù)權(quán)利要求1至4任一項所述的提升云數(shù)據(jù)庫元數(shù)據(jù)節(jié)點可靠性的方法,其特征在于:所述的方法中保持元數(shù)據(jù)一致性的方法是: 第一步,啟動進程,當達到數(shù)據(jù)復制點的條件即啟動,元數(shù)據(jù)從服務(wù)器向元數(shù)據(jù)主服務(wù)器發(fā)出包含復制元數(shù)據(jù)表名稱、本地元數(shù)據(jù)別名、全復制標志、允許表結(jié)構(gòu)改變標志、首次復制時間、復制數(shù)據(jù)起始時間戳等信息的復制訂閱授權(quán)請求消息; 第二步,請求消息經(jīng)元數(shù)據(jù)主服務(wù)器端訂閱授權(quán)認可程序確認后,元數(shù)據(jù)主服務(wù)器將向訂閱申請方回復認可的消息; 第三步,如驗證通過,此進程將符合的所有記錄推送給元數(shù)據(jù)從服務(wù)器,即元數(shù)據(jù)主服務(wù)器復制主表中時間戳值大于前一次復制數(shù)據(jù)時的最大時間戳值的數(shù)據(jù)推送給元數(shù)據(jù)從服務(wù)器。
【文檔編號】H04L29/08GK104506625SQ201410822428
【公開日】2015年4月8日 申請日期:2014年12月22日 優(yōu)先權(quán)日:2014年12月22日
【發(fā)明者】艾建文, 季統(tǒng)凱 申請人:國云科技股份有限公司