练习 - 业务关键高可用性
在本练习中,需要将数据库升级到业务关键层级。 你将了解它如何提供只读副本和提高的性能。
你将使用在上一练习中使用的 ostress 工具来创建工作负载。 然后,将使用 Azure Cloud Shell 中的 Azure PowerShell 模块启动故障转移。 最后,将观察故障转移对 ostress 工作负载的影响。
Azure SQL 业务关键服务层级中的基本高可用性
在本练习中,你将完成以下步骤:
- 在业务关键层级部署上一个练习中的数据库。
- 运行 ostress 工作负载。
- 使用 PowerShell 启动故障转移。
- 查看 ostress 中的结果。
- 连接到可读次要副本。
在业务关键层级部署相同的数据库
在上一模块中,你已了解如何使用 T-SQL 缩放数据库。 本练习的目标是将在上一练习中使用的数据库从常规用途升级到业务关键。 你将使用 Azure Cloud Shell 升级数据库。 由于故障转移频率存在限制,因此需使用相同的示例数据库,但将其命名为 AdventureWorks-bc。
在 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
运行以下命令,在业务关键服务层级上创建数据库:
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 托管实例。
创建数据库后,应在 Azure Cloud Shell 输出中看到有关更新的详细信息。 你将看到两个主要类别(不过还会在其他几个属性下看到指示器):
currentServiceObjectiveName
:应为BC_Gen5_2
。BC
是业务关键 (Business Critical) 的缩写。currentSku
:name
:应为BC_Gen5
。tier
:应为BusinessCritical
。
检查服务层级的另一种方法是,转到 Azure 门户中的数据库。 在“概述”选项卡上,查看“定价层”。
提示
还有许多其他方式可以查看这些更新。 其中一种是使用 SSMS。 如果右键单击数据库并选择“属性”>“配置 SLO”,则可以查看更改。
运行 ostress 工作负载
与上一练习类似,你将使用 ostress 反复查询 Azure SQL 数据库。
如果关闭了上一练习中使用的命令提示符,请在本地计算机上打开新的命令提示符窗口。 使用
cd
转到先前克隆或下载的存储库中包含可用性模块的目录。 例如,可以使用以下命令:cd C:\Users\username\mslearn-azure-sql-fundamentals\05-Availability
Ostress 工作负载连接并运行 50,000 次简单查询。
使用以下 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”。
如果想要再次运行工作负载,可以再次运行该命令。
启动故障转移并查看结果
配置窗口,以便同时查看此浏览器和命令提示符窗口。
在 Azure Cloud Shell 终端中运行以下代码。 此命令与上一个练习中使用的命令相同。
# create a failover Invoke-AzSqlDatabaseFailover -ResourceGroupName $resourceGroup ` -ServerName $server ` -DatabaseName $database
运行此命令时,你应观察到终端中出现的所有更改。 你会注意到,发生故障转移时,无法访问数据库。 这段时间很短。 断开连接后,大约 5 秒钟后会重新连接! 相较于常规用途层级中的故障转移速度,该故障转移速度要快 6 倍以上。
请记住,业务关键服务层级中的数据库或托管实例本质上在后台部署了 Always On 可用性组,因此在故障转移时,所发生的只是后端指针的变化,因为 Azure 会将你重定向到其中一个辅助数据库。 这就是与常规用途相比,故障转移速度要快得多的原因。
连接到只读副本
由于启用了 read-scale
参数,因此可以将某一个次要副本用于只读工作负载。 若要访问应用程序中的只读副本,只需将以下参数添加到数据库的连接字符串:
ApplicationIntent=ReadOnly;
在 SSMS 中,新建查询连接。 (选择“文件”>“新建”>“数据库引擎查询”。)
在“连接到服务器”对话框中,使用已用于连接到 Azure SQL 数据库逻辑服务器的配置。 (即使用“SQL Server 身份验证”。)选择“选项”。
选择“连接属性”,然后选择“全部重置”。 在“连接到数据库”下,选择“浏览服务器”,再选择 AdventureWorks-bc 数据库。 选择“确定”。
选择“其他连接参数”,并将以下内容粘贴到文本框中。 选择“连接”。
ApplicationIntent=ReadOnly;
使用 SSMS 时,必须以只读方式指定要连接到的服务器和数据库。 因为服务器中可能存在多个数据库,并且这些数据库具有与可读次要副本相关的各种功能。
作为测试,请对新的数据库引擎查询尝试进行以下查询。 观察结果。 结果是你所期望的吗?
SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability')
你可以选择重新连接和更新其他连接参数。 (将
ReadOnly
替换为ReadWrite
。)请确认正在访问读/写主要副本。ReadWrite
是默认参数,因此如果不选择任何内容,则将使用该参数: