[SQL SERVER]SQL2016-啟用和設定Alwayson AG

Alwayson2016 AG 可以提供企業

High Availability(HA):硬體故障、藍白畫面(BSODs)

Disaster Recovery(DR):快速災難復原(移轉)

Scale out:跨多台伺服器分擔workload

SQL Server 2016 AG有以下功能改善:

Round-robin load balancing in readable secondaries:

針對唯獨次要副本自動實現附載平衡。

以前版本也可以利用Agent Job定時(每5秒)改變read-only routing進行分流。

 

Increased number of auto-failover targets

SQL2014以前只能設定2台自動容錯移轉目標,現在可設定3台(2 + primary)。

 

Enhanced log replication throughput and redo speed

Log傳送吞吐量和redo log效能是SQL2014以前最主要瓶頸,但SQL2016改善4~5倍

 

Support for group-managed service accounts

支援群組管理服務帳號,替Load Balance提供單一識別解決方案。

 

Support for Distributed Transactions (DTC)

SQL2016支援分散式交易。

 

Basic HA in Standard edition

標準版支援基本AG(限制)。

 

Direct seeding of new database replicas

自動植入會在AG中,幫每個資料庫自動建立次要複本,

你再也不需要手動備份並還原次要複本。(可測試超過500GB大型資料庫,順便驗證網路吞吐量..XD)

 

我的Lab環境整體架構如下

Note:

AG中不可混和windows Server Core和windows Server GUI。

同一個VM也不可建立多個Instalce。

Clone VM(使用相同硬體驅動程式)後記得執行sysprep。

 

AG是建立在Windows Cluster上(總共有3 個node),沒有使用Shared Storage,

每台SQL SERVER執行個體都是獨立LUN,並設定防火牆允許1433和5022 port。

 

安裝SQL Server 2016 (每個node都需要)

1選擇New SQL Server stand-alone installation

2設定執行個體名稱(建議名稱都相同,這樣AP端連線會比較方便)

3設定使用帳號(我統一使用domain user account)

請勾選授予該帳號硬碟維護權限

 

4設定資料目錄(所有node的資料目錄結構請一致)

5設定tempDB(所有node的資料目錄結構請一致)

記得切多份tempDB file(用來取代T117、1118)

 

6啟用AlwaysOn HA(所有node都需要啟用,並自動找到windows failover cluster name)

Sql services 必須重新啟動

 

啟用AlwaysOn HA沒問題後,接下來開始設定AG

1使用AG精靈

2設定第一組AG名稱

記得勾選Database Level Health Detection(這也是一個很棒的功能),

只要可用性資料庫非online狀態,AG將自動容錯移轉。

 

3選擇可用性資料庫(每個資料庫都必須為full mode,並至少一次完整備份)

Note:系統資料庫無法加入AG。一個資料庫只能位於一個AG。

 

4新增次要複本

我這裡設定2台自動移轉目標且可讀取,一台手動移轉且不可讀取(非同步模式)

 

確認endpoint(防火牆請允許5022 port)

備份設定(我這裡設定primary)

設定監聽器(一個AG只能有一個Listener,並建議使用靜態IP)

Note:如有跨網段也請一併加入,避免無法failover。

 

5選擇初始化方式並設定同步資料路徑

完成啟用和設定

 

RiCo碎碎念:

以前我會遇到有人問我你系統資料庫有建置HA嗎?

當我回答沒有時,往往會看到對方不可置信的表情,我簡單說一下我看到的情況

 

WTF:有一位全職DBA嗎?

大多數企業都是某一個資深開發人員兼DBA,但很少資深開發人員熟悉WSFC和AlwaysOn AG,

今天就算公司花錢找外面顧問公司建置,大多數資深開發人員也不敢接手維護,

因為如果AG Fail(雖然很少)或WSFC(以前惡名昭彰)掛了,你能保證小於1分鐘內讓系統恢復並上線嗎?

另外就是管理Cluster經驗不是那麼足夠。

 

WTF:有監控機制嗎?

真實世界我想大多數都是第一線人員兼監控軟體,這些人員都會積極通知IT正式環境出問題,

而問題也很少是硬體掛掉、系統崩潰..等,絕大多數都是效能問題,這些效能問題就算建立AG也依然無法改善。

ps:你還記得上次執行failover的時間嗎?系統發生Crash一年有超過一次嗎(內部搞鬼不列入...XD)?

 

WTF:真的需要跨多台Server嗎?

我常聽到說目前一台Server已經無法支撐寫入或讀取作業,所以必須要進行

讀寫分離,但真正原因根本就不是I/O問題,反倒是TSQL、索引、資料表、資料庫規劃不佳..等導致,

很常看見原本5分鐘的查詢,在讀寫分離後…還是5分鐘阿,如果查詢資料真的要接近即時,

那可能使用in-memory database效果還比較大,但如果你預算夠,

我個人是很推薦使用AlwaysOn2016 AG進行讀寫分離設定J(有踩過讀寫分離坑的通知一下~~XD)

 

WTF:真的永遠AlwaysOn嗎?

我不討論第一個AlwaysOn2012版本有多少bug,但在AlwaysOn2014 AG我們來看看我找到多少bug。

Cumulative Update 5 for SQL Server 2014 Service Pack 1

Cumulative update 6 for SQL Server 2014 SP1

Cumulative Update 7 for SQL Server 2014

SQL Server 2014 Service Pack 2 release information

Cumulative Update 1 for SQL Server 2014

2016年1月~10月大概修正了11 bugs,一個月來一次停機上path嗎?

 

我不是討厭AlwaysOn2016 AG,反而我還很愛AlwaysOn2016 AG所帶來各項實用的改善,

但真實世界我並不會為了AG建立AG(難道建立AG就表示系統很潮、很犀利、很不一樣嗎?),

因為考量各項成本(維護、管理、金錢、人力、架構..等)後,

你可能會發現其實透過其他更簡單方法反而可以更快恢復系統(如VM restore..等)。

 

 

參考

Overview of Always On Availability Groups (SQL Server)

Configure Cluster Quorum NodeWeight Settings

Enhanced Always On Availability Groups in SQL Server 2016

WSFC Quorum Modes and Voting Configuration (SQL Server)

Group Managed Service Accounts Overview

Automatically initialize Always On Availability group

SQL Server 2016 HA Series Part 1 – 3 Auto Failover Targets

SQL Server AlwaysOn Team Blog

Automatic Seeding Very Large Databases in SQL Server 2016

CSS SQL Server Engineers

AlwaysOn Availability Group Database Level Health Detection – SQL Server 2016

Microsoft SQL Server Always On Solutions Guide for High Availability and Disaster Recovery

Microsoft White Papers for SQL Server 2012

SQL Server Customer Advisory Team Whitepapers