[Azure][SQL]Azure SQL Database 被忽略的新功能 - 容錯移轉群組

Azure SQL Database 在 2017 年有推出容錯移轉群組的功能,但跟以往的異地複寫有不同嗎 ?

Azure SQL Database 在 2017 年有針對主動式地理複寫,提供更強化的一個功能 - 容錯移轉群組。但在這幾個月聽到有關於介紹 Azure SQL Database 的時候,似乎都沒有人去談這個功能,或許是因為這個是比較新的功能,因此大家都還是比較擺在異地複寫上,所以我就針對這個部分來做個整理和介紹囉。

這個功能設定的位置是有點不同,他是放在 Azure SQL Server 上面,而不是放在 Azure SQL Database 上,因此要設定的時候要注意一下,不要找錯地方了。

因此當我們選擇「容錯移轉群組」之後,由於之前還沒有建立群組,所以這裡我們選擇「加入群組」

如果您有使用過 SQL Server AlwaysON 的技術的話,那麼這裡建立容錯移轉群組,基本上會有類似的概念,一開始我們要設定容錯移轉的名稱,這個就會是以後我們程式要用來連接資料庫服務的名稱,這裡我先設定為 fgdemo1 ,並且建立一個複寫的資料庫伺服器在東南亞。而跟 Azure SQL Database 的異地複寫來比較的話,這裡有很大一個差異在「讀寫容錯移轉原則」上,在這裡我們可以設定為自動,就不用像異地複寫只能手動去做處理,這個後續我們會再做展示。

完成上述設定後,接下來就要挑選那些資料庫要加入到這個容錯移轉群組下,在這裡我只先選擇其中一個資料庫來做示範,選好之後就可以去做建立了。

如果採用這樣方式去建立的話,那麼您很有可能會收到錯誤訊息,說不支援你所建立的地區,但如同另外一篇文章「Azure SQL Database 異地複寫只能在同一個資料中心 ?」中的類似問題,又是中文介面所造成的異常,因此可以在建立容錯移轉群組之前,先把目的端的 Azure SQL Server 伺服器給建立起來,而不要在容錯移轉群組下去建立伺服器,那就不會有問題了。


當建立好之後,我們重新回到容錯移轉群組的選單下,點擊我們剛剛的 fgdemo1 的名稱,就可以看到相關設定了

在這裡我們可以看到可以透過「容錯移轉」來做切換不同伺服器成為 Primary,而下方就有個我們之前所提到的,你建立容錯移轉群組的名稱,在這裡會看到會是一個類似 AlwaysON Listen 的名稱,這樣我們程式只要連接這個名稱,不論怎麼切換,你的連線都不用作更改,他會自己連接到 Primary 的伺服器上來做資料維護,這樣就跟以前的異地複寫來比較,這個方式就好很多了。

但看到這裡不要馬上就去使用了,還要特別去注意一下,由於我們現在資料庫可能會在不同伺服器上做切換,因此以下兩項設定,都最好是存放在資料庫內

1. 防火牆的設定 : 不在 Azure Portal 上進行防火牆的設定,而是改用 sp_set_database_firewall_rule 這個 stored procedure ,來設定該資料庫的防火牆設定。

2. 存取資料庫的帳密:利用指定資料庫內使用者的密碼,將資料庫使用者的帳密改存在資料庫上,這樣不同伺服器之間切換就不會有問題了。

因此在這裡要做這些設定,我們就利用 Azure Portal 上面,針對 Azure SQL Database 的工具,使用  Preview 版本的查詢編輯器,用這個來輸入語法進行設定

接著我們就可以使用 SSMS 來做登入進行測試了,設定連接的伺服器名稱和剛剛所建立的帳號和密碼,並且透過「選項」到連接屬性下,指定連接的資料庫名稱

登入之後,我們利用 select @@servername 來做測試,會看到現在連在 Primary 是 sqldb2017a 的這一台

而當我們進行容錯移轉切換之後,則同樣的指令再執行一次,就會發現已經切換到不同的伺服器上去執行命令了


目前容錯移轉群組已經正式 GA 可以使用了,因此如果再使用 Azure SQL Database 的時候,不妨考慮將這個功能給加入,也可以同時再搭配異地複寫,這樣就可以很容易地達到  HA/DR 的處理了。