一 SQLServer高可用叢集相關概念
1.1 Windows故障轉移群集
Windows故障轉移群集是由多個伺服器組成的共同提供某高可用服務,該服務用於防止單臺伺服器故障導致服務失效。故障轉移群集是一種高可用性的基礎結構層,由多臺計算機組成,每臺計算機相當於一個冗餘節點,整個群集系統允許某部分節點掉線、故障或損壞而不影響整個系統的正常運作。一臺伺服器接管發生故障的伺服器的過程通常稱為"故障轉移"。
1.2 叢集節點
執行著相同Microsoft 群集服務 (MSCS)的一組(相關)伺服器。每個伺服器也被稱為“節點”(Node),每個節點上都執行著Microsoft 群集服務 (MSCS)。這些節點有相同的軟硬體配置,並且具有共享的磁碟(Shared Array)。
1.3 共享的磁碟(Shared Array)
叢集中的一塊邏輯磁碟,或一塊磁碟上的一個mountpoint,對於一個SQL Server群集例項,存放著資料庫的所有資料檔案和事務日誌檔案(MDF,NDF和LDF),SQL Server和SQLServer Agent的日誌檔案(ERRORLOG),以及一些其他的檔案和目錄,必須設定共享磁碟和SQLServer資源在一個資源組裡,這樣就保證了執行SQL Server服務的節點一定能訪問到共享磁碟裡的資料。
事實上SQL Server資源和共享磁碟資源是具有“依賴”關係的。也就是說在磁碟資源無法在某節點正常執行的時候,SQL Server資源在該節點也無法上線執行。
注意:一個共享磁碟資源只能屬於一個SQLServer例項(事實上,在安裝SQL Server群集例項時是SQLServer安裝在一個已經被其他SQL Server群集例項使用的共享磁碟上的)。但是一個SQLServer群集例項可以使用多個共享磁碟。
1.4 私有網路和公共網路
"私有網路"(private network),每個節點上有一塊私有網路卡,這些網路卡通過網路互相連線組成了私有網路。節點之間通過私有網路互相傳送訊號來感知彼此是否已經工作正常,這類訊號被稱為“心跳線”。一旦某伺服器因為某種異常而無法回應訊號,此時剩餘的節點就認為這個節點已經“死了”,於是就把這個節點排除出當前群集。
"公用網路"(public network),用來被群集外部的資源所使用的一個網路。每個節點上有一塊公共網路卡,外部資源通過公用網路卡來訪問這個節點。
注意:私有網路卡和公共網路卡在物理上可以是一塊網路卡,這種時候群集就通過一個網路來完成私有網路和公共網路的職責,這個網路被稱其為混合網路(mixednetwork)。
1.5 SQLServer網路名和SQL Server IP地址
SQL Server群集並不使用Windows群集的虛擬網路名和虛擬IP地址來作為應用程式訪問它的介面。在SQLServer的資源組裡有該SQL Server例項自己專用的虛擬網路名和IP地址這兩個資源,它們提供了應用程式訪問SQL Server時使用的機器名或者IP地址。事實上,無論是Windows群集還是SQL Server群集的虛擬機器器名/IP,它們的資源型別都是相同的,只是它們一個服務於Windows虛擬伺服器;一個服務於SQL Server群集例項。
1.6 SQL Server故障轉移群集
所謂的SQL Server故障轉移群集,就是將SQLServer部署在Windows群集中的多個節點上,然後組成一個虛擬的SQLServer例項。這樣SQL Server 例項依就像執行在單臺計算機一樣顯示在網路中。不過它具有一種功能,即在當前執行SQLServer例項的節點不可用時,可以在節點之間進行故障轉移,把SQL Server切換到工作正常的節點上去繼續為應用程式提供服務。
實現這個功能,需要將SQL Server安裝成群集模式,而不是單機模式。安裝的具體步驟,請參見本書的第一章。安裝成功以後,您就可以看到本節所提到的各個管理介面了。
1.7 組員組和活躍節點
“資源組”就是由一個或者多個資源組成的組。所有的故障轉移都是以資源組為單位發生的,在任何時候,每個資源組都僅屬於群集中的一個節點,這個節點就是該資源組的“活躍節點”。由於資源組裡的資源是一起切換的,所以這些資源應該是彼此關聯,並且協同工作來提供某項服務。使用者應當儘量避免把無關的資源加入到同一個資源組裡。可以簡單地把資源組想象成在虛擬伺服器上執行的一個個獨立的應用程式或者服務,而群集技術為這些應用程式或者服務提供了高可用的特性。
二 高可用策略
當前SQL Server提供了多種高可用性技術,主要包括:叢集、複製、映象、日誌傳送、AlwaysOn可用性組以及其它諸如檔案組備份還原、線上重建索引等單例項的高可用性技術。需要基於業務和技術綜合考慮具體所採用的高可用方案,因為沒有一項單獨的技術可以實現所有的功能。
通常在設計高可用性策略時應該首先考慮下述因素:
RTO(Recovery Time Objective):恢復時間目標,即意味著允許多少當機時間,通常用幾個9表示,比如說99.999%的可用性意味著每年的當機時間不超過5分鐘、99.99%的可用性意味著每年的當機時間不超過52.5分鐘、99.9%的可用性意味著每年的當機時間不超過8.75小時。
提示:通常RTO的計算方法需要考慮系統是24*365,還是僅僅是上午6點到下午9點等。同時需要考慮是否維護視窗的時間在算在當機時間之內,如果允許在維護視窗時間進行資料庫維護和打補丁,則更容易實現更高的可用性。
RPO(Recovery Point Objective):恢復點目標,即意味著允許多少資料損失。通常只要做好備份,可以比較容易的實現零資料損失。但當災難發生時,取決於資料庫損壞的程度,從備份恢復資料所需要的時間會導致資料庫不可用,這會影響RTO的實現。
三 常見備份方式
根據主機和備機之間同步資料的程度,備份可以分為三種情況,分別為冷備份、暖備份和熱備份。
3.1 冷備份
冷備份也就是所謂的備份,備用伺服器被配置用於接受主伺服器的資料,當出故障時,手動將資料還原到主資料庫,或是重新配置程式的連線字串或許可權來使得備份資料庫上線。
3.2 暖備份
暖備份也就是主伺服器資料會不停的將日誌傳送到備用伺服器(間隔不定,可以是15分鐘,30分鐘,1分鐘等等),在這方式下,主伺服器到備份伺服器通常是非同步更新,所以不能保證主伺服器和備份伺服器資料一致。此外,該方案通常不會實現自動故障監測和故障轉移。
3.3 熱備份
熱備份也就是主伺服器的資料自動在備份伺服器上進行同步,大多數情況下都會包含自動的故障監測和故障轉移,並且能夠保證主伺服器和備份伺服器的資料一致性。
提示:隨著冷備份到暖備份到熱備份,成本會直線上升。
四 SQL Server高可用特性
4.1 特性簡介
SQL Server中所支援的高可用性功能與版本息息相關,企業版支援所有的高可用性功能,這些功能包括:
- 故障轉移叢集
- 資料庫映象
- 事務日誌傳送
- 資料庫快照
- 高可用性升級
- 熱載入記憶體
- 線上索引操作
- 資料庫部分線上(只還原了主檔案組或主檔案組和額外的NDF檔案)
具體何種版本支援哪些高可用特性,請參閱:http://msdn.microsoft.com/zh-cn/library/cc645993.aspx,值得注意的是免費的Express版本可以作為資料庫映象的見證伺服器,從而節省了成本。
4.2 故障轉移叢集
故障轉移叢集為整個SQL Server例項提供高可用性支援,這意味著在叢集上某個節點的SQL Server例項發生了硬體錯誤、作業系統錯誤等會故障轉移到該叢集上的其它節點。通過多個伺服器(節點)共享一個或多個磁碟來實現高可用性,故障轉移叢集在網路中出現的方式就像單臺計算機一樣,但是具有高可用特性。
注意:由於故障轉移叢集是基於共享磁碟,因此會存在磁碟單點故障,因此需要在磁碟層面部署SAN複製等額外的保護措施。最常見的故障轉移叢集是雙節點的故障轉移叢集,包括主主節點和主從節點。
缺點:輔助節點不可用,資料單點。
4.3 事務日誌傳送
事務日誌傳送提供了資料庫級別的高可用性保護。日誌傳送可用來維護相應生產資料庫(稱為“主資料庫”)的一個或多個備用資料庫(稱為“輔助資料庫”)。發生故障轉移之前,必須通過手動應用全部未還原的日誌備份來完全更新輔助資料庫。日誌傳送具有支援多個備用資料庫的靈活性。如果需要多個備用資料庫,可以單獨使用日誌傳送或將其作為資料庫映象的補充。當這些解決方案一起使用時,當前資料庫映象配置的主體資料庫同時也是當前日誌傳送配置的主資料庫。
事務日誌傳送可用於做冷備份和暖備份的方式。
缺點:日誌還原時不能讀取資料,嚴格意義上不屬於熱備份。
4.4 資料庫映象
資料庫映象實際上是個軟體解決方案,同樣提供了資料庫級別的保護,可提供幾乎是瞬時的故障轉移,以提高資料庫的可用性。資料庫映象可以用來維護相應生產資料庫(稱為“主體資料庫”)的單個備用資料庫(或“映象資料庫”)。
因為映象資料庫一直處於還原狀態,但並不會恢復資料庫,因此無法直接訪問映象資料庫。但是,為了用於報表等只讀的負載,可建立映象資料庫的資料庫快照來間接地使用映象資料庫。資料庫快照為客戶端提供了快照建立時對資料庫中資料的只讀訪問。每個資料庫映象配置都涉及包含主體資料庫的“主體伺服器”,並且還涉及包含映象資料庫的映象伺服器。映象伺服器不斷地使映象資料庫隨主體資料庫一起更新。
資料庫映象在高安全性模式下以同步操作執行,或在高效能模式下以非同步操作執行。在高效能模式下,事務不需要等待映象伺服器將日誌寫入磁碟便可提交,這樣可最大程度地提高效能。在高安全性模式下,已提交的事務將由夥伴雙方提交,但會延長事務滯後時間。資料庫映象的最簡單配置僅涉及主體伺服器和映象伺服器。在該配置中,如果主體伺服器丟失,則該映象伺服器可以用作備用伺服器,但可能會造成資料丟失。高安全性模式支援具有自動故障轉移功能的備用配置高安全性模式。這種配置涉及到稱為“見證伺服器”的第三方伺服器例項,它能夠使映象伺服器用作熱備份伺服器。從主體資料庫至映象資料庫的故障轉移通常要用幾秒鐘的時間。
資料庫映象可用於做暖備份和熱備份。
缺點:最多隻支援兩個節點,輔助節點可用性差。
4.5 複製
複製嚴格來說並不算是一個為高可用性設計的功能,但的確可以被應用於高可用性。複製提供了資料庫物件級別的保護。複製使用的是釋出-訂閱模式,即由主伺服器(稱為釋出伺服器)向一個或多個輔助伺服器或訂閱伺服器釋出資料。複製可在這些伺服器間提供實時的可用性和可伸縮性。它支援篩選,以便為訂閱伺服器提供資料子集,同時還支援分割槽更新。訂閱伺服器處於聯機狀態,並且可用於報表或其他功能,而無需進行查詢恢復。SQL Server 提供四種複製型別:快照複製、事務複製、對等複製以及合併複製。
缺點:非高可用功能,常用於讀寫分離,維護成本較高。
4.6 AlwaysOn可用性組
AlwaysOn可用性組是SQL Server 2012推出的新功能。同樣提供了資料庫級別的保護。它取資料庫映象和故障轉移叢集之長,使得業務上有關聯的資料庫作為一個可用性組共同故障轉移,該功能還擴充了資料庫映象只能1對1的限制,使得1個主副本可以對應最多4個輔助副本(在SQL Server 2014中,該限制被擴充到8個),其中2個輔助副本可以被作為熱備份和主副本實時同步,而另外兩個非同步輔助副本可以作為暖備份。此外,輔助副本還可以被配置為只讀,並可用於承擔備份的負載。
正因為如此,資料庫映象在SQL Server 2012中被標記為“過時”。
優點:微軟較綜合的方案,可迴避故障轉移群集、映象、複製、日誌傳送幾種技術的缺點。
缺點:SQL Server2012版本才能使用,無法自動實現負載均衡,需要自己配置讀或寫字串。
4.7 Moebius負載均衡叢集
Moebius for SQL Server 是格瑞趨勢專門針對Microsoft SQL Server開發的綜合叢集平臺,基於SQL Server的核心實現,核心程式宿主在SQL Server的核心之中,該叢集可實現資料庫的負載均衡及橫向擴充套件;保證資料庫的可用性;保證多份冗餘資料的實時同步。
Moebius叢集,可以實現SQL語句一級的負載均衡;同時將自動故障監測、虛擬IP及失敗轉移技術融入其中,滿足企業對高可用系統建設的要求;資料複製時,採用了同步和非同步兩種複製模式,可實現資料在多臺伺服器間實時同步,保證事務的一致性和完整性,支援遠距離複製;Moebius叢集具有頻寬佔用少、同步效率高、資料實時性高、資料一致性保障好的特點。
優點:第三方較綜合的方案,可迴避故障轉移群集、映象、複製、日誌傳送幾種技術的缺點。
缺點:大批量寫入操作(類似採集系統)資料同步會有效能消耗。
參考:https://blog.csdn.net/z_cloud_for_sql/article/details/58042356
https://blog.csdn.net/kk185800961/article/details/72831081