專利名稱:一種處理數據庫狀態轉移的方法和系統的制作方法
技術領域:
本申請涉及數據庫領域,特別涉及一種處理數據庫狀態轉移的方法和系統。
背景技術:
隨著數據庫技術和計算機網絡技術的不斷進步,越來越多企業的信息系統使用數據庫作為存儲和管理數據的工具。企業依賴于數據庫系統運行其關鍵業務應用,幾小時甚至是幾分鐘的數據庫服務中斷都是不允許的,因此在這些應用中保證數據庫的高可用性至關重要。高可用性(HA,High Availability)是指,通過盡量縮短因計劃中的日常維護操作或計劃外的突發系統故障所導致的服務中斷時間,向用戶提供持續不間斷的服務。數據庫系統使用計算機網絡將地理位置分散而邏輯上集中的數據連接起來,可以 通過在不同物理位置提供冗余數據的方式提供數據庫系統的高可用性。雖然在不同物理位置提供冗余數據,但通常只由一臺數據庫服務器即主數據庫服務器對外提供服務,一臺或多臺數據庫服務器作為備份服務器,當主數據庫服務器計劃停機或出現故障不能提供數據服務時,一臺備份服務器接管主數據庫服務器的工作,使數據庫用戶能持續使用數據,實現了數據庫系統的高可用性。上述主備數據庫服務器轉移是由數據庫系統本身提供的機制來完成的,這種機制僅限于數據庫系統內部。用戶通常感覺不到主備數據庫服務器狀態的變化是因為在用戶和數據庫之間針對不同的用戶需求存在不同的應用層,這些應用層在主備數據庫服務器發生狀態轉移后采取了與主備數據庫服務器狀態對應的切換操作,使得從用戶的角度感覺不到計劃內操作引起的或計劃外故障發生導致的主備數據庫服務器狀態轉移。然而,通常不同的應用層使用自己的檢測邏輯檢測數據庫的主備數據庫服務器狀態轉移,當檢測到發生主備數據庫服務器狀態轉移后,各應用層根據檢測的結果執行相應的切換操作。由于檢測的時間和檢測的間隔各不相同,這就可能導致在主備數據庫服務器發生狀態轉移后的一段時間內,各應用層以不同的數據庫服務器為當前的主數據庫服務器。進一步,當進行數據庫寫操作時,將導致數據不一致。可見,簡單地采用冗余方式提供數據庫高可用性的同時,可能帶來數據庫狀態不一致的問題。
發明內容
有鑒于此,本申請提供一種處理數據庫狀態轉移的方法和系統,針對數據庫應用層提供統一的狀態轉移方案,從而在一定程度上避免當數據庫系統主備數據庫服務器發生狀態轉移時各應用層離散的切換操作所導致的數據庫及其周邊系統的狀態不一致。本申請提供了一種處理數據庫狀態轉移的方法,包括步驟對主備數據庫服務器的狀態轉移進行統一檢測;如果檢測到主備數據庫服務器發生狀態轉移,通知數據庫應用層以便所述數據庫應用層接收到該通知后執行與主備數據庫服務器狀態對應的切換操作。優選地,所述對主備數據庫服務器的狀態轉移進行統一檢測包括根據預置的時間間隔探測主備數據庫服務器的狀態轉移。優選地,所述對主備數據庫服務器的狀態轉移進行統一檢測,具體包括根據數據庫策略,向數據庫服務器發送操作請求,根據各數據庫服務器對所述操作請求的不同處理結果來判定發生主備數據庫服務器的狀態轉移,并確定轉移后的主數據庫服務器。優選地,所述向數據庫服務器發送操作請求,根據各數據庫服務器對所述操作請求的不同處理結果來判定發生主備數據庫服務器的狀態轉移,并確定轉移后的主數據庫服務器包括向上一檢測時刻獲知的主數據庫服務器發送操作請求;如果未能接收到所述上一檢測時刻獲知的主數據庫服務器針對所述操作請求的正確的處理結果,則判定發生主備數據庫服務器的狀態轉移,并向其他數據庫服務器發送操作請求,根據各數據庫服務器對所述操作請求的不同處理結果,確定當前的主數據庫服 務器。優選地,所述向數據庫服務器發送操作請求,根據各數據庫服務器對所述操作請求的不同處理結果來判定發生主備數據庫服務器的狀態轉移,并確定轉移后的主數據庫服務器包括向系統中所有的數據庫服務器發送操作請求;根據各數據庫服務器對所述操作請求的不同處理結果,確定當前的主數據庫服務器;如果當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。優選地,所述對主備數據庫服務器的狀態轉移進行統一檢測,具體包括通過讀取包含有當前主數據庫服務器標識信息的配置文件的方式,獲知當前的主數據庫服務器,如果當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。優選地,所述如果檢測到主備數據庫服務器發生狀態轉移,通知數據庫應用層,具體包括使用推模式,將攜帶有已發生主備數據庫服務器狀態轉移和當前的主數據庫服務器標識信息的通知推送到數據庫應用層。優選地,所述對主備數據庫服務器的狀態轉移進行統一檢測包括對計劃中的主備數據庫服務器轉移操作進行統一檢測;或對非計劃系統故障導致的主備數據庫服務器轉移進行統一檢測。優選地,還包括接收數據庫應用層在啟動時或者啟動后的特定時間內的注冊請求,并在注冊信息中保存應用層所在的連接建立相關信息;所述通知數據庫應用層,具體包括讀取注冊信息獲得數據庫應用層的連接建立相關信息,通過連接建立相關信息通知數據庫應用層。優選地,所述主備數據庫服務器包括分布式數據庫系統的數據庫集群中的主備數據庫服務器。本申請提供一種處理數據庫狀態轉移的系統,包括
主備狀態轉移檢測單元,用于對主備數據庫服務器的狀態轉移進行統一檢測;主備狀態轉移通知單元,用于當檢測到主備數據庫服務器發生狀態轉移后,通知數據庫的應用層,以便所述數據庫應用層接收到該通知后執行與主備數據庫服務器狀態對應的切換操作。優選地,所述主備狀態轉移檢測單元,具體用于根據預置的時間間隔探測主備數據庫服務器的狀態轉移。優選地,所述主備狀態轉移檢測單元,進一步包括操作請求發送子單元,用于根據數據庫策略,向數據庫服務器發送操作請求;主備狀態轉移判斷子單元,用于根據各數據庫服務器對所述操作請求的不同處理結果來判定發生主備數據庫服務器的狀態轉移,并確定轉移后的主數據庫服務器。 優選地,所述操作請求發送子單元,具體用于向上一檢測時刻獲知的主數據庫服務器發送操作請求;所述主備狀態轉移判斷子單元,具體用于如果未能接收到所述上一檢測時刻獲知的主數據庫服務器針對所述操作請求的正確的處理結果,則判定發生主備數據庫服務器的狀態轉移;并觸發所述操作請求發送子單元向其它數據庫服務器發送操作請求,以便根據當前的主數據庫服務器返回的正確的執行結果,確定當前的主數據庫服務器。優選地,所述操作請求發送子單元,具體用于向系統中所有的數據庫服務器發送操作請求;所述主備狀態轉移判斷子單元,具體用于根據各數據庫服務器對所述操作請求的不同處理結果,確定當前的主數據庫服務器;如果當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。優選地,所述主備狀態轉移檢測單元,進一步包括配置文件讀取子單元,用于通過讀取包含有當前主數據庫服務器標識信息的配置文件的方式,獲知當前的主數據庫服務器,如果當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。優選地,所述主備狀態轉移通知單元,具體用于使用推模式,將攜帶有已發生主備數據庫服務器狀態轉移和當前的主數據庫服務器標識信息的通知推送到數據庫應用層。優選地,所述主備狀態轉移檢測單元,具體用于對計劃中的主備數據庫服務器轉移操作進行統一檢測;或對非計劃系統故障導致的主備數據庫服務器轉移進行統一檢測。優選地,進一步包括應用層注冊單元,用于接收數據庫應用層在啟動時或者啟動后的特定時間內的注冊請求,并在注冊信息中保存應用層所在的連接建立相關信息;所述主備狀態轉移通知單元,具體用于當主備狀態轉移通知單元檢測到主備數據庫服務器發生狀態轉移后,讀取注冊信息獲得數據庫應用層的連接建立相關信息,通過連接建立相關信息通知數據庫應用層,以便所述數據庫應用層接收到該通知后執行與主備數據庫服務器狀態對應的切換操作。優選地,所述主備數據庫服務器包括分布式數據庫系統的數據庫集群中的主備數據庫服務器。根據本申請提供的具體實施例,本申請公開了以下技術效果
本申請實施例中,引入了對主備數據庫服務器狀態轉換的統一處理,即對主備數據庫服務器的狀態轉移進行統一檢測,當發現發生狀態轉移時,通知數據庫的各應用層,從而保證了各應用層能夠在同一時間獲得統一的關于主備數據庫服務器狀態轉換的通知,并根據該通知消息執行各應用層相應的切換方案。采用統一檢測和通知的方法在一定程度上避免了各應用層離散地進行各自的檢測和轉換操作所導致的數據庫狀態不一致,提供數據庫高可用性的同時,保證了數據庫狀態的一致性。另外,雖然各個應用層對狀態轉移的具體切換操作是不同的,但對于檢測主備數據庫服務器狀態轉移的過程卻是相同的,針對數據庫應用層采用統一的檢測和通知邏輯,有助于通用性的實現,降低了數據庫與其應用層之間的復雜性。當然,實施本申請的任一產品并不一定需要同時達到以上所述的所有優點。
圖I為本申請的方法流程圖;
圖2為本申請第一實施例系統結構示意圖;圖3為本申請的系統結構圖。
具體實施例方式為了使本申請的上述目的、特征、和優點能夠更加明顯易懂,下面結合附圖和具體實施方式
對本申請作進一步詳細的說明。參考圖I所示,該圖為本申請的方法流程圖,包括以下步驟SlOl :對主備數據庫服務器的狀態轉移進行統一檢測;S102:如果檢測到主備數據庫服務器發生狀態轉移,通知數據庫應用層以便所述數據庫應用層接收到該通知后執行與主備數據庫服務器狀態對應的切換操作。在本申請實施中,通過統一的對主備數據庫服務器的狀態轉移檢測和通知,使得數據庫不同的應用層能夠在同一時間范圍內得到統一的關于主備數據庫服務器的狀態轉移信息,進而啟動各自相應的切換操作,從而保證各應用層連接的數據庫服務器是當前主數據庫服務器,在一定程度上避免了現有技術中可能出現的不同應用層連接到不同數據庫服務器,進而導致對不同數據源的數據進行更新等操作而引起的數據庫及其周邊系統的狀態不一致。參考圖2所示,該圖為本申請實施例所述的數據庫的狀態轉移系統組成示意圖。該系統中,數據庫系統當前有主備數據庫服務器,并且由主數據庫服務器對外提供數據庫服務,使用該數據庫的應用層有η個,各應用層在數據庫發生主備數據庫服務器狀態轉移時需要執行不同的與主備數據庫服務器狀態對應的切換操作。在實際應用中,數據庫系統可能發生主備數據庫服務器狀態轉移的原因可能是有計劃的對數據庫服務器進行維護操作,例如定時輪流對當前主數據庫服務器進行重啟,或發現當主數據庫服務器存在潛在的硬件或軟件故障,雖然該故障還沒有發生但可以有計劃地提前關閉該數據庫服務器進行故障排除。另外,也可能是主數據庫服務器在運行中出現了突發的硬件或軟件故障,即非計劃中的數據服務中斷。無論上述那種原因,都將會導致主備數據庫服務器之間的狀態轉移,即原備份數據庫服務器將接替原主數據庫服務器成為當前主數據庫服務器,并繼續對外提供數據服務器。本申請實施例就是要對上述各種情況下的主備數據庫服務器的狀態轉移事件進行統一處理,以便數據庫應用層及時執行與主備數據庫服務器狀態對應的切換操作。S101)對主備數據庫服務器轉移的狀態進行統一檢測。為避免各應用層對數據庫離散地進行各自的檢測和轉換操作所導致的數據不一致,本申請實施例引入了對主備數據庫服務器狀態轉移的統一檢測。統一檢測是否發生主備數據庫服務器轉換可以采取定時檢測的方法,即根據預置的時間間隔探測是否發生主備數據庫服務器狀態轉換。具體在探測是否發生主備數據庫服務器狀態轉移時,可以通過多種方式實現。在其中一種實施方式下,由于數據庫系統策略規定主備數據庫服務器提供的數據服務不同,即利用主備數據庫服務器對同一操作請求的不同處理結果來獲得某一檢測時刻的主數據庫服務器,通過比較上一檢測時間獲得的主數據庫服務器得到主備數據庫狀態轉移的檢測結果。
當檢測到主數據庫服務器發送狀態轉移時,對于如何獲知哪一臺數據庫服務器為當前的主數據庫服務器,有不同的實現方法。通常在數據庫服務器進行主備狀態轉移時,數據庫系統根據特定的選舉算法從備份數據庫服務器中選舉當前的主數據庫服務器。因此,一種實現方法是當檢測到主數據庫服務器發送狀態轉移時,使用該數據庫系統特定的選舉算法計算出當前的主數據庫服務器。這種實現方法的前提是已知數據庫系統的特定選舉算法,并且當該選舉算法發生改變時,也要進行對應的調整以計算出當前的主數據庫服務器。另一種實現方法是在未知該特定算法的情況下,使用與檢測主數據庫服務器狀態轉移類似的方法獲知當前主數據庫服務器。第二種方法獨立于數據庫系統的選舉算法,不需要已知數據庫系統的特定選舉算法,并且當數據庫系統的選舉算法發生改變時,不需要進行對應的調整依然能檢測出當前的主數據庫服務器。根據上述第二種方法,具體可以采用以下實現方式向系統中所有的數據庫服務器發送操作請求;由于不同的數據庫服務器對所述操作請求的不同處理結果,只有主數據庫服務器返回正確的執行結果,由此可以確定當前的主數據庫服務器;如果當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。另一種實現方法是向上一檢測時刻獲知的主數據庫服務器發送操作請求;如果未能接收到所述上一檢測時刻獲知的主數據庫服務器針對所述操作請求的正確的處理結果,則該數據庫當前已經不再能提供主數據庫服務,因此判定已發生主備數據庫服務器的狀態轉移;向其它數據庫服務器發送操作請求,由于只有當前的主數據庫服務器能夠執行該數據操作,因此通過主數據庫服務器返回的正確的處理結果確定當前的主數據庫服務器。第二種方法避免了第一種方法中每次檢查都向系統中所有的數據庫服務器發送操作請求,而是向上一檢測時刻獲知的主數據庫服務器發送操作請求。雖然在第二種方法中當未能接收到上一檢測時刻獲知的主數據庫服務器針的正確的處理結果時,也向其它數據庫服務器發送操作請求,但由于發生主備狀態轉移的頻率相對于檢查頻率來說是小很多的。因此,第二種方法一定程度上節省了系統資源和網絡帶寬。在本實施例中,數據庫系統的策略規定只有主數據庫提供數據的更新或寫入操作服務,備份數據庫僅提供只讀操作服務,因此可以使用以下步驟探測是否發生主備數據庫服務器狀態轉換初始狀態下,在某一檢測時刻,向所有主備數據庫服務器各發送一條數據庫的更新操作請求,主數據庫服務器返回正確的處理結果,得到當前主數據庫服務器的標識信息。該標識信息可以是位置信息如IP地址,也可以是該數據庫服務器的身份信息如主機名。等待設定的時間間隔后,向上一檢測時刻獲知的主數據庫服務器發送一條數據庫的更新操作請求,若該主數據庫服務器仍然返回正確的處理結果,則判定未發生主備數據庫狀態轉移;若該主數據庫服務器返回處理結果異常,則判定已發生主備數據庫服務器狀態轉移,并則向系統中的備份數據庫服務器發送數據庫更新操作請求, 由于該備份數據庫服務器已經成為當前的主數據庫服務器向外提供數據服務,因此接收到該數據庫服務器返回的正確的處理結果,即確定當前的主數據庫服務器。檢測結果包含主備數據庫服務器發生狀態轉移和當前的主數據庫服務器的標識信息。上述檢測方法中發送“更新操作請求”,對不同的數據庫策略存在不同的替代方案,例如,若數據庫的策略為主數據庫服務器提供所有的數據服務包括讀、寫入和更新數據服務,而備份數據庫服務器不提供任何數據服務,針對這樣的數據庫,可發送讀數據操作請求進行檢測,因為只有主數據庫服務器才會返回正確的執行結果,而備份數據庫服務器不會返回正確的執行結果,由此也可以獲知主備數據庫服務器的工作狀態。除了采用上述方式進行檢測以外,還可以采用其他的方式來實現。例如,由于數據庫系統具有配置文件,該配置文件會隨著數據庫服務器的主備數據庫服務器的狀態轉移實時更新,也即,配置文件中記錄了當前哪個數據庫服務器為主狀態,并且記錄有該數據庫服務器的標識信息。因此,在需要檢測主數據庫服務器狀態時,可以首先通過讀取該配置文件的方式,獲知當前的主數據庫服務器,并與上一檢測時刻的讀取結果進行比較,以獲知是否發生狀態轉移。S102如果檢測到主備數據庫服務器發生狀態轉移,通知數據庫應用層以便所述數據庫應用層接收到該通知后執行與主備數據庫服務器狀態對應的切換操作。一旦檢測到主備數據庫服務器發生狀態轉移,可以立即將數據庫發生狀態轉移的消息通知給使用數據庫的各應用層,使得數據庫的應用層能夠盡可能在同一時間獲得關于數據庫狀態的通知消息。該通知消息里包含數據庫發生了主備數據庫服務器轉移,并且包含了當前主數據庫服務器的標識信息。由于數據庫系統中主備數據庫服務器和各個應用層可能分布在不同的物理位置,它們之間通過網絡連接,所以存在時延,但是由于傳播時延在數量級上遠小于探測時間間隔,因此可以忽略這種正常網絡時延帶來的影響。為更加迅速地通知數據庫應用層,可采用預先注冊的方法,即數據庫應用層在啟動時或者啟動后的特定時間內進行注冊,注冊的信息包括應用層所在的連接建立相關信息,這些信息可以是應用層名稱以及位置信息如應用層所在主機IP地址。以便當檢測到主備數據庫服務器發生狀態轉移后,根據注冊表內所包括的注冊信息將所述通知發送給已注冊的應用層。通知應用層可以采用推模式,例如采用Zookeeper的Watch機制來實現,即當檢測到主備數據庫服務器狀態轉移的事件后,將包含已發生了主備數據庫服務器轉移和當前主數據庫服務器標識信息的通知消息推送給各個應用層。當然,在實際應用中,除了這種推模式以外,也可以采用其他方式來實現,這里不再一一列舉。數據庫的應用層接收到主備數據庫服務器轉移的通知后執行與現有技術類似的相應的狀態切換操作。例如,根據數據庫的主備數據庫服務器狀態調整數據源對象,具體包括斷開與原主數據庫服務器的連接,并與轉移后的主數據庫服務器建立連接,從而通過新建立的連接,實現使用轉移后的主數據庫服務器提供的數據服務。由于數據庫各應用層需要執行的與主備數據庫服務器狀態對應的切換操作各有所不同,因此,將執行各自切換操作的功能依然保留在每個應用層內部實現,使得各個應用層能夠利用統一的通知消息完成各自的切換操作,保證了操作的正確性。根據具體應用需要,在主備數據庫服務器發生狀態轉移之后,為獲得下一輪數據庫狀態的檢測消息,可能需要調整檢測操作,如轉變探測的目標節點,由檢測原主數據庫服務器變更為檢測當前的主數據庫服務器,以便在等待設定的時間間隔后向當前主數據庫服務器發送用于檢測的數據庫操作。所述調整操作的執行可以在檢測到數據庫主備數據庫服務器發生轉移后立即執行,也可以在向應用層發出通知后立即執行。本申請所述的處理數據庫狀態轉移方法可應用于分布式數據庫。在分布式數據庫·中部署有數據庫集群,該數據庫集群擁有一個主數據庫服務器對外提供數據服務以及至少一個備份數據庫服務器。當主備數據庫服務器發生狀態轉移時,可通過本申請所訴的處理數據庫狀態轉移方法實現數據庫應用層與主備數據庫服務器狀態對應的切換操作。參考圖3所示,該圖為本申請第一實施例所述處理數據庫狀態轉移的方法對應的系統結構圖,該系統包括主備狀態轉移檢測單元301和主備狀態轉移通知單元302。主備狀態轉移檢測單元用于對主備數據庫服務器的狀態轉移進行統一檢測。主備數據庫服務器的狀態轉移可能是對計劃中的主備數據庫服務器轉移操作進行統一檢測或對非計劃系統故障導致的主備數據庫服務器轉移進行統一檢測。為盡可能避免各應用層單獨對主備數據庫服務器的狀態轉移檢測,從而導致在不同的時間獲得狀態轉移的檢測結果,該檢測操作由本申請實施例所引入的主備狀態檢測單元統一完成。具體檢測是否發生主備數據庫服務器轉換可以采取不同的方式,主備狀態轉移檢測單元可用于根據預置的時間間隔探測主備數據庫服務器的狀態轉移。主備狀態轉移檢測單元,進一步可包括操作請求發送子單元和主備狀態轉移判斷子單元。操作請求發送子單元,用于根據數據庫策略,向數據庫服務器發送操作請求。主備狀態轉移判斷子單元,用于根據各數據庫服務器對所述操作請求的不同處理結果來判定發生主備數據庫服務器的狀態轉移,并確定轉移后的主數據庫服務器。在具體實現時,一種方法是操作請求發送子單元,向上一檢測時刻獲知的主數據庫服務器發送操作請求;主備狀態轉移判斷子單元如果未能接收到所述上一檢測時刻獲知的主數據庫服務器針對所述操作請求的正確的處理結果,則判定發生主備數據庫服務器的狀態轉移;并觸發所述操作請求發送子單元向其它數據庫服務器發送操作請求,以便根據當前的主數據庫服務器返回的正確的執行結果,確定當前的主數據庫服務器。另一種方法是操作請求發送子單元,具體向系統中所有的數據庫服務器發送操作請求;主備狀態轉移判斷子單元根據各數據庫服務器對所述操作請求的不同處理結果,確定當前的主數據庫服務器;如果當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。
在數據庫系統具有記錄了當前主數據庫服務器及其標識信息的配置文件時,主備狀態轉移檢測單元,進一步包括配置文件讀取單元,用于通過讀取包含有當前主數據庫服務器標識信息的配置文件的方式,獲知當前的主數據庫服務器,主備狀態轉移檢測單元根據當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。當檢測到發生主備數據庫服務器狀態轉移后,為更加迅速地通知數據庫應用層,可進一步增加應用層注冊單元,用于接收數據庫應用層在啟動時或者啟動后的特定時間內的注冊請求,并在注冊信息中保存應用層所在的連接建立相關信息。當主備狀態轉移通知單元檢測到發生主備數據庫服務器轉移,讀取注冊信息獲得數據庫應用層的連接建立相關信息,通過連接建立相關信息通知數據庫應用層,以便所述數據庫應用層接收到該通知后執行與主備數據庫服務器狀態對應的切換操作。在檢測到發生了主備數據庫服務器狀態轉移后,主備狀態轉移通知單元將數據庫發生狀態轉移的消息統一通知給使用數據庫的各個應用層,使得數據庫的應用層能夠盡可能在同一時間獲得關于數據庫狀態的通知消息。該通知消息里包含數據庫已發生主備數據 庫服務器狀態轉移,并且包含了當前主數據庫服務器的標識信息,因此數據庫應用層能夠執行與主備數據庫服務器狀態對應的切換操作。主備狀態轉移通知單元,可以使用推模式,將攜帶有已發生主備數據庫服務器狀態轉移和當前的主數據庫服務器標識信息的通知推送到數據庫應用層。在具體實現時,可以將上述各單元作為一種單獨的檢測通知服務或應用程序,運行在獨立的服務器上,同時,可以在各應用層分別部署監聽模塊。檢測通知服務或應用程序通過網絡與數據庫、應用層監聽模塊連接,并在檢測到主備數據庫服務器狀態轉移消息時,統一通知給應用層監聽模塊以便應用層啟動與主備數據庫服務器狀態對應的切換操作。本實施例所描述的處理數據庫狀態轉移的系統,可用于分布式數據庫系統中,主備數據庫服務器包括分布式數據庫系統的數據庫集群中的主備數據庫服務器。以上所述僅為本申請的較佳實施例而已,并不用以限制本申請,凡在本申請的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本申請的保護范圍之內。
權利要求
1.一種處理數據庫狀態轉移的方法,其特征在于,包括步驟 對主備數據庫服務器的狀態轉移進行統一檢測; 如果檢測到主備數據庫服務器發生狀態轉移,通知數據庫應用層以便所述數據庫應用層接收到該通知后執行與主備數據庫服務器狀態對應的切換操作。
2.根據權利要求I所述的處理數據庫狀態轉移的方法,其特征在于,所述對主備數據庫服務器的狀態轉移進行統一檢測包括根據預置的時間間隔探測主備數據庫服務器的狀態轉移。
3.根據權利要求I或2所述的處理數據庫狀態轉移的方法,其特征在于,所述對主備數據庫服務器的狀態轉移進行統一檢測,具體包括根據數據庫策略,向數據庫服務器發送操作請求,根據各數據庫服務器對所述操作請求的不同處理結果來判定發生主備數據庫服務器的狀態轉移,并確定轉移后的主數據庫服務器。
4.根據權利要求3所述的處理數據庫狀態轉移的方法,其特征在于,所述向數據庫服務器發送操作請求,根據各數據庫服務器對所述操作請求的不同處理結果來判定發生主備數據庫服務器的狀態轉移,并確定轉移后的主數據庫服務器包括 向上一檢測時刻獲知的主數據庫服務器發送操作請求; 如果未能接收到所述上一檢測時刻獲知的主數據庫服務器針對所述操作請求的正確的處理結果,則判定發生主備數據庫服務器的狀態轉移,并向其他數據庫服務器發送操作請求,根據各數據庫服務器對所述操作請求的不同處理結果,確定當前的主數據庫服務器。
5.根據權利要求3所述的處理數據庫狀態轉移的方法,其特征在于,所述向數據庫服務器發送操作請求,根據各數據庫服務器對所述操作請求的不同處理結果來判定發生主備數據庫服務器的狀態轉移,并確定轉移后的主數據庫服務器包括 向系統中所有的數據庫服務器發送操作請求; 根據各數據庫服務器對所述操作請求的不同處理結果,確定當前的主數據庫服務器; 如果當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。
6.根據權利要求I或2所述的處理數據庫狀態轉移的方法,其特征在于,所述對主備數據庫服務器的狀態轉移進行統一檢測,具體包括 通過讀取包含有當前主數據庫服務器標識信息的配置文件的方式,獲知當前的主數據庫服務器,如果當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。
7.根據權利要求I所述的處理數據庫狀態轉移的方法,其特征在于,所述如果檢測到主備數據庫服務器發生狀態轉移,通知數據庫應用層,具體包括使用推模式,將攜帶有已發生主備數據庫服務器狀態轉移和當前的主數據庫服務器標識信息的通知推送到數據庫應用層。
8.根據權利要求I所述的處理數據庫狀態轉移的方法,其特征在于,所述對主備數據庫服務器的狀態轉移進行統一檢測包括 對計劃中的主備數據庫服務器轉移操作進行統一檢測;或 對非計劃系統故障導致的主備數據庫服務器轉移進行統一檢測。
9.根據權利要求I所述的處理數據庫狀態轉移的方法,其特征在于,還包括接收數據庫應用層在啟動時或者啟動后的特定時間內的注冊請求,并在注冊信息中保存應用層所在的連接建立相關信息; 所述通知數據庫應用層,具體包括 讀取注冊信息獲得數據庫應用層的連接建立相關信息,通過連接建立相關信息通知數據庫應用層。
10.根據權利要求1、2、7-9任一項所述的處理數據庫狀態轉移的方法,其特征在于,所述主備數據庫服務器包括分布式數據庫系統的數據庫集群中的主備數據庫服務器。
11.一種處理數據庫狀態轉移的系統,其特征在于,包括 主備狀態轉移檢測單元,用于對主備數據庫服務器的狀態轉移進行統一檢測; 主備狀態轉移通知單元,用于當檢測到主備數據庫服務器發生狀態轉移后,通知數據庫的應用層,以便所述數據庫應用層接收到該通知后執行與主備數據庫服務器狀態對應的切換操作。
12.根據權利要求11所述的處理數據庫狀態轉移的系統,其特征在于,所述主備狀態轉移檢測單元,具體用于根據預置的時間間隔探測主備數據庫服務器的狀態轉移。
13.根據權利要求11或12所述的處理數據庫狀態轉移的系統,其特征在于,所述主備狀態轉移檢測單元,進一步包括 操作請求發送子單元,用于根據數據庫策略,向數據庫服務器發送操作請求; 主備狀態轉移判斷子單元,用于根據各數據庫服務器對所述操作請求的不同處理結果來判定發生主備數據庫服務器的狀態轉移,并確定轉移后的主數據庫服務器。
14.根據權利要求13所述的處理數據庫狀態轉移的系統,其特征在于, 所述操作請求發送子單元,具體用于向上一檢測時刻獲知的主數據庫服務器發送操作請求; 所述主備狀態轉移判斷子單元,具體用于如果未能接收到所述上一檢測時刻獲知的主數據庫服務器針對所述操作請求的正確的處理結果,則判定發生主備數據庫服務器的狀態轉移;并觸發所述操作請求發送子單元向其它數據庫服務器發送操作請求,以便根據當前的主數據庫服務器返回的正確的執行結果,確定當前的主數據庫服務器。
15.根據權利要求13所述的處理數據庫狀態轉移的系統,其特征在于, 所述操作請求發送子單元,具體用于向系統中所有的數據庫服務器發送操作請求; 所述主備狀態轉移判斷子單元,具體用于根據各數據庫服務器對所述操作請求的不同處理結果,確定當前的主數據庫服務器;如果當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。
16.根據權利要求11或12所述的處理數據庫狀態轉移的系統,其特征在于,所述主備狀態轉移檢測單元,進一步包括 配置文件讀取子單元,用于通過讀取包含有當前主數據庫服務器標識信息的配置文件的方式,獲知當前的主數據庫服務器,如果當前的主數據庫服務器與上一檢測時刻獲知的主數據庫服務器不同,判定發生主備數據庫服務器的狀態轉移。
17.根據權利要求11所述的處理數據庫狀態轉移的系統,其特征在于,所述主備狀態轉移通知單元,具體用于使用推模式,將攜帶有已發生主備數據庫服務器狀態轉移和當前的主數據庫服務器標識信息的通知推送到數據庫應用層。
18.根據權利要求11所述的處理數據庫狀態轉移的系統,其特征在于,所述主備狀態轉移檢測單元,具體用于對計劃中的主備數據庫服務器轉移操作進行統一檢測;或 對非計劃系統故障導致的主備數據庫服務器轉移進行統一檢測。
19.根據權利要求11所述的處理數據庫狀態轉移的系統,其特征在于,進一步包括應用層注冊單元,用于接收數據庫應用層在啟動時或者啟動后的特定時間內的注冊請求,并在注冊信息中保存應用層所在的連接建立相關信息; 所述主備狀態轉移通知單元,具體用于當主備狀態轉移通知單元檢測到主備數據庫服務器發生狀態轉移后,讀取注冊信息獲得數據庫應用層的連接建立相關信息,通過連接建立相關信息通知數據庫應用層,以便所述數據庫應用層接收到該通知后執行與主備數據庫服務器狀態對應的切換操作。
20.根據權利要求11、12、17-19任一項所述的處理數據庫狀態轉移的系統,其特征在于,所述主備數據庫服務器包括分布式數據庫系統的數據庫集群中的主備數據庫服務器。
全文摘要
本申請公開了一種處理數據庫狀態轉移的方法和系統。本申請的方法包括對主備數據庫服務器的狀態轉移進行統一檢測;如果檢測到主備數據庫服務器發生狀態轉移,通知數據庫應用層以便所述數據庫應用層接收到該通知后執行與主備數據庫服務器狀態對應的切換操作。本申請還公開了一種處理數據庫狀態轉移的系統,該系統包括主備狀態檢測單元和主備狀態轉移通知單元。通過本申請,在一定程度上避免了各應用層離散地進行各自的檢測和切換操作所導致的數據庫及其周邊系統狀態不一致,提供數據庫高可用性的同時,保證了數據庫系統狀態的一致性。
文檔編號H04L29/08GK102841895SQ20111016931
公開日2012年12月26日 申請日期2011年6月22日 優先權日2011年6月22日
發明者王福強 申請人:阿里巴巴集團控股有限公司