适用于:
Azure SQL 托管实例
本文介绍如何使用 Azure 门户、PowerShell 或 Azure CLI 创建 Azure SQL 托管实例的实例池,以及如何使用 Powershell 或 Azure CLI 将实例移入和移出池。
实例池可将具有共享资源的多个实例部署到单个虚拟机,从而提供方便且经济高效的基础结构来迁移多个 SQL Server 实例,而无需将较小且计算密集程度较低的工作负载合并到较大的 SQL 托管实例。
先决条件
要创建实例池,应具有:
子网大小注意事项
计划使用实例池时,请仔细规划子网大小。 有关子网调整大小指南,请参阅确定所需的子网大小和范围。
计算包含多个常规用途实例的一个实例池所需的 IP 地址数时,请使用以下公式:
2 * (5 + (3 * # of MIs)) + 5
# of MIs
是指计划预配的最大潜在实例数。 一个池中实例的最大可能数为 40。
创建实例池
可以使用 Azure 门户、PowerShell 或 Azure CLI 来创建实例池。 考虑以下情况:
- 目前只有标准系列 (Gen5) 或高级系列硬件上的常规用途服务层级可用。
- 池名称只能包含小写字母、数字和连字符,且不能以连字符开头。
- Azure 混合权益适用于实例池级别。 可以在创建池时设置许可证类型,并在创建池后更新许可证类型。
重要
部署实例池的操作耗时较长,可能需要长达四个半小时。
要在 Azure 门户中创建实例池,请执行以下步骤:
在 Azure 门户中搜索实例池,然后选择实例池服务以打开“实例池”页:
在“实例池”页上,选择“+ 创建”以打开“创建 Azure SQL 托管实例池”页:
在创建 Azure SQL 托管实例池上:
- 在“基本信息”选项卡上,填写项目和实例详细信息。
- 使用“计算 + 存储”下的“配置实例池”打开“计算 + 存储”页,并选择池所使用的服务层级、计算硬件和 SQL Server 许可证。 使用“应用”保存计算设置,然后返回到“创建 Azure SQL 托管实例池”页。
- 选择现有虚拟网络,或在“网络”选项卡上配置新的虚拟网络。
- (可选)在“其他设置”选项卡上为池配置非默认维护时段。
- 在“查看 + 创建”选项卡上查看配置,然后选择“创建”以创建实例池。
可以从“通知”监视池部署。
创建实例池后,可以使用 Azure 门户 在池中创建新实例,也可以使用 PowerShell 或 Azure CLI 将现有实例移到池中。
要创建实例池,请使用 New-AzSqlInstancePool。
考虑以下情况:
- 对于
LicenseType
,如果没有可用于 Azure 混合权益折扣的 SQL Server 许可证,请使用 Azure 混合权益的 BasePrice 或 LicenseIncluded。
- 使用
Get-AzLocation | select displayname, location
获取可用实例池的区域列表。
运行以下示例脚本,在标准系列 (Gen5) 硬件上创建具有 8 个 vCore 的新实例池:
$virtualNetwork = Get-AzVirtualNetwork -Name "<vNetName>" -ResourceGroupName "<resourceGroupName>"
$miSubnet = Get-AzVirtualNetworkSubnetConfig -Name "<miSubnetName>" -VirtualNetwork
$virtualNetwork$miSubnetConfigId = $miSubnet.Id
$parameters = @{
ResourceGroupName = "<resource group name>"
Name = "<instance pool name>"
LicenseType = "LicenseIncluded"
VCore = 8
Edition = "GeneralPurpose"
ComputeGeneration = "Gen5"
Location = "<region>"
$virtualNetwork = Get-AzVirtualNetwork -Name "<vNetName>" -ResourceGroupName "<resourceGroupName>"
$miSubnet = Get-AzVirtualNetworkSubnetConfig -Name "<miSubnetName>" -VirtualNetwork $virtualNetwork
$miSubnetConfigId = $miSubnet.Id
SubnetId = $miSubnetConfigId
}
$instancePool = New-AzSqlInstancePool @parameters
要创建实例池,请使用 az sql instance-pool create。
考虑以下情况:
- 对于
--license-type
,如果没有可用于 Azure 混合权益折扣的 SQL Server 许可证,请使用 Azure 混合权益的 BasePrice 或 LicenseIncluded。
运行以下示例脚本,在标准系列 (Gen5) 硬件上创建具有 8 个 vCore 的新实例池:
# Create the instance pool
az sql instance-pool create \
--license-type LicenseIncluded \
--location <region> \
--name <pool name> \
--capacity 8 \
--tier GeneralPurpose \
--family Gen5 \
--resource-group <resource group name> \
--subnet <subnet name> \
--vnet-name <vnet name>
在池中创建新实例
创建池后,可以使用 Azure 门户、PowerShell 或 Azure CLI 在池中创建新实例。
考虑以下情况:
- 必须为新实例指定许可证类型,而且实例的许可证类型必须与池的许可证类型匹配。
若要使用 Azure 门户在池中创建新实例,请执行以下步骤:
在 Azure 门户中,转到 Azure SQL 页面。
在 Azure SQL 页上,选择“+ 创建”以打开“选择 SQL 部署选项”。
在“SQL 托管实例”磁贴上,选择“单实例”作为资源类型,然后选择“创建”来打开“创建 Azure SQL 托管实例”页。
在“创建 Azure SQL 托管实例”页的“基本信息”选项卡上:
- 选择包含现有实例池的资源组。
- 在“托管实例详细信息”下,对于“是否属于实例池?”选择“是”,以在实例池内创建新实例。
- 从“实例池”下拉列表中选择池。
从下拉列表中选择实例池后,会看到实例的计算成本更改为 0,因为计算包含在池的成本中。
在“创建 Azure SQL 托管实例”页上填写剩余的详细信息,以在池中创建实例。 有关详细信息,请参阅创建 Azure SQL 托管实例。
选择“查看 + 创建”以查看新实例的设置,然后使用“创建”在所选池中部署实例。
要通过 PowerShell 标识池参数,请使用 Get-AzSqlInstancePool,然后使用 New-AzSqlInstance 在特定池中创建实例。
运行以下示例脚本在池中创建新实例:
$adminCredential = Get-Credential
$instancePool = Get-AzSqlInstancePool -ResourceGroupName <resource group name> -Name <instance pool name>
$instance01Params = @{
Name = $instance01
VCore = 2
StorageSizeInGB = 32
AdministratorCredential = $adminCredential
}
$instance01 = $instancePool | New-AzSqlInstance @instance01Params
若要使用 Azure CLI 在池中创建新实例,请在使用 --instance-pool-name
创建实例时在 参数中提供池名称:
#obtain the subnetId of an instance pool
sqlmipoolSubnetId=$(az sql instance-pool show -g <resource group name> -n <instance pool name> --query subnetId --output tsv)
az sql mi create \
--license-type LicenseIncluded \
--name <Instance name> \
--admin-user <username> \
--admin-password <password> \
--capacity 2 \
--instance-pool-name <instance pool name> \
--storage 32 \
--resource-group <resource group name> \
--subnet $sqlmipoolSubnetId
移动现有实例
可以使用 PowerShell 或 Azure CLI 将现有实例移入和移出池,前提是:
- 其与池位于同一资源组。
- 其与池位于同一虚拟网络和子网上。
- 其符合实例池资源限制。
将现有实例移入池中时,池级别的设置优先于实例级设置。 例如,实例继承在池级别设置的许可证类型和维护时段。 将实例移出池后,其会保留从池继承的设置。 唯一的例外是许可证类型,从实例池中删除实例时,许可证类型默认返回“LicenseIncluded”– 将实例移出池后,必须手动配置 Azure 混合权益和混合故障转移权限权益。
目前不支持使用 Azure 门户在池中移动现有实例。
若要使用 PowerShell 将实例移入池中,请在使用 Set-AzSqlInstance 时提供池名称:
$instance01 | Set-AzSqlInstance -InstancePoolName $instancePoolName
要将实例移出池,请提供空白的池名称:
$instance01 | Set-AzSqlInstance -InstancePoolName ''
若要使用 Azure CLI 将实例移入池中,请在使用 --instance-pool-name
更新实例时在 参数中提供池名称:
az sql mi update \
--name <instance name> \
--instance-pool-name <instance pool name> \
--resource-group <resource group name>
要将实例移出池,请在使用 az sql mi update 更新实例时在 --instance-pool-name
参数中提供空白名称:
az sql mi update \
--name <instance name> \
--instance-pool-name '' \
--resource-group <resource group name>
连接到池中的实例
可以选择使用专用终结点或公共终结点连接到池中的实例。 若要使用专用终结点,需要使用 Azure 专用链接。
若要使用公共终结点连接到池中的实例,需要启用终结点,然后允许网络安全组中的公共终结点流量。
创建数据库
为池中的实例创建数据库与为单实例创建数据库相同。 可以使用 Azure 门户、PowerShell 或 Azure CLI 创建新数据库。
若要使用 Azure 门户为现有 SQL 托管实例创建新数据库,请执行以下步骤:
- 转到 Azure 门户中的 SQL 托管实例。
- 在“概述”窗格上,从命令栏选择“+ 新建数据库”,打开“创建 Azure SQL 托管数据库”页。
- 提供新数据库的详细信息。
- 选择“查看 + 创建”以查看新的数据库配置,然后使用“创建”部署数据库。
要为实例创建新的数据库,请使用 New-AzSqlInstanceDatabase:
$databaseParams = @{
Name = "<database name>"
InstanceName = "<instance name>"
ResourceGroupName = "<resource group>"
}
New-AzSqlInstanceDatabase @databaseParams
要为实例创建新的数据库,请使用 az sql midb create:
az sql midb create
--managed-instance <Instance name> \
--name <Database name> \
--resource-group <Resource group name>
获取池使用情况
可以使用 Azure 门户、PowerShell 或 Azure CLI 确定池中的资源如何使用资源。
若要获取池中的实例列表,请使用 Azure 门户查看“实例池”页。 选择池名称,在“概述”页上查看池中的实例:
可以使用 PowerShell 来确定池内资源的使用情况。
要获取池中的实例列表,请使用 Get-AzSqlInstance:
$instancePool | Get-AzSqlInstance
要获取池资源使用状况,请使用 Get-AzSqlInstancePoolUsage:
$instancePool| Get-AzSqlInstancePoolUsage
可以添加 -ExpandChildren 参数以获取池及其内部实例的详细概述:
$instancePool | Get-AzSqlInstancePoolUsage –ExpandChildren
要列出实例中的数据库,请使用 Get-AzSqlInstanceDatabase:
$databaseParams = @{
InstanceName = $instance01Name
ResourceGroupName = $resourceGroupName
}
$databases = Get-AzSqlInstanceDatabase @databaseParams
注意
要检查部署到池的实例限制以及每个实例池的数据库限制,请查看资源限制。
要获取有关池中的实例和资源使用状况的信息,请使用 az sql instance-pool show:
sqlmipoolId=$(az sql instance-pool show --name <pool name> \
--resource-group <resource group name> --query id | cut -d '"' -f 2) \
az sql mi list --resource-group <resource group name> \
--query "[?instancePoolId == '$sqlmipoolId'].{sqlmiName:name}" -o tsv
更新实例池
可以使用 Azure 门户、Powershell 或 Azure CLI 更新现有数据库的设置。
使用 Azure 门户中“实例池”页的“设置”下的“计算 + 存储”窗格,更新池的许可证类型、vCore 大小和硬件类型:
使用 Azure 门户中“实例池”页“设置”下的“维护”窗格,更新池的维护时段:
可以使用 PowerShell 对实例池限制进行更改。
以下示例脚本更改了许可证类型、vCore 大小和硬件类型:
更改许可证类型:
$instancePoolParams = @{
LicenseType = "BasePrice"
VCores = 16
ComputeGeneration = "Gen8"
}
$instancePool | Set-AzSqlInstancePool @instancePoolParams
还可以确定可用的维护时段计划:
$parameters = @{
Location = $location
MaintenanceScope = "SQLManagedInstance"
}
$configurations = Get-AzMaintenancePublicConfiguration @parameters
$maintenanceWindowOptions = $configurations | Where-Object { $_.Location -eq $location -and $_.MaintenanceScope -eq "SQLManagedInstance" }
然后可以指定时段选项来更改维护时段,例如:
$instancePoolParams = @{
MaintenanceConfigurationId = $maintenanceWindowOptions[1].Id
}
$instancePool | Set-AzSqlInstancePool @instancePoolParams
要更新池的配置设置,请使用 az sql instance-pool update:
az sql instance-pool update --name <pool name> \
--resource-group <resource group> --capacity 16 \
--license-type LicenseIncluded --family Gen8IM
要更新维护时段:
maintenanceWindowOptions=$(az maintenance public-configuration list \
--query "[?location==<eastus2>&&contains(maintenanceScope,'SQLManagedInstance')]")
az sql instance-pool update --name <pool name> \
--resource-group <resource group> --maint-config-id <maintenance configuration id>
更新共用实例
如果尚未超过池资源限制,则可以使用 PowerShell 或 Azure CLI 修改池中实例的资源配置,
要修改池中实例的资源参数,请使用 Set-AzSqlInstance。
以下样本将 Instance1 的 vCore 更新为 8,并将存储大小更改为 512 GB:
$instancePoolParams = @{
VCore = 8
StorageSizeInGB = 512
InstancePoolName = $instancePoolName
}
$instance1name | Set-AzSqlInstance @instancePoolParams
要修改池中实例的资源参数,请使用 az sql mi update。
以下样本将 Instance1 的 vCore 更新为 8,并将存储大小更改为 512 GB:
az sql mi update \
--name Instance1 \
--resource-group <resource group name> \
--capacity 8 \
--storage 512
删除实例池
一旦将池中的所有实例删除或移出池,就可以使用 PowerShell 或 Azure CLI 删除实例池。
要删除实例池,请使用 Remove-AzSqlInstancePool。
以下示例脚本删除了空实例池:
$params = @{
ResourceGroupName = "<resource group name>"
Name = "<instance pool name>"
}
Remove-AzSqlInstancePool @params
要删除实例池,请使用 az sql instance-pool delete。
以下示例脚本删除了空实例池:
az sql instance-pool delete
--name <pool name>
--resource group <resource group name>
实例池操作
下表显示了可用的实例池操作:
命令 |
Azure 门户 |
PowerShell |
Azure CLI |
创建实例池 |
是 |
是 |
是 |
更新池属性 |
是 |
是 |
是 |
检查池使用情况和属性 |
是 |
是 |
是 |
删除实例池 |
是 |
是 |
是 |
在池中创建新的托管实例 |
是 |
是 |
是 |
将托管实例移入池中 |
否 |
是 |
是 |
从池中删除托管实例 |
是 |
是 |
是 |
将托管实例移出池 |
否 |
是 |
是 |
在池内的实例中创建数据库 |
是 |
是 |
是 |
从 SQL 托管实例中删除数据库 |
是 |
是 |
是 |
限制
池中的实例具有以下限制:
- 池名称只能包含小写字母、数字和连字符,且不能以连字符开头。
- 池中的所有实例均使用相同的许可模型。 为实例指定的许可证模型与池的许可证模型不同时,将使用池的许可证模型。 将实例移出池后,其会自动切换到全额付费许可证 (
LicenseType
= 'LicenseIncluded')。 手动激活 Azure 混合权益或混合故障转移权限权益以更改许可模型。
- 共用实例必须属于同一子网和资源组。 只能在池的子网和同一资源组中将实例移入和移出池。
- 不支持将实例池移到另一个子网。
- 只有“常规用途”服务层级可用。 “下一代常规用途”和“业务关键”服务层级不可用。
- 仅支持标准系列 (Gen5) 或高级系列硬件。 不支持高级系列内存优化硬件。
- 池中实例的最大可能数为 40。
- 只有删除或移出池中的所有实例后,才能删除实例池。
- 无法使用 Azure 门户将实例移入和移出池。 请改为使用 PowerShell 或 Azure CLI。
- 池中的实例不支持以下 SQL 托管实例功能:
支持请求
在 Azure 门户中创建和管理实例池的支持请求。
要在 Azure 门户中创建新的支持请求,请执行以下步骤:
在 Azure 门户中打开“新建支持请求”页。
在“新建支持请求”中提供以下信息:
- 对于“问题类型”,选择
Technical
。
- 从下拉列表中选择相应的订阅。
- 对于“服务类型”,选择
SQL Managed Instance
。
- 对于“资源”,如果 SQL 托管实例已存在,请提供该实例的名称,如果无法在池中部署实例,则选择“常规问题”。
- 对于“摘要”,请键入
instance pools
。
- 对于“问题类型”,请选择
Create, Scale, Stop, Start, or Delete Resources
。
- 对于“问题子类型”,请选择
Instance Pools
。
在后续页上选择“下一步”,直到能够创建支持请求。
要创建更大型的 SQL 托管实例部署(无论是否具有实例池),都可能需要调高区域配额。 有关详细信息,请参阅请求增加 Azure SQL 数据库的配额。 实例池的部署逻辑会将在池级别消耗的 vCore 总数与你的配额进行比较,确定你是否可在不进一步增加配额的情况下创建新资源。
相关内容