SQL Server中的高可用性概覽
自從SQL Server 2005以來,微軟已經提供了多種高可用性技術來減少當機時間和增加對業務資料的保護,而隨著SQL Server 2008,SQL Server 2008 R2,SQL Server 2012的不斷髮布,SQL Server中已經存在了滿足不同場景的多種高可用性技術。
在文章開始之前,我首先簡單概述一下以什麼來決定使用哪一種高可用性技術。
依靠什麼來決定使用哪一種高可用性技術?
很多企業都需要他們的全部或部分資料高可用,比如說線上購物網站,線上商品資料庫必7*24小時線上,否則在競爭激烈的市場環境下,當機時間就意味著流失客戶和收入。再比如說,一個依賴於SQL Server的呼叫中心,如果資料庫當機,則所有的呼叫員都只能坐在那裡回覆客戶“對不起,系統故障”,這也是很難接受的。
當然,在一個理想的世界中,所有的關鍵資料都會時刻線上,但在現實世界中,會存在各種各樣的原因導致資料庫不可用,由於無法預估災難出現的時間和形式,需要提前採取措施來預防各種突發情況,因此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的實現。一個早期比較著名的例子是某歐美的銀行系統,只考慮的RPO,系統裡只存在了完整備份和日誌備份,每3個月一次完整備份,每15分鐘一次日誌備份,當災難發生時,只能夠透過完整備份和日誌備份來恢復資料,因此雖然沒有資料丟失,但由於恢復資料花了整整兩天時間,造成銀行系統2天時間不可用,因此流失了大量客戶。另外一個相反的例子是國內某線上影片網站,使用SQL Server作為後端關聯式資料庫,前端使用了No-SQL,定期將No-SQL的資料匯入關聯式資料庫作為備份,當災難發生時最多允許丟失一天的資料,但是要保證高可用性。
預算 –RTO和RPO統稱為SLA(服務水平協議),設計高可用性策略時,要根據業務來衡量滿足何種程度的SLA,這要取決於預算以及衡量不同SLA在故障時所造成的損失。SLA並不是越高越好,而是要基於業務需求,通常來說,在有限的預算之下很難實現很高的SLA,並且即使透過複雜的架構實現較高的SLA,複雜的架構也意味著高運維成本,因此需要在預算範圍之內選擇合適的技術來滿足SLA。
因此,綜合來說,可以透過幾個接單的問題確定高可用性的大框架:
股東能夠接受的當機時間是多少?
管理人員能夠接受的當機時間是多少?
為高可用性方案提供的預算是多少?
當機導致的損失是每小時是多少錢?
冷備份、暖備份和熱備份
根據主機和備機之間同步資料的程度,備份可以分為三種情況,分別為冷備份、暖備份和熱備份。
冷備份:也就是所謂的備份,備用伺服器被配置用於接受主伺服器的資料,當出故障時,手動將資料還原到主資料庫,或是重新配置程式的連線字串或許可權來使得備份資料庫上線。
暖備份:主伺服器資料會不停的將日誌傳送到備用伺服器(間隔不定,可以是15分鐘,30分鐘,1分鐘等等),在這方式下,主伺服器到備份伺服器通常是非同步更新,所以不能保證主伺服器和備份伺服器資料一致。此外,該方案通常不會實現自動故障監測和故障轉移。
熱備份:主伺服器的資料自動在備份伺服器上進行同步,大多數情況下都會包含自動的故障監測和故障轉移,並且能夠保證主伺服器和備份伺服器的資料一致性。
隨著冷備份到暖備份到熱備份,成本會直線上升。
SQL Server中所支援的高可用特性
SQL Server中所支援的高可用性功能與版本息息相關,企業版支援所有的高可用性功能,這些功能包括:
l 故障轉移叢集
l 資料庫映象
l 事務日誌傳送
l 資料庫快照
l 高可用性升級
l 熱載入記憶體
l 線上索引操作
l 資料庫部分線上(只還原了主檔案組或主檔案組和額外的NDF檔案)
故障轉移叢集
故障轉移叢集為整個SQL Server例項提供高可用性支援,這意味著在叢集上某個節點的SQL Server例項發生了硬體錯誤、作業系統錯誤等會故障轉移到該叢集上的其它節點。透過多個伺服器(節點)共享一個或多個磁碟來實現高可用性,故障轉移叢集在網路中出現的方式就像單臺計算機一樣,但是具有高可用特性。值得注意的是,由於故障轉移叢集是基於共享磁碟,因此會存在磁碟單點故障,因此需要在磁碟層面部署SAN複製等額外的保護措施。最常見的故障轉移叢集是雙節點的故障轉移叢集,包括主主節點和主從節點。
事務日誌傳送
事務日誌傳送提供了資料庫級別的高可用性保護。日誌傳送可用來維護相應生產資料庫(稱為“主資料庫”)的一個或多個備用資料庫(稱為“輔助資料庫”)。發生故障轉移之前,必須透過手動應用全部未還原的日誌備份來完全更新輔助資料庫。日誌傳送具有支援多個備用資料庫的靈活性。如果需要多個備用資料庫,可以單獨使用日誌傳送或將其作為資料庫映象的補充。當這些解決方案一起使用時,當前資料庫映象配置的主體資料庫同時也是當前日誌傳送配置的主資料庫。
事務日誌傳送可用於做冷備份和暖備份的方式。
資料庫映象
資料庫映象實際上是個軟體解決方案,同樣提供了資料庫級別的保護,可提供幾乎是瞬時的故障轉移,以提高資料庫的可用性。資料庫映象可以用來維護相應生產資料庫(稱為“主體資料庫”)的單個備用資料庫(或“映象資料庫”)。
因為映象資料庫一直處於還原狀態,但並不會恢復資料庫,因此無法直接訪問映象資料庫。但是,為了用於報表等只讀的負載,可建立映象資料庫的資料庫快照來間接地使用映象資料庫。資料庫快照為客戶端提供了快照建立時對資料庫中資料的只讀訪問。每個資料庫映象配置都涉及包含主體資料庫的“主體伺服器”,並且還涉及包含映象資料庫的映象伺服器。映象伺服器不斷地使映象資料庫隨主體資料庫一起更新。
資料庫映象在高安全性模式下以同步操作執行,或在高效能模式下以非同步操作執行。在高效能模式下,事務不需要等待映象伺服器將日誌寫入磁碟便可提交,這樣可最大程度地提高效能。在高安全性模式下,已提交的事務將由夥伴雙方提交,但會延長事務滯後時間。資料庫映象的最簡單配置僅涉及主體伺服器和映象伺服器。在該配置中,如果主體伺服器丟失,則該映象伺服器可以用作備用伺服器,但可能會造成資料丟失。高安全性模式支援具有自動故障轉移功能的備用配置高安全性模式。這種配置涉及到稱為“見證伺服器”的第三方伺服器例項,它能夠使映象伺服器用作熱備份伺服器。從主體資料庫至映象資料庫的故障轉移通常要用幾秒鐘的時間。
資料庫映象可用於做暖備份和熱備份。
複製
複製嚴格來說並不算是一個為高可用性設計的功能,但的確可以被應用於高可用性。複製提供了資料庫物件級別的保護。複製使用的是釋出-訂閱模式,即由主伺服器(稱為釋出伺服器)向一個或多個輔助伺服器或訂閱伺服器釋出資料。複製可在這些伺服器間提供實時的可用性和可伸縮性。它支援篩選,以便為訂閱伺服器提供資料子集,同時還支援分割槽更新。訂閱伺服器處於聯機狀態,並且可用於報表或其他功能,而無需進行查詢恢復。SQL Server 提供四種複製型別:快照複製、事務複製、對等複製以及合併複製。
AlwaysOn可用性組
AlwaysOn可用性組是SQL Server 2012推出的新功能。同樣提供了資料庫級別的保護。它取資料庫映象和故障轉移叢集之長,使得業務上有關聯的資料庫作為一個可用性組共同故障轉移,該功能還擴充了資料庫映象只能1對1的限制,使得1個主副本可以對應最多4個輔助副本(在SQL Server 2014中,該限制被擴充到8個),其中2個輔助副本可以被作為熱備份和主副本實時同步,而另外兩個非同步輔助副本可以作為暖備份。此外,輔助副本還可以被配置為只讀,並可用於承擔備份的負載。
正因為如此,資料庫映象在SQL Server 2012中被標記為“過時”。
高可用性策略設計
在瞭解了高可用性基本的概念和SQL Server中提供的高可用性技術之後,我們再來看一下高可用性策略的設計。高可用性策略的規劃可以分為四個階段:
收集需求
決定高可用性策略的第一步無疑是收集業務需求來建立SLA。文中之前所述的RTO和RPO是最關鍵的部分,在此基礎之上為可用性需求建立切實可行的期望,並基於該期望建立切實可行的高可用性策略。
評估限制
評估限制不僅僅指的評估是SQL Server中不同的高可用性技術中的限制,還包括那些非技術的限制。如果只有幾萬元的預算,卻要做基於異地資料中心和SAN複製的高可用方案,那無疑是痴人說夢。另一個非技術限制是運維人員的水平,通常來說,複雜的架構意味著需要更高技能的運維人員。其它一些非技術限制包括資料中心的可用磁碟空間、電源供給和空調是否能滿足需要,以及實現該可用性策略所需要的時間。
技術限制則包括不同高可用性的功能與限制,不同SQL Server版本所支援的功能以及CPU個數以及記憶體大小等。強烈建議在實施高可用性策略之前,首先參閱微軟MSDN網站上不同SQL Server版本和功能的限制。
選擇技術
在收集完需求並評估限制之後,接下來就是選擇本文前面所述的技術或技術組合來滿足SLA的需求。如果所選技術無法滿足SLA,則可以很容易的報告出是由於什麼限制無法滿足SLA,從而可以申請缺少的資源或在SLA上做出妥協。
測試、驗證並文件化
在高可用性策略一開始實施的時候就需要經過嚴格的測試和驗證,從而確保當前的可用性策略能夠滿足SLA。但當高可用性策略上線之後,也要定期進行測試和驗證來確保當前的策略在資料增長、業務或需求變更的情況下依然可以滿足SLA。同時,要把可用性解決方案的配置、故障轉移的方法和災難恢復計劃同時文件化,以便於出現故障或是未來調整高可用性策略時有跡可循。
小結
本篇文章闡述了高可用性的基本概念、SLA的概念、SQL Server中所支援的不同種類的高可用性功能以及設計一個高可用性策略所需的步驟。值得注意的是,雖然本文僅僅講述了資料庫層面的高可用性,但高可用性不僅僅是DBA的事,還包括系統運維人員、網路管理人員、開發人員、管理人員等不同角色的共同協作,才能夠更好的滿足SLA。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3016/viewspace-2800081/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 雲中SQL Server高可用性最佳實踐SQLServer
- 維護SQL Server虛擬機器的高可用性NJSQLServer虛擬機
- 日誌傳送,SQL Server高可用性的重要舉措SQLServer
- [AlwaysOn] 建立SQL Server AlwaysOn高可用性組T-SQL語法SQLServer
- SQL Server 2005和Oracle高可用性對比SQLServerOracle
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:LISTENER子句SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:DATABASE子句SQLServerDatabase
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:例項SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:REPLICA ON子句SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:BASIC引數SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:安全性SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:AVAILABILITY GROUP ON子句SQLServerAI
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:DISTRIBUTED引數SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:ENDPOINT_URL子句SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:PRIMARY_ROLE子句SQLServer
- SQL Server 2016關係型資料庫概覽AZSQLServer資料庫
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:BACKUP_PRIORITY引數SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:CLUSTER_TYPE引數SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:DTC_SUPPORT引數SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:group_name引數SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:SECONDARY_ROLE子句SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:先決條件和限制SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:SESSION_TIMEOUT引數SQLServerSession
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:SEEDING_MODE引數SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:FAILOVER_MODE引數SQLServerAI
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:AVAILABILITY_MODE引數SQLServerAI
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:DB_FAILOVER引數SQLServerAI
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:AUTOMATED_BACKUP_PREFERENCE引數SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:HEALTH_CHECK_TIMEOUT引數SQLServer
- [AlwaysOn] 建立SQL Server高可用性組T-SQL語法:FAILURE_CONDITION_LEVEL引數SQLServerAI
- PLSQL Language Reference-PL/SQL概覽-PL/SQL的優點SQL
- "三高"Mysql - Mysql備份概覽MySql
- Apache-Flink深度解析-SQL概覽ApacheSQL
- SQL 效能分析器(SPA)工具概覽SQL
- PLSQL Language Reference-PL/SQL概覽-PL/SQL架構SQL架構
- 概覽
- PLSQL Language Reference-PL/SQL概覽-PL/SQL的主要功能SQL
- SQL Server AlwaysOn可用性副本會話期間的可能故障SQLServer會話