《Azure SQL Database Active Geo-Replication簡介》一文中,咱們比較全面的介紹了 Azure SQL Database Active Geo-Replication 的主要特色和優點。接下來咱們將從自動化的角度,介紹如何經過 PowerShell 在項目中實現 Active Geo-Replication 操做。html
文章來源:葡萄城產品技術社區sql
MS 專門爲管理 Azure 寫了一套 PowerShell 組件稱爲 Azure PowerShell,咱們就是要使用這套組件中提供的接口,來操做 Active Geo-Replication。遺憾的是,這套組件不會被 Windows 默認安裝,因此請參考 MSDN 上的說明先安裝 Azure PowerShell。不喜歡讀 MSDN 的同窗能夠參考筆者博文《使用 PowerShell 自動化 CloudServices 發佈》中,關於 「安裝 powershell 的 azure module」小節,會簡潔一些。shell
操做 Azure 中的任何資源都須要進行身份認證,因此第一步須要在 PowerShell 中登陸 Azure,而且選擇正確的 Azure subscription。數據庫
登陸 Azure 的命令:服務器
Login-AzureRmAccount
請按照提示輸入您的帳號和密碼。spa
而後選擇當前的 subscription:.net
Select-AzureRmSubscription -SubscriptionId xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Select-AzureRmSubscription 命令的使用場景是:當您有多個 subscription 時,須要經過設置當前 subscription 的方式,告訴 PowerShell 命令到底操做的是哪些資源。固然,若是您只有一個 subscription 的話,就不須要執行這個命令。cdn
下面進入正題!假設咱們有一個叫 blogdb 的數據庫,它運行在數據庫服務器 blogtestsvr 上, 這個數據庫服務器被部署在 East Asia (東亞),咱們打算爲 blogdb 建立一個從數據庫,從數據庫所運行的數據庫服務器 blogtestsvr2 部署在 Central US (美國中部)。blogtestsvr 和 blogtestsvr2 都屬於同一個資源組 sqltest。若是您還不是太瞭解主從數據庫或是 Active Geo-Replication 的概念,請先移步這裏。server
1. New-AzureRmSqlDatabaseSecondary命令htm
New-AzureRmSqlDatabaseSecondary 是專門爲一個已經存在的數據庫建立從數據庫的命令,而且在從數據庫建立完成後,會開始數據的複製。還有一個叫Start-AzureSqlDatabaseCopy 的命令能夠作一樣的事情,但 Start-AzureSqlDatabaseCopy 命令的功能過於繁雜,因此須要建立從數據庫時最好仍是使用 New-AzureRmSqlDatabaseSecondary。
下面的命令爲 blogdb 建立第一個從數據庫:
$db = Get-AzureRmSqlDatabase –DatabaseName "blogdb" -ResourceGroupName "sqltest" -ServerName "blogtestsvr" $secondaryLink = $db | New-AzureRmSqlDatabaseSecondary –PartnerResourceGroupName "sqltest" –PartnerServerName "blogtestsvr2" -AllowConnections "All"
先去 portal 上檢查一下結果:
藍色的六邊形表示主數據庫,綠色的六邊形表示咱們剛建立的從數據庫,注意從數據庫顯示的狀態爲「Readable」。同時數據庫被標識在地圖上的位置就是真實的數據中心的地理位置。上圖說明 PowerShell 命令已經成功的爲 blogdb 建立了從數據庫。
簡單說明上面的命令:
Get-AzureRmSqlDatabase 命令用來得到主數據庫的信息,而後傳遞給 New-AzureRmSqlDatabaseSecondary 命令,否則的話 New-AzureRmSqlDatabaseSecondary 的參數列表會很長且含義不清晰。
New-AzureRmSqlDatabaseSecondary 命令的參數主要用來指出從數據庫所在的 resource group 和 server name。還有 AllowConnections 參數,請把它配置爲 "All"。
2. 注意事項
在成功的爲主數據庫建立了從數據庫後,讓咱們一塊兒來看看一些須要注意的事項。
知道了怎麼建立從數據庫,固然也要可以把它移除,下面咱們使用 Remove-AzureRmSqlDatabaseSecondary 命令把剛纔建立的從數據庫移除掉。
$db = Get-AzureRmSqlDatabase –DatabaseName "blogdb" -ResourceGroupName "sqltest" -ServerName "blogtestsvr" $secondaryLink = $db | Get-AzureRmSqlDatabaseReplicationLink –PartnerResourceGroup "sqltest" –PartnerServerName "blogtestsvr2" $secondaryLink | Remove-AzureRmSqlDatabaseSecondary
命令自己比較簡單,執行完成後去 portal 上看看,從數據庫已經不見了。噢,等等…好像從數據庫並無被刪除掉啊!是的,Remove-AzureRmSqlDatabaseSecondary 命令只是移除了主從數據庫之間的關係,而不會刪除從數據庫。相反,此時的從數據庫已經變成了一個可讀寫的獨立數據庫。
下面讓咱們把焦點定位到 Active Geo-Replication 的主要用例:災難恢復。當故障發生在主數據庫時。咱們須要經過 Set-AzureRmSqlDatabaseSecondary 命令儘快的把一個從數據庫轉換爲主數據庫。
$db = Get-AzureRmSqlDatabase –DatabaseName "blogdb" –ResourceGroupName "sqltest" –ServerName "blogtestsvr2」 $db | Set-AzureRmSqlDatabaseSecondary -PartnerResourceGroupName "sqltest" -Failover
看看 portal 上如今的狀況:
搞定!原來只讀的從數據庫已經變成了可讀寫的主數據庫。注意上圖中主從數據庫各自的位置,是否是它們已經轉換了角色呢!
接下來讓咱們簡單瞭解下 Set-AzureRmSqlDatabaseSecondary 命令以及使用中須要注意的事項。
Set-AzureRmSqlDatabaseSecondary 命令的執行也分爲兩個階段:
本文使用 Azure PowerShell 提供的接口實現了建立、移除及恢復 Azure SQL Database Active Geo-Replication 的操做。雖然看上去 PowerShell 腳本還挺多的 (主要是參數多),但涉及到的核心接口只有三個:New-AzureRmSqlDatabaseSecondary,Remove-AzureRmSqlDatabaseSecondary 和 Set-AzureRmSqlDatabaseSecondary。實際操做中的不少細節都未涉及,但願本文能起到拋磚引玉的做用。