AlwaysOn 2016 新特性和提升
AlwaysOn 2016 新特性和提升
AlwaysOn可用性組作為SQL Server 2012的新特性被引入,它增強(qiáng)了數(shù)據(jù)庫(kù)鏡像和故障轉(zhuǎn)移集群技術(shù),提供了高可用和災(zāi)難恢復(fù)。
在SQL Server 2016中AlwaysOn有些特性的增強(qiáng)要求運(yùn)行在Windows Server 2016上。然而,如果你仍然運(yùn)行在Windows Server 2012 R2上,仍然有很多提升是可用的。
AlwaysOn 2016一些新特性和增強(qiáng):
l 支持更多故障轉(zhuǎn)移目標(biāo)
l 更好的日志傳輸性能
l 可讀副本的負(fù)載均衡
l 支持DTC
l 數(shù)據(jù)庫(kù)級(jí)別的健康監(jiān)控
l 支持組管理的服務(wù)賬號(hào)
l 基本可用性組
l 無域可用性組
l 分布式可用性組
l 支持加密數(shù)據(jù)庫(kù)
l 支持SSIS目錄
l BI增強(qiáng)
支持更多故障轉(zhuǎn)移目標(biāo)
在AlwaysOn 2012和2014,允許最多只能配置2個(gè)副本作為自動(dòng)故障轉(zhuǎn)移副本(包括當(dāng)前主副本在內(nèi)),2016允許配置3個(gè)。
自動(dòng)故障轉(zhuǎn)移通常用于支持高可用,在故障轉(zhuǎn)移中同步數(shù)據(jù)流接近零數(shù)據(jù)丟失。
更好的日志傳輸性能
隨著高速硬件SSD的普遍使用,提供了更大的吞吐量,這對(duì)于寫事務(wù)到輔助副本是很重要的。因此,微軟更新了AlwaysOn的數(shù)據(jù)同步過程,簡(jiǎn)化了管道以便有更好的吞吐量和CPU上的更少壓力。性能瓶頸大多數(shù)可能發(fā)生在日志捕獲(Log Capture)和重做(Redo)步驟。之前,日志捕獲和重做步驟使用單線程處理日志,而現(xiàn)在這些步驟使用多線程并行運(yùn)行,極大提升了性能。
數(shù)據(jù)同步描述如下:
Transaction Occurs –> Log Flush –> Log Capture –> Send –> Log Received –> Log Cached –> Log Hardened –> Acknowledgement Sent –> Redo
可讀副本的負(fù)載均衡
AlwaysOn一個(gè)很棒的特性是能夠使用輔助副本用于只讀操作。在AlwaysOn 2016之前的版本,監(jiān)聽器會(huì)定向只讀請(qǐng)求到第一個(gè)可用副本,即便你可能有多個(gè)輔助副本,并且你可能設(shè)置路由表優(yōu)先將度請(qǐng)求定向到副本3或副本4,而不是副本2。現(xiàn)在AlwaysOn 2016的可讀副本以輪詢的形式暴露給監(jiān)聽器。
1.配置輔助副本的只讀訪問
ALTER?AVAILABILITY?GROUP?[ag] MODIFY?REPLICA?ON?N'SQL16N2'?WITH?(SECONDARY_ROLE(ALLOW_CONNECTIONS?=?READ_ONLY)) GO ALTER?AVAILABILITY?GROUP?[ag] MODIFY?REPLICA?ON?N'SQL16N3'?WITH?(SECONDARY_ROLE(ALLOW_CONNECTIONS?=?READ_ONLY)) GO2.配置只讀路由URL
ALTER?AVAILABILITY?GROUP?ag?MODIFY?REPLICA?ON?N'SQL16N2'?WITH?(SECONDARY_ROLE?(READ_ONLY_ROUTING_URL?=?N'TCP://SQL16N2:1433')); GO ALTER?AVAILABILITY?GROUP?ag?MODIFY?REPLICA?ON?N'SQL16N3'?WITH?(SECONDARY_ROLE?(READ_ONLY_ROUTING_URL?=?N'TCP://SQL16N3:1433')); GO3.SQL Server 2016在只讀路由列表中引入了負(fù)載均衡列表
當(dāng)SQL16N1為主副本角色時(shí),創(chuàng)建只讀路由列表:
ALTER?AVAILABILITY?GROUP?ag?MODIFY?REPLICA?ON?N'SQL16N1'?WITH?(PRIMARY_ROLE?(READ_ONLY_ROUTING_LIST=(('SQL16N3',?'SQL16N2'),?'SQL16N1')));以上路由列表表示在SQL16N3和SQL16N2之間負(fù)載均衡只讀連接。我們有兩個(gè)嵌入列表:
List 1: 'SQL16N3', 'SQL16N2'
List 2: 'SQL16N1'
按如下方式工作:
1. 路由到第一個(gè)列表中的副本
SQL16N3和SQL16N2對(duì)只讀連接是可訪問的。第一個(gè)只讀連接被路由到SQL16N3,第二個(gè)只讀連接被路由到SQL16N2,第三個(gè)只讀連接被路由到SQL16N3,第四個(gè)只讀連接被路由到SQL16N2,等等,在第一個(gè)列表的兩個(gè)副本之間使用一個(gè)只讀連接的輪詢分發(fā)。
2. 如果任一副本不可用了,路由將繼續(xù)在第一個(gè)列表的副本中
如果SQL16N3或者SQL16N2對(duì)于只讀連接變?yōu)椴豢稍L問,那么只讀連接將只被路由到第一個(gè)列表的可訪問只讀副本。例如,如果SQL16N3不是synchronized狀態(tài),或者ALLOW_CONNECTIONS被設(shè)為NO,那么所有的只讀連接將會(huì)被路由到SQL16N2。只要只讀連接的其中一個(gè)服務(wù)器可用,那么只讀連接就不會(huì)被路由到SQL16N1。
3. 如果第一個(gè)列表中的所有副本都不可訪問,將會(huì)路由到下一個(gè)列表
對(duì)于只讀連接,如果SQL16N3和SQL16N2變?yōu)椴豢稍L問,那么所有的只讀連接將只會(huì)被路由到下一個(gè)列表的副本,這里就是SQL16N1。
4. 如果第一個(gè)列表中的任一副本可用,將會(huì)恢復(fù)路由到第一個(gè)列表
因?yàn)閷?duì)于只讀連接,可訪問的第一個(gè)列表中的輔助副本有更高的優(yōu)先級(jí),后面的只讀連接將會(huì)恰當(dāng)?shù)倪B接到他們。
此外配置可用性組路由列表,你也必須確保客戶端的應(yīng)用連接串當(dāng)連接到AG監(jiān)聽器時(shí)增加ApplicationIntent參數(shù),值為ReadOnly。如果在客戶端應(yīng)用連接串中沒有設(shè)置,那這個(gè)連接將自動(dòng)定向到主副本。以下是只讀連接串的示例:
Server=tcp:AGListener,1433; Database=AdventureWorks;IntegratedSecurity=SSPI; ApplicationIntent=ReadOnly
也最好不要在相同的負(fù)載均衡組中混合同步和異步副本。
支持DTC
注:只有運(yùn)行在Windows Server 2016或者升級(jí)了KB3090973補(bǔ)丁的Windows Server 2012 R2上
如果你的客戶端應(yīng)用程序需要執(zhí)行跨多個(gè)實(shí)例的事務(wù),那么就需要分布式事務(wù)協(xié)調(diào)器(DTC)。DTC是操作系統(tǒng)的一部分,當(dāng)你的數(shù)據(jù)庫(kù)引擎執(zhí)行跨多個(gè)實(shí)例的事務(wù)時(shí),用于確保一致性。
USE?AdventureWorks2012; GO BEGIN?DISTRIBUTED?TRANSACTION; --?your?tsql?statement?here DELETE?FROM?AdventureWorks2012.HumanResources.JobCandidate WHERE?JobCandidateID?=?13; GO COMMIT?TRANSACTION; GO你的應(yīng)用程序不僅可以在多個(gè)SQL Server實(shí)例間執(zhí)行事務(wù),也可以在其他兼容DTC服務(wù)器中,像WebSphere或Oracle。
用于 AlwaysOn 可用性組和數(shù)據(jù)庫(kù)鏡像的跨數(shù)據(jù)庫(kù)事務(wù)和分布式事務(wù)。
https://msdn.microsoft.com/en-us/library/mt748186.aspx https://blogs.technet.microsoft.com/dataplatform/2016/01/25/sql-server-2016-dtc-support-in-availability-groups/
https://docs.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/transactions-always-on-availability-and-database-mirroring?view=sql-server-2017
為了能在AlwaysOn 2016中執(zhí)行分布式事務(wù),可用性組創(chuàng)建語(yǔ)句CREATE AVAILABILITY GROUP帶有WITH DTC_SUPPORT = PER_DB從句。
CREATE?AVAILABILITY?GROUP?AGSQL2016 WITH?(DTC_SUPPORT?=?PER_DB) FOR?DATABASE?[Database1,?Database2,?Database3] REPLICA?ON 'SQLSRVTST1'?WITH?—?substitute?node?name ( ENDPOINT_URL?=?'TCP://SQLSRVTST1.<domain>:7022', AVAILABILITY_MODE?=?SYNCHRONOUS_COMMIT, FAILOVER_MODE?=?AUTOMATIC ), 'SQLSRVTST2'?WITH?—?substitute?node?name ( ENDPOINT_URL?=?'TCP://SQLSRVTST2.<domain>:7022', AVAILABILITY_MODE?=?SYNCHRONOUS_COMMIT, FAILOVER_MODE?=?AUTOMATIC ); GO數(shù)據(jù)庫(kù)級(jí)別的健康監(jiān)控
在之前的AlwaysOn 2012和2014中,如果實(shí)例健康出現(xiàn)問題,將觸發(fā)故障轉(zhuǎn)移。如果有一個(gè)數(shù)據(jù)庫(kù)有問題,只要實(shí)例OK,可用性組就不會(huì)故障轉(zhuǎn)移。因此,如果你有一個(gè)數(shù)據(jù)庫(kù)掉線、異常或損壞,也不會(huì)觸發(fā)故障轉(zhuǎn)移。
在AlwaysOn 2016中,不論是一個(gè)實(shí)例有問題,還是一個(gè)或多個(gè)數(shù)據(jù)庫(kù)有問題,都會(huì)發(fā)生故障轉(zhuǎn)移。然而,這不是默認(rèn)設(shè)置。在創(chuàng)建可用組配置向?qū)?#xff0c;你可以選擇“Database Level Health Detection”復(fù)選框來指定。對(duì)應(yīng)的創(chuàng)建可用性組的參數(shù)為DB_FAILOVER = ON
對(duì)于什么情況下觸發(fā)數(shù)據(jù)庫(kù)故障轉(zhuǎn)移,你也可以調(diào)整FailureConditionLevel屬性設(shè)置。根據(jù)需要調(diào)整默認(rèn)值。可以參考:https://msdn.microsoft.com/en-us/library/ff878667.aspx
支持組管理的服務(wù)賬號(hào)
在SQL Server 2012,微軟添加了組管理的服務(wù)賬號(hào)增強(qiáng),以便服務(wù)賬號(hào)密碼可以更容易管理。你現(xiàn)在可以為你的SQL Server實(shí)例創(chuàng)建一個(gè)獨(dú)立的服務(wù)賬號(hào),在AD中管理密碼、分配代理權(quán)限給每個(gè)服務(wù)器。這個(gè)特性對(duì)AlwaysOn AG是有用的,因?yàn)槊艽a和訪問特定資源像共享文件的權(quán)限,可以通過一個(gè)賬號(hào)管理,而不是每個(gè)實(shí)例獨(dú)立配置。在AlwaysOn AG中使用組管理的服務(wù)賬號(hào)比使用通常的域用戶賬號(hào)更加安全。
參考:
https://docs.microsoft.com/en-us/windows-server/security/group-managed-service-accounts/group-managed-service-accounts-overview
https://blogs.msdn.microsoft.com/markweberblog/2016/05/25/group-managed-service-accounts-gmsa-and-sql-server-2016/
基本可用性組
AlwaysOn基本可用性組在SQL Server 2016標(biāo)準(zhǔn)版中可用。功能與數(shù)據(jù)庫(kù)鏡像一樣,而數(shù)據(jù)庫(kù)鏡像已經(jīng)被廢棄,會(huì)在將來的版本中被移除。基本可用性組提供了單個(gè)數(shù)據(jù)庫(kù)的故障轉(zhuǎn)移,在組內(nèi)只可以有兩個(gè)副本,數(shù)據(jù)同步可以是同步或異步模式,在輔助副本不提供只讀訪問和備份支持。創(chuàng)建基本可用性組,可以使用CREATE
AVAILABILITY?GROUP語(yǔ)句帶有WITH?BASIC從句。 CREATE?AVAILABILITY?GROUP?BAGSQL2016 WITH?(AUTOMATED_BACKUP_PREFERENCE?=?PRIMARY, BASIC, DB_FAILOVER?=?OFF, DTC_SUPPORT?=?NONE) FOR?DATABASE?[Database1,?Database2,?Database3] REPLICA?ON 'SQLSRVTST1'?WITH?--?substitute?node?name ( ENDPOINT_URL?=?‘TCP://SQLSRVTST1.<domain>.com:5022’, FAILOVER_MODE?=?AUTOMATIC, AVAILABILITY_MODE?=?SYNCHRONOUS_COMMIT, SECONDARY_ROLE?(ALLOW_CONNECTIONS?=?NO) ), 'SQLSRVTST2'?WITH?--?substitute?node?name ( ENDPOINT_URL?=?‘TCP://SQLSRVTST2.<domain>.com:5022’, FAILOVER_MODE?=?AUTOMATIC, AVAILABILITY_MODE?=?SYNCHRONOUS_COMMIT, SECONDARY_ROLE?(ALLOW_CONNECTIONS?=?NO) ) GO參考:
https://blogs.technet.microsoft.com/msftpietervanhove/2017/03/14/top-5-questions-about-basic-availability-groups/
無域可用性組
注:只可運(yùn)行在Windows Server 2016上
大多數(shù)公司運(yùn)行在單一域環(huán)境,而有些公司運(yùn)行在多個(gè)域環(huán)境,可以部署跨多個(gè)域的可用性組,以便多臺(tái)服務(wù)器可以作為DR副本。而有些組織根本沒有運(yùn)行在域環(huán)境。
Windows Server 2016中,WSFC不需要集群節(jié)點(diǎn)在相同的域,或者根本不需要域(可以在工作組)。SQL Server 2016現(xiàn)在可以在以下環(huán)境部署AlwaysOn可用性組:
l 所有節(jié)點(diǎn)在單一域
l 節(jié)點(diǎn)在多個(gè)完全信任的域
l 節(jié)點(diǎn)在多個(gè)不信任的域
l 節(jié)點(diǎn)不在域中
通過去掉集群的域約束,提升了靈活性。參考:https://blogs.msdn.microsoft.com/clustering/2015/08/17/workgroup-and-multi-domain-clusters-in-windows-server-2016/
分布式可用性組
分布式可用性組,可將AlwaysOn AG跨兩個(gè)不同的WSFC,來擴(kuò)展AG。
分布式 AG 也是另一種遷移到新配置或升級(jí) SQL Server 的方法。 因?yàn)榉植际?AG 在不同體系結(jié)構(gòu)上支持不同的基礎(chǔ) AG,例如,可以從在 Windows Server 2012 R2 上運(yùn)行的 SQL Server 2016 更改為在 Windows Sever 2016 上運(yùn)行的 SQL Server 2017。
參考:
https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/distributed-availability-groups
支持加密數(shù)據(jù)庫(kù)
在之前版本AlwaysOn允許加密數(shù)據(jù)庫(kù),然而他們不能通過新建可用性組添加,并且如果切換到輔助副本他們不能被訪問。在SQL Server 2016,可以通過向?qū)砑蛹用軘?shù)據(jù)庫(kù),并且在故障轉(zhuǎn)移后可以訪問。這是因?yàn)?#xff0c;在創(chuàng)建可用性組時(shí),向?qū)?duì)于每個(gè)副本執(zhí)行了sp_control_dbmasterkey_password,并且使用每個(gè)實(shí)例的數(shù)據(jù)庫(kù)主秘鑰創(chuàng)建了憑據(jù)。在故障轉(zhuǎn)移后SQL Server會(huì)搜索正確的憑據(jù),知道可以解密數(shù)據(jù)庫(kù)主秘鑰。
關(guān)于添加加密數(shù)據(jù)庫(kù)到AlwaysOn可用性組有些限制。參考:https://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/encrypted-databases-with-always-on-availability-groups-sql-server?view=sql-server-2017
支持SSIS目錄
在SQL Server 2016,你可以像其它數(shù)據(jù)庫(kù)一樣,為了增強(qiáng)高可用和災(zāi)難恢復(fù),添加SSIS目錄(SSISDB)和它的內(nèi)容(項(xiàng)目、包等)到AlwaysOn可用性組。
對(duì)于添加SSISDB到AlwaysOn可用性組有些特定的先決條件和配置,參考:https://docs.microsoft.com/en-us/sql/integration-services/catalog/ssis-catalog?view=sql-server-2017#always-on-for-ssis-catalog-ssisdb
BI增強(qiáng)
使用AlwaysOn可用性組,數(shù)據(jù)庫(kù)倉(cāng)庫(kù)負(fù)載指向一個(gè)或者多個(gè)可讀輔助副本,而主副本用于支持關(guān)鍵業(yè)務(wù)應(yīng)用。報(bào)表和數(shù)據(jù)分析是資源密集型應(yīng)用,因此負(fù)載指向非生產(chǎn)服務(wù)器可以提高整體性能。另一個(gè)增強(qiáng)點(diǎn)是,微軟優(yōu)化了數(shù)據(jù)同步進(jìn)程,在數(shù)據(jù)倉(cāng)庫(kù)數(shù)據(jù)同步延時(shí)非常低,以致近實(shí)時(shí)分析成為現(xiàn)實(shí)。
結(jié)論
最新版的AlwaysOn可用性組提升了功能性、可擴(kuò)展性、可管理性,并在高可用和災(zāi)難恢復(fù)上更加健壯。
總結(jié)
以上是生活随笔為你收集整理的AlwaysOn 2016 新特性和提升的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker极简入门
- 下一篇: 腾讯云副总裁答治茜:移动互联网破局要借助