练习 - 常规用途高可用性

已完成

在上一单元中,你了解了 Azure SQL 的高可用性体系结构。 在本练习中,你将了解 Azure SQL 数据库的常规用途层级与本地故障转移群集实例在行为方面的相似程度。 在本地设置此功能可能很耗时,也很棘手,但你可以使用 Azure SQL 来实现开箱即用。

本练习将使用你在上一模块中可能使用过的 ostress 工具来创建工作负载。 然后,将使用 Azure Cloud Shell 中的 Azure PowerShell 模块启动故障转移。 最后,将观察故障转移对 ostress 工作负载的影响。

Azure SQL 常规用途服务层级中的基本高可用性

在本练习中,你将完成以下步骤:

  1. 运行 ostress 工作负载。
  2. 确认环境是否正确配置。
  3. 使用 PowerShell 启动 Azure SQL 数据库故障转移。
  4. 查看 ostress 中的结果。
  5. 在门户中查找发生了故障转移的迹象。

运行 ostress 工作负载

首先创建长期运行的工作负载。 通过此工作负载可了解故障转移如何影响数据读/写功能,以及在 Azure SQL 数据库的常规用途服务层中进行故障转移需要花费多长时间。 你将使用 ostress。

  1. 在本地计算机上打开新的命令提示符窗口。 使用 cd 转到先前克隆或下载的存储库中包含可用性模块的目录。 例如,可以使用以下命令:

    cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
    

    Ostress 可执行文件位于此文件夹中。 (该文件很小。)Ostress 工作负载连接并运行 50,000 次简单查询。

  2. 使用以下 ostress 脚本运行工作负载。 将 serverName 替换为 Azure SQL 数据库逻辑服务器的名称。 将 password 替换为你的密码。

    .\ostress.exe -S"serverName.database.windows.net" -Q"SELECT COUNT(*) FROM SalesLT.Customer" -U"cloudadmin" -d"AdventureWorks" -P"password" -n1 -r50000
    

    如果工作负载正常运行,则命令提示符窗口中应反复显示查询结果 847

    如果想要在 ostress 工作负载完成前停止运行该工作负载,可在终端中选择“Ctrl+C”。

    如果想要再次运行工作负载,可以再次运行该命令。

使用 Azure Cloud Shell 中的 PowerShell 启动故障转移并观察结果

  1. 在 Azure Cloud Shell 终端(本页右侧)中,运行以下 PowerShell 以配置环境:

    $resourceGroup = "<rgn>Sandbox resource group name</rgn>"
    $database = "AdventureWorks"
    $server = Get-AzureRmSqlServer -ResourceGroupName $resourceGroup
    $server = $server.ServerName
    
    # Specify your default resource group and Azure SQL Database logical server
    az configure --defaults group=$resourceGroup sql-server=$server
    
    # Confirm the defaults are set
    az configure --list-defaults
    
  2. 配置窗口,以便同时查看此浏览器和命令提示符窗口。

  3. 在 Azure Cloud Shell 终端中运行以下代码:

    # Create a failover
    Invoke-AzSqlDatabaseFailover -ResourceGroupName $resourceGroup `
        -ServerName $server `
        -DatabaseName $database
    
  4. 在命令提示符窗口中查看 ostress 中的结果。 运行此命令时,你应观察到命令提示符窗口中出现的所有更改。 你会注意到,发生故障转移时,无法访问数据库。 故障转移将在大约 30 秒后完成,你将看到工作负载再次成功运行。 应用程序中的重试逻辑至关重要,因为如果 Azure 进行故障转移(出于多种原因),你会希望应用程序发生故障或宕机时间不超过故障转移所花费的时间。

  5. 通过命令创建故障转移的这一功能在某些情况下可能非常有用。 请注意,该服务会阻止你过于频繁地执行此操作。 运行以下命令以尝试另一项故障转移:

    # Create a failover again
    Invoke-AzSqlDatabaseFailover -ResourceGroupName $resourceGroup `
        -ServerName $server `
        -DatabaseName $database
    

    你将看到类似于下面的错误:

    Invoke-AzSqlDatabaseFailover: Long running operation failed with status 'Failed'. Additional Info:'There was a recent failover on the database or pool if database belongs in an elastic pool.  At least 15 minutes must pass between database failovers.'
    
  6. 现在可以通过选择窗口,然后选择“Ctrl+C”来停止命令提示符窗口中的工作负载。 可以将此窗口保持打开状态,因为在下一练习中你将使用同一工作负载。

    你可能想知道是否有一种方法可以检查是否发生了故障转移。 目前尚没有明确的“发生了故障转移”消息,但资源运行状况可能是一个很好的指标。

  7. 在 Azure 门户中,转到 Azure SQL 数据库。 在左侧窗格中的“帮助”下,选择“资源运行状况”。 故障转移后的 5 到 15 分钟之间,你可能会看到类似于以下屏幕截图所示的运行状况事件。 此事件可能表明多个状况,但一种可能是发生了某些情况,Azure 已进行故障转移。

    Screenshot that shows a health event in the Azure portal.