培训
认证
Microsoft Certified: Azure Database Administrator Associate - Certifications
使用 Microsoft PaaS 关系数据库产品/服务,管理云、本地和混合关系数据库的 SQL Server 数据库基础结构。
你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于: Azure SQL 托管实例
本文介绍如何使用 Azure 门户和 Azure PowerShell 为 Azure SQL 托管实例配置故障转移组。
若要使端到端 PowerShell 脚本在故障转移组中创建这两个实例,请查阅使用 PowerShell 将实例添加到故障转移组。
要配置故障转移组,你需要事先具有恰当的权限以及一个要用作主实例的 SQL 托管实例。 要开始,请查阅创建实例。
在创建辅助实例和故障转移组之前,请务必检查限制。
若要在主 SQL 托管实例和辅助 SQL 托管实例之间配置一个故障转移组,请考虑以下要求:
创建辅助实例时,所使用的虚拟网络的 IP 地址空间不得与主实例的 IP 地址空间范围重叠。 另外,配置新的辅助实例时,必须指定主实例的区域 ID。
可以使用 Azure 门户 和 PowerShell 来配置辅助虚拟网络并创建辅助实例。
要在 Azure 门户中为辅助实例创建虚拟网络,请按照以下步骤操作:
检查主实例的地址空间。 在 Azure 门户中转到主实例的虚拟网络资源,然后在“设置”下选择“地址空间”。 检查地址范围下的范围:
转到创建虚拟网络页,创建一个计划用于辅助实例的新的虚拟网络。
在“创建虚拟网络”页的“基本信息”选项卡上:
vnet-sql-mi-secondary
。在“创建虚拟网络”页的“IP 地址”选项卡上:
10.1.0.0/16
表示你要用于辅助实例的虚拟网络的地址空间。ManagedInstance
的空子网,该子网专用于辅助实例,使用与默认子网不同的地址范围。 例如,如果主实例使用的地址范围是 10.0.0.0 - 10.0.255.255,则为辅助实例的子网提供子网范围 10.1.1.0 - 10.1.1.255
。
使用“查看 + 创建”以检查设置,然后使用“创建”以创建新的虚拟网络。
虚拟网络准备好后,按照以下步骤在 Azure 门户中创建辅助实例:
转到 Azure 门户中的创建 Azure SQL 托管实例。
在“创建 Azure SQL 托管实例”页的“基本信息”选项卡上:
在“创建 Azure SQL 托管实例”页的“网络”选项卡上,使用“虚拟网络/子网”下的下拉列表选择之前创建的虚拟网络和子网:
在“创建 Azure SQL 托管实例”页的“其他设置”选项卡上,选择“是”以“用作故障转移辅助托管实例”,然后从下拉列表中选择相应的主实例。
根据业务需求配置实例的其余部分,然后使用“查看 + 创建”创建该实例。
为确保异地复制通信流不间断,必须在托管主实例和辅助实例的虚拟网络子网之间建立连接。 有多种方法可以连接不同 Azure 区域中的托管实例,其中包括:
建议使用全局虚拟网络对等互连,作为在故障转移组中的实例之间建立连接的最高性能和最可靠的方法。 全局虚拟网络对等互连使用 Microsoft 主干基础结构,在对等互连的虚拟网络之间提供低延迟、高带宽的专用连接。 在对等互连的虚拟网络之间通信不需公共 Internet、网关或额外加密。
重要
连接涉及其他网络设备的实例的替代方法可能会使连接故障排除或复制速度问题复杂化,可能需要网络管理员的积极参与,并可能显著延长解决时间。
如果使用机制(而不是使用建议的全局虚拟网络对等互连)来建立实例之间的连接,则需要确保:
本文介绍如何使用 Azure 门户 和 PowerShell 在两个实例的网络之间配置全局虚拟网络对等互连。
在 Azure 门户中转到主托管实例的“虚拟网络”资源。
在“设置”下选择“对等互连”,打开“对等互连”页,然后使用命令栏中的“+ 添加”打开“添加对等互连”页。
在“添加对等互连”页中,为以下设置输入或选择值:
设置 | 说明 |
---|---|
远程虚拟网络摘要 | |
对等互连链接名称 | 对等互连的名称在虚拟网络中必须唯一。 本文使用的是 Fog-peering 。 |
虚拟网络部署模型 | 选择“资源管理器”。 |
我知道我的资源 ID | 可以取消选中此框,除非知道资源 ID。 |
订阅 | 从下拉列表中选择“订阅”。 |
虚拟网络 | 从下拉列表中选择辅助实例的虚拟网络。 |
远程虚拟网络对等互连设置 | |
允许“辅助虚拟网络”访问“主虚拟网络” | 选中此框,允许在两个网络之间进行通信。 启用虚拟网络之间的通信可允许资源连接到任意虚拟网络,并以相同的带宽和延迟互相进行通信,就如同它们是连接到同一个虚拟网络一样。 这两个虚拟网络中的资源之间的所有通信都在 Azure 专用网络上进行。 |
允许“辅助虚拟网络”接收来自“主虚拟网络”的转发流量 | 可以选中或取消选中此框,这两种方法都适用于本指南。 有关详细信息,请参阅创建对等互连。 |
允许“辅助虚拟网络”中的网关或路由服务器将流量转发到“主虚拟网络” | 可以选中或取消选中此框,这两种方法都适用于本指南。 有关详细信息,请参阅创建对等互连。 |
启用“辅助虚拟网络”,以使用“主虚拟网络”的远程网关或路由服务器 | 取消选中此框。 有关其他可用选项的详细信息,请参阅创建对等互连。 |
本地虚拟网络摘要 | |
对等互连链接名称 | 远程虚拟网络使用的同一对等互连的名称。 本文使用的是 Fog-peering 。 |
允许“主虚拟网络”访问“辅助虚拟网络” | 选中此框,允许在两个网络之间进行通信。 启用虚拟网络之间的通信可允许资源连接到任意虚拟网络,并以相同的带宽和延迟互相进行通信,就如同它们是连接到同一个虚拟网络一样。 这两个虚拟网络中的资源之间的所有通信都在 Azure 专用网络上进行。 |
允许“主虚拟网络”接收来自“辅助虚拟网络”的转发流量 | 可以选中或取消选中此框,这两种方法都适用于本指南。 有关详细信息,请参阅创建对等互连。 |
允许“主虚拟网络”中的网关或路由服务器将流量转发到“辅助虚拟网络” | 可以选中或取消选中此框,这两种方法都适用于本指南。 有关详细信息,请参阅创建对等互连。 |
启用“主虚拟网络”,以使用“辅助虚拟网络”的远程网关或路由服务器 | 取消选中此框。 有关其他可用选项的详细信息,请参阅创建对等互连。 |
使用“添加”来配置与所选虚拟网络的对等互连,并自动导航回“对等互连”页,该页面显示两个网络已连接:
无论两个实例之间选择的连接机制为何,网络都必须满足以下异地复制流量的要求:
可以使用 Azure 门户和 PowerShell 配置端口通信和 NSG 规则。
若要在 Azure 门户中打开网络安全组 (NSG) 端口,请执行以下步骤:
转到主实例的网络安全组资源。
在“设置”下,选择“入站安全规则”。 检查你是否已经有了允许端口 5022 和范围 11000-11999 的流量的规则。 如果是,并且源满足业务需求,请跳过此步骤。 如果规则不存在,或者要使用其他源(例如更加安全的 IP 地址),请删除现有规则,然后从命令栏中选择“+ 添加”,从而打开“添加入站安全规则”窗格:
在“添加入站安全规则”窗格中,输入或选择以下设置的值:
设置 | 建议的值 | 说明 |
---|---|---|
Source | IP 地址或服务标记 | 通信源的筛选器。 IP 地址是最安全的,建议用于生产环境。 而服务标记则适用于非生产环境。 |
源服务标记 | 如果选择了服务标记作为源,则提供 VirtualNetwork 作为源标记。 |
默认标记是表示 IP 地址类别的预定义标识符。 VirtualNetwork 标记表示所有虚拟和本地网络地址空间。 |
源 IP 地址 | 如果选择了 IP 地址作为源,则提供辅助实例的 IP 地址。 | 使用 CIDR 表示法(例如 192.168.99.0/24 或 2001:1234::/64)或 IP 地址(例如 192.168.99.0 或 2001:1234::)提供地址范围。 还可以使用 IPv4 或 IPv6 提供 IP 地址或地址范围的逗号分隔列表。 |
源端口范围 | 5022 | 这指定此规则允许哪些端口流量。 |
服务 | 自定义 | 该服务会指定此规则的目标协议和端口范围。 |
目标端口范围 | 5022 | 这指定此规则允许哪些端口流量。 此端口应与源端口范围相匹配。 |
操作 | 允许 | 允许在指定端口上进行通信。 |
协议 | TCP | 确定端口通信协议。 |
优先级 | 1200 | 规则按优先级顺序进行处理:数字越低,优先级越高。 |
名称 | allow_geodr_inbound | 规则的名称。 |
说明 | 可选 | 可以选择提供说明,或将此字段留空。 |
选择“添加”,保存设置并添加新规则。
重复这些步骤,为端口范围 11000-11999
添加另一个入站安全规则,其名称可以是 allow_redirect_inbound,优先级略高于 5022 规则,例如 1100
。
在设置下,选择出站安全规则。 检查你是否已经有了允许端口 5022 和范围 11000-11999 的流量的规则。 如果是,并且源满足业务需求,请跳过此步骤。 如果规则不存在,或者要使用其他源(例如更加安全的 IP 地址),请删除现有规则,然后从命令栏中选择“+ 添加”,从而打开“添加出战安全规则”窗格。
对于“添加出站安全规则”窗格中的端口 5022 和范围 11000-11999
,请使用与入站端口相同的配置。
转到辅助实例的网络安全组,重复这些步骤,使两个网络安全组都具有以下规则:
11000-11999
上的入站流量11000-11999
上的出站流量使用 Azure 门户或 PowerShell 为托管实例创建故障转移组。
使用 Azure 门户为 SQL 托管实例创建故障转移组。
在 Azure 门户的左侧菜单中选择“Azure SQL”。 如果 Azure SQL 不在列表中,请选择“所有服务”,然后在搜索框中键入“Azure SQL” 。 (可选)选择“Azure SQL”旁边的星号,将其作为收藏项添加到左侧导航栏。
选择要添加到故障转移组中的主托管实例。
在“数据管理”下,选择“故障转移组”,然后使用“添加组”以打开“实例故障转移组”页:
在“实例故障转移组”页上:
开始部署故障转移组后,你将返回到“故障转移组”页面。 刷新页面将,显示部署完成后的新故障转移组。
使用 Azure 门户或 PowerShell 测试故障转移组的故障转移。
备注
如果实例位于不同的订阅或资源组中,从辅助实例启动故障转移。
使用 Azure 门户测试故障转移组的故障转移。
转到 Azure 门户中的主托管实例或辅助托管实例。
在数据管理下,选择故障转移组。
在“故障转移组”窗格中,记下哪个实例是主实例,哪个实例是辅助实例。
在“故障转移组”窗格上,从命令栏中选择“故障转移”。 在有关 TDS 会话断开连接的警告上选择“是”,并记下许可含义。
在“故障转移组”窗格上,故障转移成功后,实例会切换角色,从而使之前的辅助实例成为新的主实例,而之前的主实例将成为新的辅助实例。
重要
如果角色未切换,请检查实例与相关 NSG 之间的连接以及防火墙规则。 仅当角色切换后才继续执行下一步。
(可选)在“故障转移组”窗格上,使用“故障转移”切换回角色,从而使原始主实例重新成为主实例。
可以使用 Azure 门户、PowerShell、Azure CLI 和 REST API 修改现有故障转移组,例如更改故障转移策略。
要使用 Azure 门户修改现有的故障转移组,请遵照以下步骤执行:
转到 Azure 门户中的 SQL 托管实例。
在“数据管理”下,选择“故障转移组”以打开“故障转移组”窗格。
在“故障转移组”窗格中,从命令栏中选择“编辑配置”以打开“编辑故障转移组”窗格:
配置故障转移组后,更新应用程序的连接字符串,以指向“读/写”侦听器终结点,以便应用程序在故障转移后继续连接到主实例。 通过使用侦听器终结点,无需在每次故障转移组故障转移时都手动更新连接字符串,因为流量始终会被路由到当前的主数据库。 还可以将只读工作负载指向“只读”侦听器终结点。
重要
虽然支持使用实例专用连接字符串连接到故障转移组中的实例时,但强烈建议不要这样做。 应改用侦听器端点。
若要在 Azure 门户中找到侦听器终结点,请转到你的 SQL 托管实例,然后在“数据管理”下选择“故障转移组”。
向下滚动,查找侦听器终结点:
fog-name.dns-zone.database.windows.net
,会将流量路由到主实例。fog-name.secondary.dns-zone.database.windows.net
,会将流量路由到辅助实例。只要订阅与同一个 Microsoft Entra 租户关联,就可以在两个不同订阅中的 SQL 托管实例之间创建故障转移组。
PartnerSubscriptionId
参数来执行此操作。properties.managedInstancePairs
参数中包含的每个实例 ID 都可以具有自己的订阅 ID。重要
Azure 门户不支持创建跨不同订阅的故障转移组。 对于跨不同订阅和/或资源组的故障转移组,不能通过 Azure 门户从主 SQL 托管实例手动启动故障转移。 改为从异地辅助实例启动它。
由于广域网的延迟时间较长,异地复制使用了异步复制机制。 如果主数据库发生故障,异步复制会导致数据丢失不可避免。 为了防止这些关键事务数据丢失,应用程序开发人员可以在提交事务后立即调用 sp_wait_for_database_copy_sync 存储过程。 调用 sp_wait_for_database_copy_sync
会阻止调用线程,直到最后提交的事务已传输并强制执行到辅助数据库的事务日志中。 但是,它不会等待传输的事务在辅助数据库上进行重播(恢复)。 sp_wait_for_database_copy_sync
范围限定为特定异地复制链接。 对主数据库具有连接权限的任何用户都可以调用此过程。
备注
sp_wait_for_database_copy_sync
防止特定事务异地故障转移后数据丢失,但不保证完全同步进行读取访问。 sp_wait_for_database_copy_sync
过程调用导致的延迟可能很明显,具体取决于调用时主数据库上尚未传输的事务日志大小。
假设实例 A 是主实例,实例 B 是现有的辅助实例,实例 C 是第三个区域中的新辅助实例。 若要进行转换,请执行以下步骤:
备注
完成步骤 2 到 3 后,如果实例 A 发生灾难性故障,其中的数据库将仍不受保护。
假设实例 A 是主实例,实例 B 是现有的辅助实例,实例 C 是第三个区域中的新主实例。 若要进行转换,请执行以下步骤:
注意
完成步骤 3 到 4 后,如果实例 A 发生灾难性故障,其中的数据库将仍不受保护。
重要
删除故障转移组时,也会删除侦听器终结点的 DNS 记录。 此时,其他人有可能创建同名的故障转移组。 由于故障转移组名称必须全局唯一,因此这将阻止你再次使用相同名称。 为最大程度地降低这种风险,请勿使用通用的故障转移组名称。
故障转移组中的实例必须具有匹配的更新策略。 若要在属于故障转移组的实例上启用“始终保持最新”更新策略,请先在辅助实例上启用“始终保持最新”更新策略,等待更改生效,然后才能更新主实例的策略。
虽然更改故障转移组中主实例的更新策略会导致实例故障转移到另一个本地节点(类似于不属于故障转移组的实例的管理操作),但不会导致故障转移组进行故障转移,从而使主实例保持为主角色。
注意
将更新的策略更改为“始终保持最新”后,将无法再将其更改回“SQL Server 2022”更新策略。
系统数据库不会复制到故障转移组中的辅助实例。 若要启用依赖于系统数据库中的对象的方案,请确保在辅助实例上创建相同的对象并让辅助实例与主实例保持同步。
例如,如果你计划在辅助实例上使用相同的登录名,请确保使用相同的 SID 创建它们。
-- Code to create login on the secondary instance
CREATE LOGIN foo WITH PASSWORD = '<enterStrongPasswordHere>', SID = <login_sid>;
有关详细信息,请参阅复制登录名和代理作业。
故障转移组中的实例保持独立的 Azure 资源,对主实例配置所做的任何更改都不会自动复制到辅助实例。 确保同时在主要和辅助实例上执行所有相关更改。 例如,如果在主实例上更改备份存储冗余或长期备份保留策略,请确保在辅助实例上也进行更改。
可以在同一服务层级内将主实例和辅助实例纵向扩展或缩减到不同的计算大小,或纵向扩展或缩减到不同的服务层级。 在同一服务层级内纵向扩展时,请先纵向扩展异地辅助实例,然后再纵向扩展主实例。 在同一服务层级内纵向缩减时,按相反顺序操作:先纵向缩减主数据库,再纵向缩减辅助数据库。 将实例扩展到其他服务层级时,请遵循相同的顺序。
建议按此顺序进行,以避免出现以下问题:较低 SKU 的异地辅助实例过载,并且必须在升级或降级过程中重新设定种子。
通过 Azure 基于角色的访问控制 (Azure RBAC) 管理故障转移组的权限。
SQL 托管实例参与者角色的范围限定为主要托管实例和辅助托管实例的资源组,足以对故障转移组执行所有管理操作。
下表提供了最低所需权限的精细视图,以及它们各自针对故障转移组的管理操作所需的最小范围级别:
管理操作 | 权限 | 范围 |
---|---|---|
创建/更新故障转移组 | Microsoft.Sql/locations/instanceFailoverGroups/write |
主托管实例和辅助托管实例的资源组 |
创建/更新故障转移组 | Microsoft.Sql/managedInstances/write |
主托管实例和辅助托管实例 |
对故障转移组进行故障转移 | Microsoft.Sql/locations/instanceFailoverGroups/failover/action |
主托管实例和辅助托管实例的资源组 |
对故障转移组强制执行故障转移 | Microsoft.Sql/locations/instanceFailoverGroups/forceFailoverAllowDataLoss/action |
主托管实例和辅助托管实例的资源组 |
删除故障转移组 | Microsoft.Sql/locations/instanceFailoverGroups/delete |
主托管实例和辅助托管实例的资源组 |
创建新的故障转移组时,应注意以下限制:
使用故障转移组时,应注意下列限制:
也可以使用 Azure PowerShell、Azure CLI 和 REST API 以编程方式管理故障转移组。 下表描述了可用的命令集。 故障转移组包含一组用于管理的 Azure Resource Manager API,其中包括 Azure SQL 数据库 REST API 和 Azure PowerShell cmdlet。 这些 API 需要使用资源组,并支持 Azure 基于角色的访问控制 (Azure RBAC)。 有关如何实现访问角色的详细信息,请参阅 Azure 基于角色的访问控制 (Azure RBAC)。
Cmdlet | 说明 |
---|---|
New-AzSqlDatabaseInstanceFailoverGroup | 此命令会创建故障转移组,并将其同时注册到主实例和辅助实例 |
Set-AzSqlDatabaseInstanceFailoverGroup | 修改故障转移组的配置 |
Get-AzSqlDatabaseInstanceFailoverGroup | 检索故障转移组的配置 |
Switch-AzSqlDatabaseInstanceFailoverGroup | 触发故障转移组到辅助实例的故障转移 |
Remove-AzSqlDatabaseInstanceFailoverGroup | 删除故障转移组 |
培训
认证
Microsoft Certified: Azure Database Administrator Associate - Certifications
使用 Microsoft PaaS 关系数据库产品/服务,管理云、本地和混合关系数据库的 SQL Server 数据库基础结构。