Moebius for SQL Server

格瑞趋势技术团队發表於2024-11-20

Moebius(莫比斯)介紹

Moebius資料庫多活叢集是格瑞趨勢為SQL Server資料庫研發的能夠同時滿足可用性、資料安全、容災、讀寫分離、負載均衡的一站式多活叢集。叢集的名字取自Moebius環,寓意無限擴充套件。

Moebius採用“share nothing”架構,每個節點的SQL Server服務獨立安裝,使用每個伺服器自己儲存介質內的資料庫檔案。不基於共享儲存裝置,也不基於磁碟映象等功能,透過SQL Server的日誌同步技術實現各節點中資料的一致性。在主節點寫入資料時會產生日誌,Moebius捕獲並傳輸日誌到其他節點,並透過REDO技術把日誌轉換成資料。因此每個節點的SQL Server服務都是啟動的,資料都是的。Moebius有實時和準實時兩種同步方式,不同的節點可以使用不同的同步方式。

Moebius 透過網路心跳仲裁機制實現故障監控,當偵測到某節點發生故障並經過仲裁後,將此節點剝離出叢集,如果故障節點是主節點,則會進行自動故障轉移,重新選擇健康的節點作為主節點。節點故障恢復後會自動從主節點同步差異資料,同步完成後加入到叢集中。

Moebius的排程引擎支援連線級和SQL語句級兩種排程方式,透過規則的配置,在不改動或者少改動應用程式的前提下,透明的實現讀寫分離、負載均衡。

Moebius叢集的架構


Moebius叢集採用無共享磁碟架構
Moebius叢集由一組資料庫伺服器組成,每個伺服器上安裝相同的資料庫,叢集支援無共享磁碟架構,各機器可以不連線一個共享裝置,資料可以儲存在每個機器自己的儲存介質中。

無共享磁碟架構,使得儲存不再是單點,系統可用性提高,同時還可以充分利用叢集中每個機器的CPU、I/O等硬體來實現叢集的高效能。
無需價格高昂的共享磁碟櫃,只要使用2臺伺服器即可輕鬆構築低成本的叢集。

Moebius叢集架構的分類


依據資料是否分割槽,Moebius叢集架構分為標準架構和高階架構:
標準架構:每個節點中具有完全相同的資料,每個節點都擁有資料全集。
高階架構:每個節點中資料是不同的,每個節點只擁有資料全集的一部分。
Moebius For SQL Server標準架構
Moebius叢集是一組相互獨立的伺服器,透過相互協作形成一個統一的整體。叢集中多個節點相互連線,這樣冗餘的硬體架構不但可以避免單點故障而且提供了傑出的故障恢復能力。一旦發生系統失敗,Moebius叢集對使用者保證最高的可用性,保障關鍵是業務資料不丟失。

Moebius 叢集標準架構
一個叢集資料庫可以看作是一個被多個應用例項訪問的單一資料庫。在Moebius叢集中,每個SQL Server例項在各自的伺服器上執行。隨著應用的增加,當需要新增額外的資源時,可以在不停機的情況下很容易地增加節點。
標準架構中介軟體工作原理
中介軟體駐留在每個機器的資料庫中,監測資料庫內資料的變化,並將變化的資料同步到其它資料庫中。資料同步完成後客戶端才會得到響應,同步過程是併發完成的,因此同步到多個資料庫和同步到一個資料庫的時間基本相等;另外同步過程是在事務環境下完成的,保證了多份資料的資料一致性。

正因為中介軟體宿主在資料庫中,所以中介軟體不但能知道資料的變化,而且知道引起資料變化的SQL語句,根據SQL語句的型別智慧地採取不同的資料同步策略以保證資料同步成本的最小化:
1. 資料條數很少,資料內容也不大,則直接同步資料。
2. 資料條數很少,但是裡面包含大資料型別,比如文字,二進位制資料等, 則先對資料進行壓縮然後再
同步,從而減少網路頻寬的佔用和傳輸所用的時間。
3. 資料條數很多,此時中介軟體會獲取造成資料變化的SQL語句, 然後對SQL語句進行解析,分析其
執行計劃和執行成本,並選擇是同步資料還是同步SQL語句到其他的資料庫中。在對錶結構進行調整
或者批次更改資料的時候,這種同步策略非常有用。
Moebius For SQL Server高階架構
在高階架構中,採用資料分割槽技術,依據某種規則把資料分散到多個資料庫中。
資料為什麼分割槽?
1.當資料量很大的時候,即使伺服器在沒有任何壓力的情況下,某些複雜的查詢操作都會非常緩慢,影
響終端使用者的體驗。
2.在大資料量下對資料庫的裝載與匯出,備份與恢復,結構的調整,索引的調整等都會讓資料庫停止服
務或者高負荷運轉很長時間,影響資料庫的可用性和易管理性。
3.面對這樣的應用環境,僅僅依靠提升伺服器的硬體配置是起不到作用的,比較好的辦法是透過資料分
區,把資料分成更小的部分來提高資料庫的可用性和易管理性。
4.分割槽把各部分資料放到不同的機器中,每次查詢可以由多個機器上的CPU、I/O來共同負載,透過
各節點並行處理資料來提高效能。

系統結構
Moebius For SQL Server高階架構在結構上分訪問層資料庫和資料層資料庫兩部分。
訪問層:訪問層資料庫只有原來資料庫的結構沒有資料,處理提交上來的SQL語句並排程執行。訪問層數
據庫可以由多個機器來負載均衡。
資料層:資料層資料庫就是原來的資料庫,但是可以有多個冗餘對查詢進行負載均衡,以提高整個系統
的效能,Moebius For SQL Server保證多個資料庫的一致性;資料層資料庫不暴露給使用者和業務程式,使用者和業務程式面對的是訪問層資料庫。

