在眾多主流關系型數據庫中Oracle的集中型(Rac), Mysql 的分布型(Repl)
前者往往依賴于主流廠商的硬件,縱向擴展負載CPU,面對IO的壓力只能水平垂直拆分業務.
后者未被Oracle收購前版本在面對存儲單點故障時M_M_S的結構又不那么靈活.而Mssql屬于2者中間.在面對不同業務需求時候 Mssql同時提供Nothing Share和 Everything Share 模式.
所謂的Nothing Share 即: 橫向擴張,讀寫分離.用多臺便宜的Server + Sas盤來替代高端服務器和存儲.而面對服務器級別的故障時Mssql同時提供了故障轉移群集.群集的個數跟Windows 版本有關.生產環境中往往考慮到成本采用AA群集或者 2+1群集.
Windows Server 2003 最多支持 8 個故障轉移群集節點
Windows Server 2008 最多支持 16 個故障轉移群集節點
(圖:2) Everything Share (AA Cluster)
MSSQL 擴展性
OLTP 講究的是快進快出.因此在面對千萬乃至億級的的數據量.水平拆表成了上上之選
同時通過Replication 分發到多臺便宜的Server + Sas盤來做讀.
相對于Mysql的主機Repl,Mssql可以采用遠程分發機來減少Repl本身帶來的性能壓力.
同時Mssql從2005 開始支持 樂觀事務隔離,配合遠程分發機,同時對分發機做AAcluster.
從主機性能壓力和高安全都有完善的保障. 前端訪問通過F5分配到多臺SUB上,一旦出現SUB故障或者延遲較高時.可以從F5的虛擬ip池中把故障服務器從中Offline.等恢復故障后在Online.
分布式的擴展不僅能負載CPU同時也能對IO負載起到個很好的效果. (圖:3)是Mssql Repl 配合水平拆分的擴展.
(圖:3) MSSQ基于Repl和水平拆分的擴展性
MSSQL的高可用性
Mssql用Cluster 來解決服務器級別高可用.通過存儲做Raid10 和Mssql Mirror來保障
單點存儲的故障.
Mssql Cluster 把 OS的 IP和 MS的 IP 分開.一旦出現服務器故障.群集管理器自動把出現故障的節點的MSSQL服務轉移到另一正常節點上.同時Mssql的IP 不變,因此不會對前端web服務器的寫入有任何影響.相對于Mysql的Master_Master 模式不用擔心前端數據寫入的丟失和故障轉移后的Repl的延遲.同時針對于存儲級單點故障 Mssql還有Mirror來解決.
一般正常情況下存儲做 Raid10后損壞的概率相對較小.但也不排除異常情況.比如存儲上的控制器異常導致宕機. 一般中端存儲的Raid控制器都是2個.當然也不排除某些廠商高端3par 多控制器.最近影響面大的一次宕機非屬于藝龍了.
(圖4:Mssql AAcluster故障轉移)
(圖5:單點Storage故障轉移)
出處:http://xwj1985.cnblogs.com/