PowerShell 操做 Azure SQL Active Geo-Replication 實戰

Azure SQL Database Active Geo-Replication簡介》一文中,咱們比較全面的介紹了 Azure SQL Database Active Geo-Replication 的主要特色和優點。接下來咱們將從自動化的角度,介紹如何經過 PowerShell 在項目中實現 Active Geo-Replication 操做。html

文章來源:葡萄城產品技術社區sql

1、從Azure PowerShell開始

MS 專門爲管理 Azure 寫了一套 PowerShell 組件稱爲 Azure PowerShell,咱們就是要使用這套組件中提供的接口,來操做 Active Geo-Replication。遺憾的是,這套組件不會被 Windows 默認安裝,因此請參考 MSDN 上的說明先安裝 Azure PowerShell。不喜歡讀 MSDN 的同窗能夠參考筆者博文《使用 PowerShell 自動化 CloudServices 發佈》中,關於 「安裝 powershell 的 azure module」小節,會簡潔一些。shell

2、在PowerShell中登陸Azure

操做 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

3、添加一個從數據庫

下面進入正題!假設咱們有一個叫 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. 注意事項

在成功的爲主數據庫建立了從數據庫後,讓咱們一塊兒來看看一些須要注意的事項。

  • 細心的朋友們可能已經注意到了,新建立的從數據庫和主數據庫的名字是同樣的。而且還有一個點不太直觀:Service level,其實就是從數據庫和主數據庫收的錢是同樣的!固然您能夠單獨設置從數據庫的 Service level 從而節省預算。
  • 從數據庫的建立是被分紅兩個過程:建立數據庫和複製數據。數據庫的建立可能很快,但複製數據就不肯定了,主要須要看庫的大小。因爲這兩步都完成後 New-AzureRmSqlDatabaseSecondary 命令纔會返回,因此當您的數據庫比較大時,這條命令執行的時間會比較長。
  • 當同名的數據庫已經存在時,New-AzureRmSqlDatabaseSecondary 命令會返回錯誤:

4、移除從數據庫

知道了怎麼建立從數據庫,固然也要可以把它移除,下面咱們使用 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 命令只是移除了主從數據庫之間的關係,而不會刪除從數據庫。相反,此時的從數據庫已經變成了一個可讀寫的獨立數據庫。

5、災難恢復

下面讓咱們把焦點定位到 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 命令的執行也分爲兩個階段:

  • 首先,是切換數據複製操做的同步模式,完成全部到從數據庫的數據複製 (切換角色前要保證主從庫中的內容是同樣的)。
  • 而後,是切換主從數據庫的角色。角色切換完成後就開始重新的主數據庫,向新的從數據庫同步數據。固然切換的過程是有代價的,MSDN 上說大概有0到25秒的時間數據庫將不可用,但這個時間不會超過1分鐘。

總結

本文使用 Azure PowerShell 提供的接口實現了建立、移除及恢復 Azure SQL Database Active Geo-Replication 的操做。雖然看上去 PowerShell 腳本還挺多的 (主要是參數多),但涉及到的核心接口只有三個:New-AzureRmSqlDatabaseSecondary,Remove-AzureRmSqlDatabaseSecondary 和 Set-AzureRmSqlDatabaseSecondary。實際操做中的不少細節都未涉及,但願本文能起到拋磚引玉的做用。

相關文章
相關標籤/搜索