你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用由用户启动的手动故障转移重启实例 - Azure SQL 托管实例

适用于:Azure SQL 托管实例

本文介绍如何通过使用 PowerShell、Azure CLI 或 REST API 对辅助计算节点执行用户启动的手动故障转移来重启 Azure SQL 托管实例

可以在“常规用途 (GP)”和“业务关键 (BC)”服务层级上对主节点进行故障转移,也可以在 BC 服务层级上对辅助只读副本节点进行手动故障转移。

注意

本文中的故障转移是指在辅助节点上启动 SQL Server 数据库引擎进程,与故障转移组的跨区域故障转移无关。

何时使用手动故障转移

可用性是 SQL 托管实例平台的基本组成部分,它通过提供本地备用计算节点来托管 SQL Server 数据库引擎进程,它的工作对于数据库应用程序是透明的。 当 SQL Server 数据库引擎进程在主计算节点上脱机并且在辅助计算节点上联机时,会发生故障转移。 通常,在检测到故障、节点降级时或每月定期软件更新期间,SQL 托管实例计算节点之间的故障转移由平台自动进行和管理。

整个故障转移操作包括让辅助节点上的 SQL Server 数据库引擎进程联机,验证数据库状态,最后将客户端连接重定向到新的主节点。 在故障转移操作的最后一步中,客户端连接仅会失败很短的时间(通常不到一分钟)。

你可能会出于以下原因来执行手动故障转移以在不同的节点上重启引擎进程:

  • 登录失败,或由于性能问题导致速度缓慢。
  • 在部署到生产之前测试应用程序的故障转移复原能力。
  • 测试端到端系统在自动故障转移时的错误复原能力。
  • 测试故障转移如何影响现有数据库会话。
  • 查询性能下降(重启实例有助于缓解性能问题)。

在部署到生产环境之前,请确保应用程序具有故障转移复原能力,这有助于降低生产环境中出现应用程序故障的风险,且有助于为客户提高应用程序可用性。 通过以下视频了解有关测试应用程序的云就绪情况的详细信息:

下表描述了故障转移操作期间基于服务层和可用性模型的 SQL 托管实例预期行为:

服务层级 可用性模型 预期故障转移行为 潜在的故障转移行为(异常)
常规用途 区域冗余
(单一可用性区域)
SQL 进程在同一 VM 上重启。 SQL 进程在不同的 VM 上重启。
常规用途 区域冗余(预览)
(多个可用性区域)
SQL 进程在同一 VM 上重启。 SQL 进程在不同的 VM 上重启。
业务关键 区域冗余
(单一可用性区域)
随机次要副本将提升为主要副本。 空值
业务关键 区域冗余
(多个可用性区域)
随机次要副本在相同或不同的可用性区域中提升为主要副本。 空值

权限

初始化故障转移的用户需要具有下列 Azure 角色之一:

  • “订阅所有者”角色或
  • SQL 托管实例参与者角色或
  • 具有以下权限的自定义角色:
    • Microsoft.Sql/managedInstances/failover/action

使用手动故障转移重启实例

可使用 PowerShell、Azure CLI 或 REST API,通过手动故障转移重启实例。

Az.Sql 的最低版本须为 v2.9.0。 请考虑使用 Azure 门户中的 Azure Cloud Shell,其中始终提供最新的 PowerShell 版本。

作为一项先决条件,请使用以下 PowerShell 脚本来安装所需的 Azure 模块。 此外,请选择要进行故障转移的 SQL 托管实例所在的订阅。

$subscription = 'enter your subscription ID here'
Install-Module -Name Az
Import-Module Az.Accounts
Import-Module Az.Sql

Connect-AzAccount
Select-AzSubscription -SubscriptionId $subscription

将 PowerShell 命令 Invoke-AzSqlInstanceFailover 与以下示例结合使用以启动主节点的故障转移(适用于 BC 和 GP 服务层)。

$ResourceGroup = 'enter resource group of your MI'
$ManagedInstanceName = 'enter MI name'
Invoke-AzSqlInstanceFailover -ResourceGroupName $ResourceGroup -Name $ManagedInstanceName

使用以下 PowerShell 命令来对只读辅助节点进行故障转移(仅适用于 BC 服务层)。

$ResourceGroup = 'enter resource group of your MI'
$ManagedInstanceName = 'enter MI name'
Invoke-AzSqlInstanceFailover -ResourceGroupName $ResourceGroup -Name $ManagedInstanceName -ReadableSecondary

监视故障转移

对于“业务关键”和“常规用途”服务层级中的实例,对用户发起的故障转移进度的监控会有所不同。

若要监视用户发起的故障转移的进度,请使用:

  • sys.dm_os_sys_info,用于检查常规用途服务层级的系统运行时间。
  • sys.dm_hadr_fabric_replica_states,用于检查“业务关键”服务层级的可用副本。

故障转移过程的最后一步是将客户端连接重定向到新的主节点。 在故障转移期间,无论服务层级如何,客户端短暂的连接中断(通常持续不到一分钟)都表明故障转移已成功。

“常规用途”服务层级

以下 T-SQL 示例显示了常规用途服务层级节点上 SQL 进程的运行时间:

SELECT sqlserver_start_time, sqlserver_start_time_ms_ticks FROM sys.dm_os_sys_info

SQL 进程启动时间是 SQL Server 数据库引擎进程在节点上启动的时间。 故障转移完成后该时间会重新开始。 在“常规用途”服务层级中启动实例的故障转移之前和之后运行此查询,以监视故障转移操作的进度。

“业务关键”服务层级

以下 T-SQL 示例指示哪个节点当前是“业务关键”服务层级的主要副本:

SELECT DISTINCT replication_endpoint_url, fabric_replica_role_desc FROM sys.dm_hadr_fabric_replica_states

故障转移完成后,托管主副本的节点将发生更改。 在“业务关键”服务层中启动实例故障转移之前和之后运行此查询,以监视故障转移操作的进度。

注意

整个故障转移过程在高强度工作负载期间可能需要几分钟才能完成,因为实例引擎确保在启动故障转移之前,辅助节点上的事务能够追赶上主节点上的事务。

限制

考虑用户启动的手动故障转移的以下功能限制:

  • 同一 SQL 托管实例上每 15 分钟仅可以初始化一次 (1) 故障转移。
  • 不允许故障转移:
    • 在自动备份系统完成对新数据库的第一次完全备份之后才能进行。
    • 如果正在进行数据库还原。
  • 对于“业务关键”服务层级中的实例:
    • 若要使故障转移请求得到接受,必须存在仲裁副本。
    • 不能指定要在其上启动故障转移的可读辅助副本。