練習 - 具備讀取縮放的異地複寫分散式自動容錯移轉群組
您已在上一個單元中了解異地複寫和自動容錯移轉群組。 在本練習中,您將會為 Azure SQL Database 設定自動容錯移轉群組。 接著您會起始容錯移轉並檢視結果。
Azure SQL 中的自動容錯移轉群組
若要為一或多個資料庫設定自動容錯移轉群組並檢視結果,您需要完成下列步驟:
- 設定環境。
- 在容錯移轉區域內建立空白的 Azure SQL Database 伺服器。
- 在伺服器之間建立容錯移轉群組。
- 設定網路。
- 將一或多個資料庫新增到容錯移轉群組。
- 設定命令提示字元應用程式。
- 了解正在執行的應用程式。
- 起始容錯移轉。
- 容錯回復。
本練習會引導針對 AdventureWorks 資料庫設定自動容錯移轉群組。 您接著將會使用簡易命令列應用程式來了解讀取和寫入發生的位置,以及在應用程式中重試邏輯的重要性。 最後,您將會執行有趣的練習,以判斷有多少讀取複本與同樣具備自動容錯移轉群組的業務關鍵資料庫建立關聯。
設定環境
將下列程式碼複製到 [記事本] 或其他文字編輯器中。 提供資訊。 新增 SQL 驗證密碼。 針對
$drLocation
,提供您希望容錯移轉群組所在的區域。 在理想的情況下,請選擇與目前伺服器的區域配對的區域。 您可以檢查配對區域的清單。 至少其不可位於您原始資料庫所在的區域中。 最後,請新增本機電腦的 IP 位址。 如果您需要判斷 IP 位址,請在本機電腦上開啟 PowerShell,然後執行(Invoke-WebRequest -Uri "https://ipinfo.io/ip").Content
。# Add your info $password = "password" $drLocation = "westus2" $ipAddress = "xx.xx.xx.xx"
請在 Azure Cloud Shell (此頁面的右側) 中執行更新的命令。
請在 Azure Cloud Shell 中執行下列指令碼,為後續步驟設定變數:
$admin = "cloudadmin" $resourceGroup = Get-AzResourceGroup | Where ResourceGroupName -like <rgn>[sandbox resource group name]</rgn> $location = $resourceGroup.Location $resourceGroup = $resourceGroup.ResourceGroupName $database = "AdventureWorks" $server = Get-AzureRmSqlServer -ResourceGroupName $resourceGroup $server = $server.ServerName $drServer = "$($server)-dr" $failoverGroup = "$($server)-fg" $firewallRule = "AllowMyIp" Write-Host "Variables Received"
透過在 Azure Cloud Shell 中執行下列指令碼,以在容錯移轉區域內建立空白 Azure SQL Database 伺服器:
# Create a backup server in the failover region New-AzSqlServer -ResourceGroupName $resourceGroup ` -ServerName $drServer ` -Location $drLocation ` -SqlAdministratorCredentials $(New-Object -TypeName System.Management.Automation.PSCredential ` -ArgumentList $admin, $(ConvertTo-SecureString -String $password -AsPlainText -Force)) Write-Host "New Azure SQL Database logical server Created in different region"
透過在 Azure Cloud Shell 中執行下列指令碼,在伺服器之間建立容錯移轉群組:
# Create a failover group between the servers New-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup ` -ServerName $server ` -PartnerServerName $drServer ` -FailoverGroupName $failoverGroup Write-Host "New auto-failover group created between the two Azure SQL Database logical servers"
透過在 Azure Cloud Shell 中執行下列指令碼來設定網路:
# Add a firewall rule that gives your VM access to the new server New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroup ` -ServerName $drServer ` -FirewallRuleName $firewallRule ` -StartIpAddress $ipAddress ` -EndIpAddress $ipAddress;
為了說明自動容錯移轉群組的目的,此網路設定就已足夠。 這與您在企業環境中會執行的操作有些許不同。 在企業環境中,需要存取的電腦很可能會是一組構成某種類型應用程式的資源。 如果您的資料庫容錯移轉,您可能也會想要將應用程式、VM 或其他資源容錯移轉到新的區域。 這兩組資源將需要在另一個區域中存取資源、伺服器和資料庫。 若要執行此操作,您可以使用虛擬網路對等互連、虛擬網路對虛擬網路連線,或其他可能的項目 (例如 Azure ExpressRoute)。 這取決於您的案例。
藉由在 Azure Cloud Shell 中執行下列指令碼,以將一或多個資料庫新增至容錯移轉群組:
# Add the database or databases to the failover group Get-AzSqlDatabase -ResourceGroupName $resourceGroup ` -ServerName $server -DatabaseName $database | ` Add-AzSqlDatabaseToFailoverGroup -ResourceGroupName $resourceGroup ` -ServerName $server ` -FailoverGroupName $failoverGroup Write-Host "AdventureWorks database added to the auto-failover group"
執行此指令碼需要一些時間。 您正在另一個區域內還原資料庫,其中涉及將資料從原始區域複製到災害復原區域。 您可以使用下一節中的步驟,然後回頭檢查此指令碼是否已完成。
您現在已部署及設定 AdventureWorks 資料庫的自動容錯移轉群組。
設定命令提示字元應用程式
在本節中,您會使用兩個 ostress 工作負載來檢查容錯移轉群組中主要和次要伺服器的 Updateability
(不論資料庫是 ReadWrite
或 ReadOnly
狀態)。 此案例是為了模擬應用程式,其中包含讀取和寫入工作負載。
開啟兩個個別的命令提示字元視窗。 設定視窗,讓您可以同時看到這個視窗 (瀏覽器) 和兩個命令提示字元視窗。
在這兩個命令提示字元視窗中,如同在先前練習中所進行的操作,移至 Availability (可用性) 資料夾。 例如,您可能會使用以下命令:
cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
您會使用第一個命令提示字元視窗來檢查所建立容錯移轉群組中主要伺服器的狀態。 使用您的伺服器名稱和密碼執行下列命令:
.\ostress.exe -S"<server-name>-fg.database.windows.net" -Q"SELECT DATABASEPROPERTYEX(DB_NAME(),'Updateability')" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r5000 -oprimary
注意
透過自動容錯移轉群組,您可連線到作為資料庫抽象層的容錯移轉群組名稱。
您會使用第二個命令提示字元視窗來檢查所建立容錯移轉群組中次要伺服器的狀態。 使用您的伺服器名稱和密碼執行下列命令:
ostress.exe -S"<server-name>-fg.secondary.database.windows.net" -Q"SELECT DATABASEPROPERTYEX(DB_NAME(),'Updateability')" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r5000 -osecondary
第一個命令的結果應該是 READ_WRITE
,因為該命令會檢查主要容錯移轉群組伺服器,且您尚未起始任何容錯移轉。
第二個命令的結果應該是 READ_ONLY
,因為該命令會檢查您所設定的災害復原或次要伺服器。 在任何一個指定時間中,您應該只能夠從其中一部伺服器進行寫入。
在接下來的步驟中,您會查看在發生容錯移轉時,這兩部伺服器會發生什麼情況。
起始容錯移轉並檢視結果
使用 Azure Cloud Shell 終端機 (位於此頁面的右側) 來檢查次要伺服器的狀態:
(Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup ` -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
結果會告知自動容錯移轉群組中的次要伺服器是否已用來作為主要或次要資料庫。
您現在會看到發生容錯移轉時所發生的情況。 在 Azure Cloud Shell 終端機中輸入下列 Azure PowerShell 命令,以起始手動容錯移轉:
Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup ` -ServerName $drServer -FailoverGroupName $failoverGroup
發生容錯移轉時,您可能會注意到連線暫時中斷,但由於應用程式持續重試,因此應用程式不會完全失敗。 在容錯移轉完成之後,您應該會注意到
READ_WRITE
和READ_ONLY
結果繼續,且並未變更。Azure SQL Database 和 Azure SQL 受控執行個體中自動容錯移轉群組的其中一項優點是不需要在容錯移轉後更新連接字串。 您繼續連線到主要資料庫 (
<failover-group>.database.windows.net
) 以進行寫入工作負載,以及連線到次要資料庫 (<failover-group>.secondary.database.windows.net
) 以進行讀取工作負載。 Azure 會負責將您路由傳送至對應區域/伺服器中的適當資料庫。在 Azure Cloud Shell 中執行下列指令碼來檢查次要伺服器的狀態:
(Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup ` -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
此伺服器現在應該是主要角色。
在 Azure Cloud Shell 中執行下列指令碼以進行容錯回復:
Switch-AzSqlDatabaseFailoverGroup -ResourceGroupName $resourceGroup ` -ServerName $server -FailoverGroupName $failoverGroup
最後,您還可以再次檢查次要伺服器的狀態。 在 Azure Cloud Shell 中執行下列指令碼:
(Get-AzSqlDatabaseFailoverGroup -FailoverGroupName $failoverGroup ` -ResourceGroupName $resourceGroup -ServerName $drServer).ReplicationRole
您現在可以關閉兩個命令提示字元視窗,並最大化 Microsoft Learn 瀏覽器視窗。
在此練習中,您已了解如何部署和設定自動容錯移轉群組。 您也了解從應用程式的觀點來看,這代表什麼意思。 自動容錯移轉群組只是其中一種可進一步使用 Azure SQL 中可用性和讀取縮放的方式。