一種mysql高可用的方法及管理節(jié)點的制作方法
【專利摘要】本發(fā)明提供一種MYSQL高可用的方法及管理節(jié)點,該方法包括:檢測到主機發(fā)生故障后,選擇一從機作為新的主機,將前端的請求轉(zhuǎn)移到所述新的主機;建立所述新的主機與從機的主從對應(yīng)關(guān)系。本發(fā)明通過MHA方式能夠完成mysql失敗主機的自動切換以及自動選取新的master、自動將沒有應(yīng)用的binlog應(yīng)用到全部的slave節(jié)點上,同時能夠保證切換時間控制在1-2分鐘內(nèi)。
【專利說明】—種MYSQL高可用的方法及管理節(jié)點
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機系統(tǒng)設(shè)計領(lǐng)域和數(shù)據(jù)庫領(lǐng)域,具體涉及一種MYSQL高可用的方法。
【背景技術(shù)】
[0002]數(shù)據(jù)的重要性對于人們來說重要程度不說自明,在信息時代,數(shù)據(jù)有著具大的力量,數(shù)據(jù)庫的存在為人們提供了更快的查詢,那么在一個web網(wǎng)站中如何做到數(shù)據(jù)庫的高可用,保證持續(xù)提供服務(wù),能在0_30s之內(nèi)實現(xiàn)主Mysql故障轉(zhuǎn)移(failover), MHA(MYSQL高可用)故障轉(zhuǎn)移可以很好的幫我們解決從庫數(shù)據(jù)的一致性問題,同時最大化挽回故障發(fā)生后的數(shù)據(jù)。MHA里有兩個角色一個是node節(jié)點一個是manager (管理)節(jié)點,要實現(xiàn)這個MHA,必須最少要三臺數(shù)據(jù)庫服務(wù)器,一主多備,即一臺充當master (主機),一臺充當master的備份機,另外一臺是從屬機,現(xiàn)有技術(shù)中一旦主服務(wù)器巖機,備份機即開始充當master提供服務(wù),如主服務(wù)器上線也不會再成為master 了,這樣數(shù)據(jù)庫的一致性就被改變了,數(shù)據(jù)不一致將導致用戶的數(shù)據(jù)錯誤,有可能下的訂單沒有了,也有可能訂單重復等的問題。
【發(fā)明內(nèi)容】
[0003]本發(fā)明要解決的技術(shù)問題是提供一種MYSQL高可用的方法,以實現(xiàn)mysql失敗主機的自動切換。
[0004]為了解決上述技術(shù)問題,本發(fā)明提供了一種MYSQL高可用的方法,包括:
[0005]檢測到主機發(fā)生故障后,選擇一從機作為新的主機,將前端的請求轉(zhuǎn)移到所述新的主機;
[0006]建立所述新的主機與從機的主從對應(yīng)關(guān)系。
[0007]進一步地,上述方法還具有下面特點:所述選擇一從機作為新的主機,包括:
[0008]獲取所有從機的日志信息;
[0009]選出日志最全的從機,如所述日志最全的從機只有一個,則將該日志最全的從機作為新的主機,如所述日志最全的從機有兩個以上,則獲取所述日志最全的從機的中繼日志,選出所述中繼日志最全的從機,如所述中繼日志最全的從機只有一個,則將該中繼日志最全的從機作為新的主機,如所述中繼日志最全的從機有兩個以上,則在所述中繼日志最全的從機中隨機選擇一個作為新的主機。
[0010]進一步地,上述方法還具有下面特點:所述檢測到主機發(fā)生故障后,還包括:
[0011]如發(fā)生故障的主機可以登錄,則登錄所述發(fā)生故障的主機,保存所述發(fā)生故障的主機的二進制日志;
[0012]所述選擇一從機作為新的主機后,還包括:
[0013]判斷所述新的主機與原主機之間是否存在二進制日志差異,如存在,則指示所述新的主機應(yīng)用所述二進制日志差異。[0014]進一步地,上述方法還具有下面特點:
[0015]如選擇所述中繼日志最全的從機作為新的主機,還包括:
[0016]判斷所述新的主機與所述發(fā)生故障的主機之間是否存在中繼日志差異,如存在,則指示所述新的主機應(yīng)用所述中繼日志差異。
[0017]進一步地,上述方法還具有下面特點:所述選擇一從機作為新的主機后,還包括:
[0018]斷開所述發(fā)生故障的主機與對應(yīng)的所有從機的連接。
[0019]進一步地,上述方法還具有下面特點:所述建立所述新的主機與從機的主從對應(yīng)關(guān)系,包括:
[0020]判斷從機與所述新的主機是否存在中繼日志差異,如存在,則生成中繼日志差異文件,將所述中繼日志差異文件拷貝到對應(yīng)的從機上。
[0021]進一步地,上述方法還具有下面特點:所述選擇一從機作為新的主機后,還包括:
[0022]指示所述新的主機執(zhí)行清除從機信息的重置從機操作。
[0023]為了解決上述問題,本發(fā)明還提供了一種管理節(jié)點,其中,包括:
[0024]處理模塊,用于檢測到主機發(fā)生故障后,選擇一從機作為新的主機,將前端的請求轉(zhuǎn)移到所述新的主機;
[0025]建立模塊,用于建立所述新的主機與從機的主從對應(yīng)關(guān)系。
[0026]進一步地,上述管理節(jié)點還具有下面特點:
[0027]所述處理模塊,選擇一從機作為新的主機包括:獲取所有從機的日志信息;選出日志最全的從機,如所述日志最全的從機只有一個,則將該日志最全的從機作為新的主機,如所述日志最全的從機有兩個以上,則獲取所述日志最全的從機的中繼日志,選出所述中繼日志最全的從機,如所述中繼日志最全的從機只有一個,則將該中繼日志最全的從機作為新的主機,如所述中繼日志最全的從機有兩個以上,則在所述中繼日志最全的從機中隨機選擇一個作為新的主機。
[0028]進一步地,上述管理節(jié)點還具有下面特點:
[0029]所述處理模塊,檢測到主機發(fā)生故障后還用于,如發(fā)生故障的主機可以登錄,則登錄所述發(fā)生故障的主機,保存所述發(fā)生故障的主機的二進制日志;選擇一從機作為新的主機后還用于,判斷所述新的主機與原主機之間是否存在二進制日志差異,如存在,則指示所述新的主機應(yīng)用所述二進制日志差異。
[0030]進一步地,上述管理節(jié)點還具有下面特點:
[0031]所述處理模塊,如選擇所述中繼日志最全的從機作為新的主機,則還用于:判斷所述新的主機與所述發(fā)生故障的主機之間是否存在中繼日志差異,如存在,則指示所述新的主機應(yīng)用所述中繼日志差異。
[0032]進一步地,上述管理節(jié)點還具有下面特點:
[0033]所述處理模塊,選擇一從機作為新的主機后還用于:斷開所述發(fā)生故障的主機與對應(yīng)的所有從機的連接。
[0034]進一步地,上述管理節(jié)點還具有下面特點:
[0035]所述建立模塊,具體用于判斷從機與所述新的主機是否存在中繼日志差異,如存在,則生成中繼日志差異文件,將所述中繼日志差異文件拷貝到對應(yīng)的從機上。
[0036]進一步地,上述管理節(jié)點還具有下面特點:[0037]所述處理模塊,選擇一從機作為新的主機后還用于:指示所述新的主機執(zhí)行清除從機信息的重置從機操作。
[0038]綜上,本發(fā)明提供一種MYSQL高可用的方法及管理節(jié)點,通過MHA方式能夠完成my s q I失敗主機的自動切換以及自動選取新的mas t er、自動將沒有應(yīng)用的b i η I ο g應(yīng)用到全部的slave節(jié)點上,同時能夠保證切換時間控制在1-2分鐘內(nèi)。通過開源的MHA方式搭建一個高可用的mysql集群,既提高了集群環(huán)境的健壯性、可靠性有可以利用開源的優(yōu)勢擴展該集群的功能。
【專利附圖】
【附圖說明】
[0039]圖1為本發(fā)明實施例的MYSQL高可用的方法的流程圖;
[0040]圖2為本發(fā)明實施例的管理節(jié)點的示意圖。
【具體實施方式】
[0041]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚明白,下文中將結(jié)合附圖對本發(fā)明的實施例進行詳細說明。需要說明的是,在不沖突的情況下,本申請中的實施例及實施例中的特征可以相互任意組合。 [0042]當管理節(jié)點監(jiān)控到主庫mysql服務(wù)停止后,首先對主庫進行SSH(Struts,流程控制,Spring,業(yè)務(wù)流轉(zhuǎn),Hibernate,數(shù)據(jù)庫操作的封裝)登錄檢查,然后對mysql服務(wù)進行健康檢查,最后作出Master is down !(主機故障)的判斷,master failover (主機失敗切換)開始。
[0043]Master (主機)用于提供數(shù)據(jù)庫的讀寫服務(wù),如果存在vip (虛擬ip地址)的話,那么正常期間vip是保留在master服務(wù)器上,當出現(xiàn)故障進行切換的時候,讀寫服務(wù)以及vip會全部切換到master的backup (備份)機器上。
[0044]Slave (從機),用于進行數(shù)據(jù)庫的備份以及進行讀負載均衡,以及對數(shù)據(jù)庫進行維護、升級的時候?qū)χ鲾?shù)據(jù)庫進行備份。
[0045]圖1為本發(fā)明實施例的MYSQL高可用的方法的流程圖,如圖1所示,本實施例的方法可以包括以下步驟:
[0046]步驟101、檢測到主機發(fā)生故障;
[0047]管理節(jié)點在檢查配置信息的過程中,會再次確認主庫狀態(tài)(double check),同時羅列出當前架構(gòu)中各主機的狀態(tài)(DeadlAlive,死機|存活)。
[0048]步驟102、選擇一從機作為新的主機;
[0049]接下來是處理故障主庫,該階段可以通過定義的腳本,將前端的請求轉(zhuǎn)移到新的主機上,且可以將故障主庫的主機關(guān)掉(斷開主機與所有從機的連接)以避免腦裂帶來數(shù)據(jù)不一致問題。
[0050]本實施例中,可以通過以下步驟選擇最新從機作為新的主機:
[0051]步驟102.1:獲取最新從機;
[0052]針對所有的從機,通過show slave status (顯示從屬機狀態(tài))命令輸出的{Master_Log_File (主機日志文件),Read_Master_Log_Pos (讀取主機日志位置)}值,對所有從機的{Master_Log_File, Read_Master_Log_Pos}值進行比較,選出日志最全的從機作為latest slaves (最新從機)。此時選出的最新從機可能有多個,也有可能只有一個。如選出的最新從機有多個,則接著執(zhí)行步驟102.2 ;如選出的最新從機只有一個,則將該最新從機作為新的主機,則執(zhí)行步驟102.3。
[0053]保存故障主機的binlog (二進制日志),判斷所有最新從機與原主機之間是否存在binlog差異,binlog差異越小說明數(shù)據(jù)丟失越小。
[0054]當原主機發(fā)生故障時,如果原主機可以登錄,那么可以將原主機出現(xiàn)故障時的binlog保存下來,如果原主機不能登錄,則跳過此步驟。
[0055]步驟102.2:確定新主機;
[0056]根據(jù)步驟102.1 找出的 latest slaves,確認 latest slave 的 relay log(中繼日志)是否為最全的,選擇relay log最全的latest slave作為新主機。如relay log最全的latest slave也有多個,則隨機挑選一個latest slave作為新主機。
[0057]如果原主機還活著,則對比新主機的relay log與原主機的binlog,如兩者之間有差異,則將新主機的relay log與原主機的binlog的差異加載過來。
[0058]等待新主機將relay log中已復制過來的語句執(zhí)行完畢,通過比較Exec_Master_Log_Pos (執(zhí)行主庫日志位置)和Read_Master_Log_Pos (讀取主庫日志位置),如果Exec_Master_Log_Pos和Read_Master_Log_Pos這兩個值有差異的話,在新主機上應(yīng)用新主機與原主機的relay log差異和主庫binlog差異,以保證數(shù)據(jù)沒有丟失。
[0059]步驟103:建立新的主機與從機的主從對應(yīng)關(guān)系;
[0060]恢復從機,開始并行獲取從機日志的差異;
[0061]判斷從機與新主機是否存在relay log差異,在新主機上執(zhí)行如下命令apply_diff_relay_logs - command = generate_and_send,生成 relay log 差異文件,并將 relaylog差異文件拷貝到對應(yīng)的從機上,以使得所有的從機都是最新狀態(tài)。
[0062]最后,新主機可以執(zhí)行reset slave (重置從機)操作清除之前slave信息。
[0063]本發(fā)明通過manager節(jié)點監(jiān)控所有的數(shù)據(jù)庫節(jié)點的存活,當發(fā)現(xiàn)master節(jié)點發(fā)生故障,那么接下來就是如何選出新的master節(jié)點了以及如何將所有的slave節(jié)點指向新的master節(jié)點,這中間存在如下問題:如何找到所有slave中應(yīng)用binlog最多的節(jié)點,如何找到slave節(jié)點與master節(jié)點之間的差異,如何在所有的slave中修改指向,通過本實施例的MHA可以自動解決這些問題,而且可以通過自定義腳本來完成一些個性化的工作,為dba(Database Administrator,數(shù)據(jù)庫管理員)提供了發(fā)現(xiàn)問題解決問題的新的方法。
[0064]圖2為本發(fā)明實施例的管理節(jié)點的示意圖,如圖2所示,本實施例的管理節(jié)點包括:
[0065]處理模塊,用于檢測到主機發(fā)生故障后,選擇一從機作為新的主機,將前端的請求轉(zhuǎn)移到所述新的主機;
[0066]建立模塊,用于建立所述新的主機與從機的主從對應(yīng)關(guān)系。
[0067]其中,所述處理模塊,選擇一從機作為新的主機包括:獲取所有從機的日志信息;選出日志最全的從機,如所述日志最全的從機只有一個,則將該日志最全的從機作為新的主機,如所述日志最全的從機有兩個以上,則獲取所述日志最全的從機的中繼日志,選出所述中繼日志最全的從機,如所述中繼日志最全的從機只有一個,則將該中繼日志最全的從機作為新的主機,如所述中繼日志最全的從機有兩個以上,則在所述中繼日志最全的從機中隨機選擇一個作為新的主機。
[0068]在一優(yōu)選實施例中,所述處理模塊,檢測到主機發(fā)生故障后還可以用于,如發(fā)生故障的主機可以登錄,則登錄所述發(fā)生故障的主機,保存所述發(fā)生故障的主機的二進制日志;選擇一從機作為新的主機后還用于,判斷所述新的主機與原主機之間是否存在二進制日志差異,如存在,則指示所述新的主機應(yīng)用所述二進制日志差異。
[0069]其中,所述處理模塊,如選擇所述中繼日志最全的從機作為新的主機,則還可以用于:判斷所述新的主機與所述發(fā)生故障的主機之間是否存在中繼日志差異,如存在,則指示所述新的主機應(yīng)用所述中繼日志差異。
[0070]在一優(yōu)選實施例中,所述處理模塊,選擇一從機作為新的主機后還可以用于:斷開所述發(fā)生故障的主機與對應(yīng)的所有從機的連接。
[0071]其中,所述建立模塊,具體可以用于判斷從機與所述新的主機是否存在中繼日志差異,如存在,則生成中繼日志差異文件,將所述中繼日志差異文件拷貝到對應(yīng)的從機上。
[0072]在一優(yōu)選實施例中,所述處理模塊,選擇一從機作為新的主機后還可以用于:指示所述新的主機執(zhí)行清除從機信息的重置從機操作。
[0073]本領(lǐng)域普通技術(shù)人員可以理解上述方法中的全部或部分步驟可通過程序來指令相關(guān)硬件完成,所述程序可以存儲于計算機可讀存儲介質(zhì)中,如只讀存儲器、磁盤或光盤等??蛇x地,上述實施例的全部或部分步驟也可以使用一個或多個集成電路來實現(xiàn)。相應(yīng)地,上述實施例中的各模塊/單元可以采用硬件的形式實現(xiàn),也可以采用軟件功能模塊的形式實現(xiàn)。本發(fā)明不限制于任何特定形式的硬件和軟件的結(jié)合。
[0074]以上僅為本發(fā)明的優(yōu)選實施例,當然,本發(fā)明還可有其他多種實施例,在不背離本發(fā)明精神及其實質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當可根據(jù)本發(fā)明作出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護范圍。
【權(quán)利要求】
1.一種MYSQL高可用的方法,包括: 檢測到主機發(fā)生故障后,選擇一從機作為新的主機,將前端的請求轉(zhuǎn)移到所述新的主機; 建立所述新的主機與從機的主從對應(yīng)關(guān)系。
2.如權(quán)利要求1所述的方法,其特征在于:所述選擇一從機作為新的主機,包括: 獲取所有從機的日志信息; 選出日志最全的從機,如所述日志最全的從機只有一個,則將該日志最全的從機作為新的主機,如所述日志最全的從機有兩個以上,則獲取所述日志最全的從機的中繼日志,選出所述中繼日志最全的從機,如所述中繼日志最全的從機只有一個,則將該中繼日志最全的從機作為新的主機,如所述中繼日志最全的從機有兩個以上,則在所述中繼日志最全的從機中隨機選擇一個作為新的主機。
3.如權(quán)利要求2所述的方法,其特征在于: 所述檢測到主機發(fā)生故障后,還包括: 如發(fā)生故障的主機可以登錄,則登錄所述發(fā)生故障的主機,保存所述發(fā)生故障的主機的二進制日志; 所述選擇一從機作為新的主機后,還包括: 判斷所述新的主機與原主機之間是否存在二進制日志差異,如存在,則指示所述新的主機應(yīng)用所述二進制日志差異。
4.如權(quán)利要求2所述的方法,其特征在于:如選擇所述中繼日志最全的從機作為新的主機,還包括: 判斷所述新的主機與所述發(fā)生故障的主機之間是否存在中繼日志差異,如存在,則指示所述新的主機應(yīng)用所述中繼日志差異。
5.如權(quán)利要求1所述的方法,其特征在于:所述選擇一從機作為新的主機后,還包括: 斷開所述發(fā)生故障的主機與對應(yīng)的所有從機的連接。
6.如權(quán)利要求1-5任一項所述的方法,其特征在于:所述建立所述新的主機與從機的王從對應(yīng)關(guān)系,包括: 判斷從機與所述新的主機是否存在中繼日志差異,如存在,則生成中繼日志差異文件,將所述中繼日志差異文件拷貝到對應(yīng)的從機上。
7.如權(quán)利要求1-5任一項所述的方法,其特征在于:所述選擇一從機作為新的主機后,還包括: 指示所述新的主機執(zhí)行清除從機信息的重置從機操作。
8.—種管理節(jié)點,其特征在于,包括: 處理模塊,用于檢測到主機發(fā)生故障后,選擇一從機作為新的主機,將前端的請求轉(zhuǎn)移到所述新的主機; 建立模塊,用于建立所述新的主機與從機的主從對應(yīng)關(guān)系。
9.如權(quán)利要求8所述的管理節(jié)點,其特征在于: 所述處理模塊,選擇一從機作為新的主機包括:獲取所有從機的日志信息;選出日志最全的從機,如所述日志最全的從機只有一個,則將該日志最全的從機作為新的主機,如所述日志最全的從機有兩個以上,則獲取所述日志最全的從機的中繼日志,選出所述中繼日志最全的從機,如所述中繼日志最全的從機只有一個,則將該中繼日志最全的從機作為新的主機,如所述中繼日志最全的從機有兩個以上,則在所述中繼日志最全的從機中隨機選擇一個作為新的主機。
10.如權(quán)利要求9所述的管理節(jié)點,其特征在于: 所述處理模塊,檢測到主機發(fā)生故障后還用于,如發(fā)生故障的主機可以登錄,則登錄所述發(fā)生故障的主機,保存所述發(fā)生故障的主機的二進制日志;選擇一從機作為新的主機后還用于,判斷所述新的主機與原主機之間是否存在二進制日志差異,如存在,則指示所述新的主機應(yīng)用所述二進制日志差異。
11.如權(quán)利要求9所述的管理節(jié)點,其特征在于: 所述處理模塊,如選擇所述中繼日志最全的從機作為新的主機,則還用于:判斷所述新的主機與所述發(fā)生故障的主機之間是否存在中繼日志差異,如存在,則指示所述新的主機應(yīng)用所述中繼日志差異。
12.如權(quán)利要求8所述的管理節(jié)點,其特征在于: 所述處理模塊,選擇一從機作為新的主機后還用于:斷開所述發(fā)生故障的主機與對應(yīng)的所有從機的連接。
13.如權(quán) 利要求8-12任一項所述的管理節(jié)點,其特征在于: 所述建立模塊,具體用于判斷從機與所述新的主機是否存在中繼日志差異,如存在,則生成中繼日志差異文件,將所述中繼日志差異文件拷貝到對應(yīng)的從機上。
14.如權(quán)利要求8-12任一項所述的管理節(jié)點,其特征在于: 所述處理模塊,選擇一從機作為新的主機后還用于:指示所述新的主機執(zhí)行清除從機信息的重置從機操作。
【文檔編號】G06F17/30GK104036043SQ201410309204
【公開日】2014年9月10日 申請日期:2014年7月1日 優(yōu)先權(quán)日:2014年7月1日
【發(fā)明者】初賢哲, 喬鑫, 楊磊 申請人:浪潮(北京)電子信息產(chǎn)業(yè)有限公司