Azure SQL Database Active Geo-Replication 簡介

sparkdev發表於2017-05-18

對於資料庫的維護來說,備份工作可謂是重中之重。MS Azure 當然也提供了很完善的資料庫備份功能。但是在動手建立備份計劃前請思考一下備份工作的真實目的。當然首先要保證資料的安全,一般來說定時建立資料庫的備份檔案,再複製到不同的儲存裝置上就可以了。其次,當災難發生時可不可以用最短的時間還原資料庫從而恢復應用?再次,能不能讓備份的資料庫也創造一些價值…

讓我們帶著這些問題一起來了解下 Azure 提供的一種可以跨越資料中心的資料庫備份方式:Active Geo-Replication。

Active Geo-Replication 是什麼?

這裡的 Active 我們可以理解為"正在執行的",Geo 表示的是"geographic"也就是"地理的",Replication 是"複製"的意思。合起來的大意就是"在不同的地理位置上執行的副本"。

Active Geo-Replication 允許我們最多配置4個只讀的從資料庫,再加上一個主資料庫,此時你就會擁有五個資料庫的例項,並且它們都是可訪問的。注意,這五個資料庫可以設定在不同的資料中心,也就是說當其中的四個資料中心完全掛掉的時候,你的資料庫依然是安全的,並且可以立即使用,因為它是正在執行的資料庫。主資料庫可讀寫,並且以非同步的方式把變更同步到其餘的從資料庫。我們可以輕鬆的把主資料庫和從資料庫配置到不同的資料中心,因而當災難降臨的時候,我們可以用最少的時間恢復程式的執行並且做到不丟失資料。

這是如何做到的呢?當主資料庫由於任何原因不可用時,我們可以把任何一個從資料庫切換為主資料庫,切換完成後,各個資料庫會立即適應自己的新角色,即主資料庫非同步的向從資料庫同步資料。需要注意的是,Azure 並不會智慧的幫我們做切換工作,這個活兒需要小夥伴們自己手動執行,或者是寫程式執行。

Active Geo-Replication 實現了一個可以在不同的區域間進行資料庫冗餘備份的架構 (Azure上的資料庫) 。它透過非同步複製已提交的事務來保證主從伺服器的同步。因此從資料庫中的資料會稍微比主資料庫滯後一點點(筆者在主資料庫中插入一條資料,在下一行中執行從資料庫中的查詢就能查到這條資料)。

Active Geo-Replication 的設定非常簡單,可以透過圖形化的操作完成。下面的截圖是設定了一個從資料庫的 demo:

這一點真的不是MS吹牛,好用到你想在哪個資料中心建立備份直接點地圖上的圈圈就行了!但讓人不爽的還是操作的時間問題,筆者嘗試把8G的資料庫向不同的資料中心做備份,短的幾分鐘就好了,長的需要數小時!

使用 Active Geo-Replication 的優勢

提供資料庫級別的災難恢復

當我們把從資料庫部署到 Azure 上的不同的資料中心時,就為應用程式提供了最強的的災難恢復能力。跨資料中心的冗餘資料庫備份讓我們能夠很容易的,並且很快的從災難中恢復資料,這些災難可能是人力不可抗拒的自然災害,也有可能是一些人為的惡意攻擊。

只讀的從資料庫可以分擔主資料庫的部分負載

像生成報表等一些只讀的操作完全可以透過訪問從資料庫來完成,從而降低主資料庫的負載。對於筆者來說,這是使用 Active Geo-Replication 的重要目的。因為筆者是在維護一箇舊的系統,不是必須要做的事情,筆者是不願意去最佳化那些已經跑了很多年的、慢吞吞的、很複雜的報表查詢操作的。現在好了,只需要把這些查詢定向到備份用的從資料庫就可以了,結果就是所有操作的效能都會有所提升。

更進一步,還可以把從資料庫與主資料庫設定在同一區域中然後實現對讀操作的負載平衡,詳情請參考 MSDN。當然這並不會增加應用程式的容災能力。

