[Azure] 我尝试使用 Azure 自动化自动缩放 SQL 数据库的 DTU。
目录
大家好,我是系统开发部的Hase。
我目前正在使用Azure提供的App Service和SQL数据库开发一个Web系统,但是当我开始操作时,我正在考虑实现自动缩放以尽可能降低成本。
但是,App Service有自动伸缩功能,但SQL Database没有这样的功能。
我想知道是否有办法做到这一点,所以我做了一些研究,发现一篇文章说您可以使用名为 Azure 自动化的功能来自动缩放 SQL 数据库。
当我实际测试时,我能够成功地自动缩放,所以我这次介绍一下如何做。
前提
SQL 数据库有多种购买模式(DTU、基于 vCore 和 Serverless),但这次我们将使用 DTU。
什么是 Azure 自动化?
- Azure 门户的一项功能,允许你自动执行任务(在 Azure 自动化中称为 Runbook)
- 可以通过指定时间(每天0:00等)定期执行
- Runbook 可以使用 PowerShell、PowerShell Workflow、Python 2 和 DSC 语言编写
实施形象
- 在 Azure 自动化中创建 powershell 格式的 SQL 数据库扩展 Runbook
- 将创建的Runbook添加到计划中,以便在指定时间自动执行Runbook
程序
添加 Azure 自动化帐户
① 登录Azure门户
② 从Azure服务中选择“自动化帐户”
③ 选择“+添加”添加自动化帐户
④ 输入自动化账户信息创建
姓名 | 任何名字 |
---|---|
订阅 | 选择您的订阅 |
资源组 | 选择您正在使用的资源组 |
地方 | 服务器区域 |
创建 Azure 运行方式帐户 | 选择“是”*1 |
*1) 创建Azure执行帐户时请务必选择“是”⇒
为了通过Runbook操作SQL数据库,需要执行帐户的批准,因此
如果选择“否”,则可以从以下位置执行SQL数据库操作操作手册变得无法。
创建后,您的自动化帐户将显示在列表中。
将模块添加到已添加的自动化帐户
添加以下模块以从 Runbook 操作 SQL 数据库(任务)
AZ.帐户 | 用于管理所有 Azure 凭据和常见配置的模块 |
---|---|
AZ.自动化 | 管理有关 Azure 自动化的信息的模块 |
数据库服务器 | 具有新 cmdlet 的模块可支持最新的 SQL 功能 |
⑤ 该模块是为每个自动化帐户设置的,因此请选择您创建的帐户。
⑥ 选择“模块库”
共享资源 > 模块库
⑦ 从模块库画面安装要注册的模块
在这里注册Az.Account模块(安装顺序无关紧要)
⑧ 将显示 Az.Accounts 模块详细信息屏幕,因此单击“导入”
⑨ 将显示导入确认屏幕,因此单击“确定”
Az.Accounts 模块导入开始
如果导入成功,屏幕右上角会显示“导入成功”的信息。
⑩ 以同样的方式导入其余模块。
创建运行手册(任务)
⑪ 从创建的自动化帐户中选择“Runbook”
流程自动化 > 操作手册
⑫ 选择“+创建 Runbook”来创建 Runbook
⑬ 输入 Runbook 信息并创建
姓名 | 任何名字 |
---|---|
操作手册类型 | 电源外壳 |
解释 | 任何描述性文字 |
创建的 Runbook 将显示在列表中。
*AzureAutomationTutorial、AzureAutomationTutorialPython2 和 AzureAutomationTutorialScript 在创建 Automation 帐户时默认提供,因此我们不会使用它们。
在 Runbook 中编写代码
在创建的 Runbook 中编写执行自动缩放的流程
* 使用 PowerShell 作为语言
■ 大致实施流程
① 获取 Azure 自动化连接信息
② 使用获取的 Azure 自动化连接信息连接到您的 Azure 帐户
③ 更改 SQL 数据库规范
* 使用 PowerShell 更改 SQL 数据库规范 需要连接到 Azure 帐户才能进行更改
⑭ 选择创建的Runbook
⑮ 选择“编辑”打开代码编辑器
*在这里写下代码
⑯ 描述获取Azure自动化连接信息的过程
■ 代码
# 编写命令获取 Azure Automation 连接信息并将其分配给变量 $connection = Get-AutomationConnection -Name "{自动化帐户连接名称}"
■ 命令详细信息
获取自动化连接 | |
---|---|
获取有关 Azure 自动化连接的信息。 | |
选项 | |
-姓名 | 用于获取信息的 Azure 帐户名 |
⑰ 您可以在“连接”中查看步骤21中的自动化帐户连接名称
共享资源 > 连接
⑱ 使用获取的 Azure Automation 连接信息连接到您的 Azure 帐户
■ 代码
# 授权您的 Azure 帐户 Connect-AzAccount -Tenant $connection.TenantID ` -ApplicationId $connection.ApplicationID -CertificateThumbprint ` $connection.CertificateThumbprint
*如果您想在公式中间换行,请在末尾添加“`(重音符号)”。
■ 命令详细信息
连接-AzAccount | |
---|---|
连接到您的 Azure 帐户 | |
选项 | |
-租户 | Azure 自动化租户 ID |
-应用程序ID | Azure 自动化应用程序 ID |
-证书指纹 | Azure 自动化证书信息 |
⑲ 更改SQL数据库规格
■ 代码
# 将 SQL 数据库计划更改为 S0(标准 DTU 10) Set-AzSqlDatabase -ResourceGroupName "{资源组名称}" ` -DatabaseName "{SQL 数据库名称}" -ServerName "{SQL Server 名称}" ` -Edition " Standard" -请求的服务目标名称“S0”
■ 命令详细信息
设置 AzSqlDatabase | |
---|---|
设置 SQL 数据库属性 | |
选项 | |
-资源组名称 | 正在使用的资源组 |
-数据库名称 | 要使用的 SQL 数据库名称 |
-服务器名称 | 要使用的 SQL Server 名称 |
-版 | 您想要更改的计划(基本、标准或高级) |
-请求的服务目标名称 | 描述您要更改的 DTU(例如 S1、P2 等) |
完成的代码
结合上面的代码将得到这样的结果
# 编写命令获取 Azure 自动化连接信息并将其分配给变量 $connection = Get-AutomationConnection -Name "{自动化帐户连接名称}" # 授权 Azure 帐户 Connect-AzAccount -Tenant $connection TenantID ` -ApplicationId $connection. .ApplicationID -CertificateThumbprint ` $connection.CertificateThumbprint # 将 SQL 数据库计划更改为 S0(标准 DTU 10) Set-AzSqlDatabase -ResourceGroupName "{资源组名称}" ` -DatabaseName "{SQL 数据库名称 }" -ServerName "{SQL Server名称}" ` -版本“标准”-RequestedServiceObjectiveName“S0”
检查创建的Runbook的运行情况
⑳ 打开测试窗口,检查创建的Runbook的运行情况
在代码编辑器屏幕上选择“测试窗口”
㉑ 选择“开始”运行测试
㉒ 测试成功完成后,将显示流。
*如果测试失败,错误消息将以红色显示。
您可以确认目标 SQL 数据库计划已更改。
将创建的 Runbook 注册到计划中
将创建的 Runbook 注册到计划中,以便定期执行
*为了将 Runbook 注册到计划中,您需要发布 Runbook,以便可以在生产环境中使用。
㉓ 单击“发布”并选择“是”以发布 Runbook。
如果 Runbook 成功发布,屏幕右上角将显示一条消息。
㉔ 接下来,单击“链接到日程”以注册到日程。
㉕ 将显示日程设置屏幕,因此创建并注册新的日程。
计划 > + 创建新计划
*如果您已有计划,则无需创建计划
㉖ 输入日程的时间设定信息,点击“创建”
姓名 | 任何名字 |
---|---|
解释 | 任何描述性文字 |
一开始 | 选择任意开始日期和时间 |
时区 | 选择任意时区 |
重复 | 选择“一次”或“定期” |
间隔 | 可选择执行间隔(仅当您选择“重复”为“定期”时) |
设置到期日期 | 选择“是”或“否” |
到期日期 | 可选择到期日期和时间(仅当“到期日期设置”设置为“是”时) |
㉗ 您创建的日程将被选中,因此单击“确定”
成功注册日程后,将显示一条蓝色背景的消息。
㉘ 计划执行后,会显示在作业列表中。
流程自动化 > 职位
概括
通过上述步骤,您将能够自动缩放 SQL 数据库。
顺便说一句,要实现横向扩展/横向扩展,您只需创建两个类似的 Runbook 并重写计划 (-RequestedServiceObjectiveName) 部分即可。
然而,问题是它只能在指定的时间执行,并且不可能使用重要的负载条件作为阈值来执行自动缩放...
如果有人知道如何执行此操作,请告诉我。如果你能让我知道,我会很高兴!
另外,这次我使用了DTU,但我认为与其他购买的型号可以以类似的方式实现,所以请尝试一下。
最后
我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)
就这样。
这次非常感谢。