透過訪問層和資料層構建出一個網格叢集來實現叢集的高可用性和負載均衡,訪問層和資料層的資料庫是可以擴充套件的。(每列中各節點的資料是相同的,每行構成資料的全集;圖中資料資料層設計為5×2矩陣,在實際應用中要依據業務的特點來劃分)。
如何分割槽?
Moebius For SQL Server支援兩種分割槽方式:Hash分割槽和線性分割槽。
Hash分割槽:是將表按某一欄位的值均勻地分佈到若干個指定分割槽中的一種分割槽方法。
優點:每個分割槽內分配的資料比較平均,承載的壓力也就比較平均,機器能夠得到充分的利用。
缺點:不易擴充套件,如果擴充套件新的分割槽會涉及到資料的重新分配,因此在設計的時候要提前規劃好。
Moebius For SQL Server支援把多個分割槽資料放在一個機器上然後再根據壓力逐個的拆到新機器中去,這樣既可以保證了分割槽的規劃又不浪費機器,實現了線性擴充套件。
線性分割槽:即範圍分割槽,將表按某一欄位的取值範圍進行分割槽,如按時間,每個月的資料在一個分割槽中。
優點:擴充套件效能比較好,因為資料的增長是有一定規律的。
缺點:每個分割槽內資料的壓力不是很平均,大部分業務都存在這種現象,越老的資料被訪問的頻率越低,從而導致各機器面臨的壓力也不同,因此使機器的利用率不高。
Moebius For SQL Server支援把多個分割槽資料放在一個機器上,所以可以透過新老分割槽的交替使用來提高機器的利用率。
分割槽操作在管理工具中很容易配置,首先設定分割槽,接下來給每個表選擇分割槽並設定分割槽欄位.
這樣中介軟體在解析、處理SQL語句的時候就會根據配置把資料分配到相應分割槽所在的機器中去或者從相應分割槽中讀取資料。和其他一些叢集不同的是Moebius For SQL Server的分割槽是經過抽象的,是完全透明的。

高階架構中介軟體工作原理
1.中介軟體解析到查詢的SQL語句後,首先分析該語句要查詢的表,根據所要查詢表的分割槽配置和SQL語句的WHERE條件計算出要從一個分割槽中還是多個分割槽中去取資料,取完資料後在訪問層合併後再返回給應用程式。這裡要重點說明的是中介軟體透過分析SQL語句,能夠對分割槽範圍進行動態縮小或者放大。SELECT * FROM dbo.UserInfo WHERE UserID = 1,因為UserID是分割槽欄位,所以中介軟體只會從一個分割槽中查詢;SELECT * FROM dbo.UserInfo WHERE UserID IN(3, 4)則會從兩個分割槽中查詢;SELECT * FROM dbo.UserInfo WHERE Username = ‘wangzhongtao’,沒有使用分割槽欄位作為查詢的條件,中介軟體就會從每個分割槽列資料庫進行查詢。對於多個分割槽列資料進行查詢的操作是並行的從而保證總體響應時間的最小化。

2.中介軟體解析到更新的SQL語句後,首先分析要更新的表,根據要更新表的分割槽配置和更新語句的SQL語法來計算出要更新一個或者多個分割槽中的資料。例如INSERT dbo.UserInfo(UserID, Username) VALUES(1, ‘wangzhongtao’),中介軟體會解析到UserID = 1,然後根據表的分割槽配置把資料插入到第一個分割槽中去。中介軟體解析到一個更新的SQL語句後,會同時更新同一列中的資料庫。第一:更新操作是並行的,整個操作的響應時間和更新一個資料庫的響應時間基本相同;第二:整個操作是在事務的環境下完成的,保證了多個資料庫中資料是一致的,實現了真正的冗餘。
3.中介軟體解析到一個更新資料庫結構的DDL語句,會把該語句同步到其他訪問層資料庫和所有的資料層資料庫中。這樣使用者就像在使用一個資料庫去維護表、索引、儲存過程等等,大大降低了使用者的管理成本,也降低了出錯的機率。這是Moebius For SQL Server 的亮點。

常見問題

虛擬化\超融合平臺下還有做Moebius的必要嗎?

虛擬化或者超融合雖然能夠保障可用性和資料安全,但本質上提供的是一個單資料庫伺服器。如果有在SQL Server層面的容災或者讀寫分離、負載均衡的需求,就是有必要的。

Moebius相容虛擬化\超融合平臺嗎?

相容,Moebius的節點可以是物理機,也可以是虛擬機器,或者是兩者的組合。

做了Moebius後還有必要做儲存雙活嗎?

如果儲存裝置只是為了資料庫伺服器提供的,那麼是沒有必要再做雙活的,因為Moebius的資料就是多份的,既能保障資料安全,又可以隨時驗證資料的一致性。可以讓每個Moebius節點各接一個獨立的儲存裝置,這樣既節省了雙活模組的成本,又提升了磁碟空間的利用率。

北京格瑞趨勢科技有限公司是聚焦於資料服務的高新技術企業,成立於2008年,創始團隊及核心技術人員來自微軟和雅虎。微軟資料平臺高階合作伙伴,衛寧健康資料平臺戰略合作伙伴。透過產品+服務雙輪驅動的業務模式,14年間累計服務4000+客戶,覆蓋網際網路、市政、交通、電信、醫療、教育、電力、製造業等各個領域。

相關文章