資料庫遷移

透過使用 Active Geo-Replication 我們可以用最短的時間完成資料庫的遷移工作。其實就是建立一個從資料庫的過程。

應用程式升級

我們可以建立一個從資料庫作為應用程式升級失敗後回退用的備份。這裡可能會讓人迷惑,因為主從資料庫是有同步關係的,在升級主資料庫的過程中從資料庫肯定會被同步,它又如何能夠作為備份呢?真相是這樣的,在從資料庫建立後可以讓它斷開與主資料庫的主從關係,斷開後就不會再被同步,所以可以起到備份的作用。

Active Geo-Replication的主要功能

前面我們介紹了 Active Geo-Replication 相比傳統備份手段的一些優勢,接下來我們一起看看它都有哪些主要功能。

自動進行的非同步複製

我們只能為已經存在的資料庫新增從資料庫。並且只能把從資料庫新增到和主資料庫不同的 Azure SQL Database server 中。被建立的從資料庫會使用主資料庫中的資料進行填充,這個過程稱為播種(seeding)。播種完成後,主資料庫中的更新就會以非同步複製的方式自動同步到從資料庫中。

支援最多四個從資料庫

兩個或兩個以上的從資料庫可以顯著的增強主資料庫的容災能力。當有多個從資料庫存在時,即便其中的一個從資料庫發生了故障,也不影響主資料庫的抗災能力。注意,當你搞多個從資料庫作為備份時也是有成本的,需要根據具體需求確定從資料庫的個數。

從資料庫是隻讀的

應用程式可以把一些只讀的操作放在從資料庫上。並且可以使用不同的使用者許可權去操作從資料庫。此處我們可能會關心一下主從資料庫同步的效能,當我們在從資料庫上執行操作時,會不會影響主資料庫到從資料庫的同步。照MS的說法是不會的,對從資料庫的讀操作使用了一種稱為快照隔離模式(snapshot isolation mode)的高大上方法,能夠在讀操作的同時,不影響主資料庫到從資料庫的同步。

可以使用elastic database pool

Active Geo-Replication 可以像普通資料庫一樣被配置到 elastic database pool 中。

從資料庫可以設定為與主資料庫不同的配置

對於作為備份存在的從資料庫而言,如果保持資源型別和主資料庫一致是相當奢侈的。好在MS也為我們提前想好了。把從資料庫的資源型別設定的低一點可以為我們節省不少的預算。但這樣也可能會帶來一點問題,就是主從資料庫的同步延遲會增加。具體情況取決於你的應用。

使用者可控的災難恢復

一個從資料庫可以在任何時刻被切換成主資料庫。同時,原來的主資料庫會成為從資料庫。

當災難發生在主資料庫上時,我們可以把一個從資料庫切換成主資料庫,程式只需要重新配置資料庫的連結資訊即可。再次強調,這個操作需要使用者來做或者使用者寫程式來完成。

同步防火牆和認證資訊

傳統 sql server 的登入使用者都是在 database server 級別設定的,這在資料庫同步的應用場景中可能會帶來一些不便。比如從資料庫所在的 database server 上是否設定了相同的使用者登入資訊,如果沒有,當主從資料庫切換後,應用程式訪問資料庫時就可能碰到登入問題。

為了解決這一問題,新的 sql server 支援資料庫級別的使用者訪問控制。使用者不需要有登入 sql server 的許可權,只要能夠訪問某個資料庫就可以了,並且使用者的資訊是儲存在資料庫的配置檔案中的,可以隨資料庫一起復制。

同理,防火牆的規則也可以設定在資料庫上。

使用PowerShell進行管理

可以使用 Azure Resource Manager (ARM) APIs 透過 PowerShell 管理 Active Geo-Replication。

總結

Active Geo-Replication 在提供資料庫備份的同時也增加了很多附加的價值,為我們的應用程式和維護帶來了更多的靈活性。如果使用得當可以透過很少的成本增加來創造大量的價值。

相關文章