Moebius
Moebius
當今世界是一個高度依賴於計算機系統的世界,資料庫中所存儲的數據代表了企業對於客戶、訂單、供應商、員工等所積累的知識。但是多少年來SQL Server行業內一直以來都缺少負載均衡的產品或方案。這既是由於資料庫引擎的事務性,也是由於資料庫處於系統的核心位置。任何在應用程序與資料庫之間的中間件都可能引入單點故障點。
在任何組織內,IT員工都必須要對是否對資料庫層面進行負載均衡做出決策,如果答案是肯定的,則還需要考慮資料庫層面的負載均衡是否適合或滿足現有系統架構的需要。莫比斯(Moebius)是一款基於SQL Server的產品,可以為非常複雜系統的負載均衡提供多種選項,來提升資料庫系統的安全性、性能和可用性。
集群最開始並不是在資料庫系統上產生的,而是在應用伺服器上。在計算機的早期,由於大型計算機成本昂貴,就產生了由多個微型計算機組成的集群,在該類集群中,每一個節點上都運行各自的操作系統和應用,共同來為用戶提供服務,組建應用集群的目的是為了性能和可用性。
此時,資料庫層面還是單機運行,沒有對應的集群產品。
隨著應用伺服器集群技術的發展,由第三方廠商開始基於現有的商用資料庫推出了資料庫共享存儲的集群。集群之間通過共享存儲來實現高可用性,如圖所示。
圖1.
• 硬體資源的嚴重浪費,同一時間集群中只有一台伺服器活著,其他伺服器只能作為冗餘伺服器。
• 集群無法提升性能,因為只有一台伺服器可用
• 因此該類方案僅僅可以做到伺服器層面的高可用,無法帶來性能的提升,也無法解決存儲單點故障的問題。因此如果不搭配其他高可用或負載均衡的技術,存在的意義並不是很大。
• 另一類技術是Share-Disk中的雙活的技術,與單活技術不同的是,雙活的技術雖然也是共享磁碟,但集群中的所有節點都可以對外提供服務,典型的產品就是Oracle的RAC。RAC的技術性和購買成本都非常的高,因此需要水平比較高的人來運維繫統。RAC設計的初衷並不是為了性能,而是為了高可用和擴展性,如果應用程序不是針對RAC架構設計和開發的,則將應用程序遷移到RAC上由於block contention (block busy waits)可能會導致性能的急劇下降,並且節點越多性能下降越明顯。
Moebius
首先談談不可負載均衡的集群,在不可負載均衡的技術中,集群中的節點會被分為主節點和輔助節點,主節點向外提供服務,輔助節點作為熱備(二階段事務提交)或暖備(不需要保證事務同步),同時有可能使得輔助節點提供只讀的服務。使用這個架構的技術包括:SQL ServerAlwaysOn,SQL Server Mirror,Oracle Data Guard這種架構帶來的好處包括:
• 輔助節點數據和主節點保持同步或准同步,當搭配第三方仲裁后,可以實現自動的故障轉移,從而實現了高可用
• 輔助節點由於和主節點完全獨立,數據同步或准同步,因此主節點出現數據損壞后,可以從輔助節點恢複數據(自動或手動),從而保證了數據的安全性
• 由於Share-Nothing架構使用了本地存儲(或SAN),相較於Share-Disk架構在慢速網路時有非常大的性能優勢
• 當然,弊端也顯而易見,因為輔助節點無法對外提供服務或只能提供只讀服務,因此該類集群的弊端包括:
• 擴展能力非常有限
• 對性能沒有提升,因為涉及到各節點的數據同步,甚至帶來性能的下降
• 輔助節點如果可讀,雖然提升性能,但需要修改前端應用程序,對應用程序不透明
在Share-Nothing架構的基礎上,使得負載均衡架構成為可能。所謂負載均衡就是將對資料庫的負載分佈到集群中的多個節點上,在集群中的每一個節點都可以對外提供服務,從而達到更高的吞吐量,更好的資源利用率和更低的響應時間。前端通過代理進行調度。使用該類架構的技術包括:MySQL上的Amoeba,MySQL上的HA Proxy。
Moebius
該類負載均衡有一個共同點,就是前端需要一個單獨的網關進行調度,因此引入了單點故障點,網關處還需要做額外的高可用方案。該方案的好處包括:
• 由於每一個節點都可以對外提供服務,因此可以提升性能
• 擴展性得到提升,可以通過向集群添加節點直接進行Scale-Out擴充
莫比斯集群是一個為SQL Server用戶提供負載均衡、高可用、數據安全解決方案的產品。在基於前文提到的多機負載均衡的基礎之上,做了大幅改進。架構圖如圖所示。
Moebius
此外,莫比斯還有如下好處:
同步數據,保證數據一致性
數據實時複製是構建多機高可用及負載均衡,系統實時容災、備份所採用的一種核心技術。Moebius Core宿主在SQL Server 資料庫引擎中,監測資料庫內數據的變化並分析導致數據變化的原因,將變化的數據以最小的消耗同步到其它節點中,保證數據的實時一致性及事務的連續性。
快速發現故障節點並將其剝離
Moebius 集群通過“網路心跳”及“仲裁機制”可以實現自動故障監測,當偵測到集群中某節點發生故障時,會在最短的時間內發現並通過虛擬IP轉移技術自動將故障節點的業務轉移,同時將此節點剝離出集群。
監控SQL語句,透明地切分應用與資料庫
解析:解析應用程序傳遞的SQL語句,並作相應的優化及緩存。
調度:按照業務的需要將SQL語句調度到相應的伺服器上;在對SQL語句進行分發時採用多種負載均衡策略,可以實現SQL語句一級的負載均衡。
處理:按照業務的需要對SQL語句進行相應的處理,包括修改、替換SQL語句等等。