练习 - 业务关键高可用性

已完成

在本练习中,需要将数据库升级到业务关键层级。 你将了解它如何提供只读副本和提高的性能。

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

Azure SQL 业务关键服务层级中的基本高可用性

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

  1. 在业务关键层级部署上一个练习中的数据库。
  2. 运行 ostress 工作负载。
  3. 使用 PowerShell 启动故障转移。
  4. 查看 ostress 中的结果。
  5. 连接到可读次要副本。

在业务关键层级部署相同的数据库

在上一模块中,你已了解如何使用 T-SQL 缩放数据库。 本练习的目标是将在上一练习中使用的数据库从常规用途升级到业务关键。 你将使用 Azure Cloud Shell 升级数据库。 由于故障转移频率存在限制,因此需使用相同的示例数据库,但将其命名为 AdventureWorks-bc。

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

    $resourceGroup = "<rgn>Sandbox resource group name</rgn>"
    $database = "AdventureWorks-bc"
    $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. 运行以下命令,在业务关键服务层级上创建数据库:

    az sql db create --name $database `
    --edition BusinessCritical `
    --family Gen5 `
    --capacity 2 `
    --sample-name AdventureWorksLT `
    --read-scale Enabled `
    --zone-redundant false
    

    此命令需要一些时间才能完成。 在命令运行期间,你可以查看所用的部分参数:

    • family:此参数指定硬件的生成。 为与上一练习一致,使用 Gen5

    • capacity:此参数指定 DTU 数或 vCore 数。 为与上一练习一致,使用 2 vCore。

    • sample-name:为与上一练习一致,使用 AdventureWorksLT 数据库示例。

    • edition:此参数名称有点误导。 它实际上是指服务层级,与 SQL Server 中使用的版本不同。

    • read-scale:默认情况下不启用该选项,但即使启用也不会产生额外费用。 启用该参数后,你可以将你的某一次要副本用作可读次要副本。

    • zone-redundant:默认情况下,此参数设置为 false。 如果想要实现“Multi-Az”部署,可以将其设置为 true,且无需支付额外费用。 你将在下一单元中详细了解可用性区域。

      备注

      可用性区域仅在特定区域中可用。 这些区域当前不适用于 Azure SQL 托管实例。

  3. 创建数据库后,应在 Azure Cloud Shell 输出中看到有关更新的详细信息。 你将看到两个主要类别(不过还会在其他几个属性下看到指示器):

    • currentServiceObjectiveName:应为 BC_Gen5_2BC 是业务关键 (Business Critical) 的缩写。
    • currentSku
      • name:应为 BC_Gen5
      • tier:应为 BusinessCritical
  4. 检查服务层级的另一种方法是,转到 Azure 门户中的数据库。 在“概述”选项卡上,查看“定价层”。

    提示

    还有许多其他方式可以查看这些更新。 其中一种是使用 SSMS。 如果右键单击数据库并选择“属性”>“配置 SLO”,则可以查看更改。

运行 ostress 工作负载

与上一练习类似,你将使用 ostress 反复查询 Azure SQL 数据库。

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

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

    Ostress 工作负载连接并运行 50,000 次简单查询。

  2. 使用以下 ostress 脚本运行工作负载。 将 serverName 替换为 Azure SQL 数据库逻辑服务器的名称。 将 password 替换为你的密码。 此命令与上一练习中的命令略有不同。 数据库名称现为 AdventureWorks-bc

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

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

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

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

启动故障转移并查看结果

  1. 配置窗口,以便同时查看此浏览器和命令提示符窗口。

  2. 在 Azure Cloud Shell 终端中运行以下代码。 此命令与上一个练习中使用的命令相同。

    # create a failover
    Invoke-AzSqlDatabaseFailover -ResourceGroupName $resourceGroup `
        -ServerName $server `
        -DatabaseName $database
    
  3. 运行此命令时,你应观察到终端中出现的所有更改。 你会注意到,发生故障转移时,无法访问数据库。 这段时间很短。 断开连接后,大约 5 秒钟后会重新连接! 相较于常规用途层级中的故障转移速度,该故障转移速度要快 6 倍以上。

    请记住,业务关键服务层级中的数据库或托管实例本质上在后台部署了 Always On 可用性组,因此在故障转移时,所发生的只是后端指针的变化,因为 Azure 会将你重定向到其中一个辅助数据库。 这就是与常规用途相比,故障转移速度要快得多的原因。

连接到只读副本

由于启用了 read-scale 参数,因此可以将某一个次要副本用于只读工作负载。 若要访问应用程序中的只读副本,只需将以下参数添加到数据库的连接字符串:

ApplicationIntent=ReadOnly;
  1. 在 SSMS 中,新建查询连接。 (选择“文件”>“新建”>“数据库引擎查询”。)

    Screenshot that shows how to create a query connection.

  2. 在“连接到服务器”对话框中,使用已用于连接到 Azure SQL 数据库逻辑服务器的配置。 (即使用“SQL Server 身份验证”。)选择“选项”。

    Screenshot that shows the Connect to Server dialog box.

  3. 选择“连接属性”,然后选择“全部重置”。 在“连接到数据库”下,选择“浏览服务器”,再选择 AdventureWorks-bc 数据库。 选择“确定”

  4. 选择“其他连接参数”,并将以下内容粘贴到文本框中。 选择“连接”。

    ApplicationIntent=ReadOnly;
    

    使用 SSMS 时,必须以只读方式指定要连接到的服务器和数据库。 因为服务器中可能存在多个数据库,并且这些数据库具有与可读次要副本相关的各种功能。

  5. 作为测试,请对新的数据库引擎查询尝试进行以下查询。 观察结果。 结果是你所期望的吗?

    SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability')
    

    Screenshot that shows the read-only response.

  6. 你可以选择重新连接和更新其他连接参数。 (将 ReadOnly 替换为 ReadWrite。)请确认正在访问读/写主要副本。 ReadWrite 是默认参数,因此如果不选择任何内容,则将使用该参数:

    Screenshot that shows the read/write response.