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

Azure SQL 托管实例中的可靠性

本文介绍 Azure SQL 托管实例中的可靠性支持,内容涵盖通过可用性区域实现区域内复原能力,以及有关多区域部署的信息。

可靠性是你和Microsoft之间的共同责任。 可以使用本指南确定哪些可靠性选项满足特定业务目标和运行时间目标。

SQL 托管实例是一个完全托管的平台即服务(PaaS)数据库引擎。 它处理大多数数据库管理功能,例如升级、修补、备份和监视,而无需用户参与。 SQL 托管实例是一种可缩放的云数据库服务,可在最新稳定版本的 SQL Server 数据库引擎和具有内置高可用性的修补作系统上运行。 它几乎提供了与 SQL Server 的 100% 功能兼容性。

生产部署建议

对于 SQL 托管实例的大部分生产部署,请考虑以下建议:

可靠性体系结构概述

常规用途 SQL 托管实例在 Azure Service Fabric 管理的单个节点上运行。 每当数据库引擎或作系统升级或检测到故障时,SQL 托管实例都与 Service Fabric 配合使用,将无状态数据库引擎进程移动到具有足够可用容量的另一个无状态计算节点。 数据库文件存储在具有内置冗余功能的 Azure Blob 存储中。 数据和日志文件从原始计算节点分离,附加到新初始化的数据库引擎进程。

业务关键 SQL 托管实例在群集中使用多个副本。 群集包括两种类型的副本:

  • 可供用户为读写客户工作负荷进行访问的单个主要副本

  • 最多可有五个 次要副本,这些副本包含计算和存储数据的副本。

主要副本持续且按顺序地将更改推送到次要副本,这可确保在提交每个事务之前将数据保留在足够数量的次要副本上。 此过程保证,如果主副本或可读次要副本不可用,则完全同步的副本始终可用于故障转移。

SQL 托管实例和 Service Fabric 在副本之间启动故障转移。 次要副本成为新的主要副本后,将创建另一个次要副本,以确保群集具有足够数量的副本来维护仲裁。 故障转移完成后,Azure SQL 连接会根据连接字符串自动重定向到新的主副本或可读次要副本。

冗余

默认情况下,SQL 托管实例通过在主要区域中的单个数据中心分布计算节点和数据来实现冗余。 此方法在以下预期和意外停机期间保护数据:

  • 由客户启动的会导致短暂停机的管理操作

  • 服务维护操作

  • 小型网络或电源故障

  • 涉及以下组件的问题和数据中心中断:

    • 运行服务的计算机所在的机架

    • 托管虚拟机(VM)运行 SQL 数据库引擎的 物理计算机

    • 运行 SQL 数据库引擎的 VM

  • SQL 数据库引擎的问题

  • 潜在的计划外局部中断

有关 SQL 托管实例如何提供冗余的详细信息,请参阅 通过本地和区域冗余的可用性

暂时性故障

暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 应用程序通常可以通过重试受影响的请求来处理暂时性故障,这一点很重要。

与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅 处理暂时性故障的建议

SQL 托管实例会自动处理关键服务任务,例如修补、备份和 Windows 和 SQL 数据库引擎升级。 它还处理计划外事件,例如基础硬件、软件或网络故障。 即使在最关键的情况下,SQL 托管实例也能快速恢复,这可确保数据始终可用。 大多数用户不会注意到升级是持续执行的。

实例得到修补或进行故障转移时,如果在应用程序中使用重试逻辑,则停机造成的影响会很小。 可以 测试应用程序对暂时性故障的复原能力

可用性区域支持

注释

区域冗余目前不适用于下一代常规用途服务层级。

可用性区域 是每个 Azure 区域内物理上独立的数据中心群组。 当某个区域发生故障时,服务可以切换到其他可用的区域。

启用区域冗余配置时,可以确保 SQL 托管实例在遇到大量故障(包括灾难性的数据中心服务中断)时可以复原,无需对应用程序逻辑进行任何更改。

SQL 托管实例通过将无状态计算节点放置在不同的可用性区域中来实现区域冗余。 它依赖于有状态 ZRS,后者附加到当前包含活动 SQL 数据库引擎进程的节点。 如果发生中断,SQL 数据库引擎进程将在其中一个无状态计算节点上处于活动状态,然后访问有状态存储中的数据。

SQL 托管实例通过在多个可用性区域中放置 SQL 托管实例的副本来实现区域冗余。 若要消除单一故障点,还要将控制环跨多个区域进行复制。 控制平面流量被路由至负载均衡器,该负载均衡器也跨多个可用区进行部署。 Azure 流量管理器控制从控制平面到负载均衡器的流量路由。

要求

若要为 SQL 托管实例启用区域冗余,请将 备份存储冗余 选项设置为 ZRS异地区域冗余存储 (GZRS)。

区域支持

选定区域中支持 SQL 托管实例的区域冗余。 有关详细信息,请参阅 支持的区域

成本

启用区域冗余时,SQL 托管实例和区域冗余备份会产生额外的成本。 有关详细信息,请参阅定价

可以通过承诺在一段时间内以折扣费率使用计算资源来节省资金,其中包括“业务关键”服务层级中的区域冗余实例。 有关详细信息,请参阅 SQL 托管实例的预留

配置可用性区域支持

本部分介绍如何为 SQL 托管实例配置可用性区域支持:

  • 启用区域冗余: 若要了解如何在新的和现有实例上配置区域冗余,请参阅 “配置区域冗余”。

    SQL 托管实例的所有缩放操作(包括启用区域冗余)都是联机操作,并且只需极少或不需要停机时间。 有关更多信息,请参阅 管理操作的持续时间

  • 禁用区域冗余:可以按照相同的步骤禁用区域冗余,以启用区域冗余。 此过程是一种联机操作,类似于常规的服务层级目标升级。 此过程结束时,实例从区域冗余基础结构迁移到单区域基础结构。

常规操作

本部分介绍将 SQL 托管实例配置为区域冗余且所有可用性区域都可正常运行时的预期:

  • 区域之间的流量路由:在正常操作期间,请求会路由到运行 SQL 托管实例计算层的节点。

  • 区域之间的数据复制: 数据库文件使用 ZRS 存储在 Azure 存储中,该 ZRS 附加到当前包含活动 SQL 数据库引擎进程的节点。

    写入操作是同步的,当数据成功复制到所有可用性区域后才视为完成。 此同步复制可确保在发生区域故障期间保持高度一致性和零数据丢失。 但是,与本地冗余存储相比,写入延迟可能会略高。

  • 区域之间的流量路由:在正常操作期间,请求会路由到 SQL 托管实例的主要副本。

  • 区域之间的数据复制:主要副本持续且按顺序地将更改推送到不同可用性区域中的次要副本。 此过程可确保在提交每个事务之前,在足够数量的次要副本上保留数据。 这些副本位于不同的可用性区域中。 此过程可以保证,当主要副本或可读次要副本因任何原因而变得不可用时,完全同步的副本始终可用于故障转移。

    由于区域冗余实例在不同数据中心具有副本,因此,网络延迟增加可能会增加事务提交时间。 这一增加可能会影响某些联机事务处理(OLTP)工作负荷的性能。 大多数应用程序对此额外延迟不敏感。

区域关闭体验

本部分介绍将 SQL 托管实例配置为区域冗余且一个或多个可用性区域不可用时会发生什么情况:

  • 流量重新路由: SQL 托管实例与 Service Fabric 配合使用,将数据库引擎移动到位于不同可用性区域中且具有足够可用容量的合适无状态计算节点。 故障转移完成后,新连接会自动重定向到新的主要计算节点。

    在从一个计算节点转换为另一个计算节点的过程中,工作负荷可能会经历一些性能下降,因为新的数据库引擎进程从冷缓存开始。

  • 流量重新路由: SQL 托管实例与 Service Fabric 协同工作,选择另一个可用性区域中的合适副本,使其成为主要副本。 次要副本成为新的主要副本后,将创建另一个次要副本,以确保群集具有足够数量的副本来维护仲裁。 故障转移完成后,新的连接会自动根据连接字符串重定向到新的主副本或可读的次要副本。
  • 预期的停机:可用性区域故障转移期间可能会发生零星停机。 停机时间通常小于 30 秒,如果应用程序遵循 暂时性故障处理指南,应用程序应容忍该故障。

  • 预期的数据丢失:在可用性区域故障转移期间,提交的事务不会丢失数据。 需要重试正在进行的事务。

区域恢复

当可用区恢复时,SQL 托管实例与 Service Fabric 结合使用,以恢复该区域的操作。 无需客户干预。

对区域故障进行测试

SQL 托管实例平台管理区域冗余实例的流量路由、故障转移和故障回复。 由于此功能是完全托管的,因此你无需启动或验证可用性区域故障流程。 但是,可以 验证应用程序的故障处理

多区域支持

单个 SQL 托管实例部署在单个区域中。 但是,你可以在单独的 Azure 区域中部署辅助 SQL 托管实例并配置故障转移组。 故障转移组会自动异地复制数据,并且可以根据故障转移策略自动或手动进行故障转移(如果发生区域性故障)。

本部分总结了有关故障转移组的关键信息,但请务必查看 故障转移组概述和最佳做法 ,了解有关故障转移组工作原理以及如何配置它们的详细信息。

故障转移策略

创建故障转移组时,请选择故障转移策略,该策略指定负责检测中断和执行故障转移的人员。 可以配置两种类型的故障转移策略:

  • 客户管理的故障转移(建议): 使用客户管理的故障转移策略时,可以决定是执行 故障转移,这不会产生数据丢失,还是 强制故障转移,这可能会导致数据丢失。 在服务中断期间主要实例不可访问时,使用强制故障转移作为恢复方法。

  • Microsoft托管故障转移: Microsoft托管故障转移仅在异常情况下用于触发强制故障转移。

重要

使用客户管理的故障转移选项来开发、测试和实现 DR 计划。 请勿依赖于 Microsoft 托管的故障转移,这可能只在极端情况下使用。 Microsoft 托管的故障转移可能针对整个区域启动。 无法为单个故障转移组、SQL 托管实例、订阅或客户启动它。 对于不同的 Azure 服务,故障转移可能在不同的时间发生。 建议使用客户托管的故障转移。

区域支持

可以为故障转移组中的 SQL 托管实例选择任何 Azure 区域。 由于广域网络延迟较高,异地复制使用异步复制机制。 若要减少网络延迟,请选择具有低延迟连接的区域。 有关 Azure 区域之间的延迟的详细信息,请参阅 Azure 网络往返延迟统计信息

成本

在不同区域中创建多个 SQL 托管实例时,需为每个 SQL 托管实例付费。

但是,如果辅助实例没有任何已连接到它的读取工作负荷或应用程序,则可通过将副本指定为备用实例来节省许可成本。 有关详细信息,请参阅 为 SQL 托管实例配置无许可证备用副本

有关 SQL 托管实例定价的详细信息,请参阅 服务定价信息

配置多区域支持

若要了解如何配置故障转移组,请参阅 为 SQL 托管实例配置故障转移组

容量计划和管理

在故障转移期间,流量会重定向到辅助 SQL 托管实例。 让辅助 SQL 托管实例准备好接收流量非常重要。 创建具有与主要实例相同的服务层、硬件代系和计算大小的辅助 SQL 托管实例。

有关在故障转移组中缩放 SQL 托管实例的详细信息,请参阅 缩放实例

常规操作

当所有地区均正常运行且 SQL 托管实例配置为使用多区域故障转移组时,你可以预计会出现以下情况:

  • 区域之间的流量路由:在正常操作期间,读写请求将转到主要区域中的单个主要实例。

    故障转移组还提供单独的只读侦听器终结点。 在正常操作期间,此终结点连接到辅助实例,以路由连接字符串中指定的只读流量。

    有关故障转移组如何将流量发送到每个实例以及如何将流量定向到只读侦听器终结点的详细信息,请参阅 故障转移组概述和最佳做法

  • 区域之间的数据复制:默认情况下,数据会从主要实例异步复制到辅助 SQL 托管实例。

    由于异地复制是异步的,因此在进行强制故障转移的情况下,可能会出现数据丢失的现象。 可以监视复制延迟,以了解强制故障转移期间潜在的数据丢失情况。 有关详细信息,请参阅 DR 清单

    如果需要在故障转移期间消除异步复制中的数据丢失现象,请将应用程序配置为阻止调用线程,直到它确认上次提交的事务已在辅助数据库的事务日志中传输和强化。 此方法需要自定义开发,这会降低应用程序的性能。 有关详细信息,请参阅 “防止丢失关键数据”。

区域故障体验

本部分介绍当 SQL 托管实例配置为使用多区域故障转移组且主要区域出现服务中断时的预期情况:

  • 检测和响应: 检测和响应的责任取决于故障转移组使用的故障转移策略。

    • 客户管理的故障转移策略:你负责检测区域中的故障,并触发故障转移或强制故障转移,以故障转移到故障转移组中的辅助实例。

      如果执行故障转移,SQL 托管实例会在执行故障转移过程之前等待数据同步到辅助实例。

      如果执行强制故障转移,SQL 托管实例会立即将辅助实例切换为主要角色,无需等待最近的更改从主要角色传播。 这种类型的故障转移可能会导致数据丢失。

    • Microsoft 管理的故障转移策略:Microsoft 管理的故障转移在异常情况下执行。 当 Microsoft 触发故障转移时,故障转移组会自动执行强制故障转移,以故障转移到故障转移组中的辅助实例。 但是,我们建议对生产工作负荷使用客户管理的故障转移策略,以便控制故障转移何时发生。

  • 通知: 可以通过服务运行状况和资源运行状况监视区域故障事件。 设置这些服务的警报,以接收区域级别问题的通知。

  • 活动请求: 发生故障转移时,正在处理的任何请求都将终止,必须重试。 若要使应用程序能够应对这些类型的问题,请参阅 暂时性故障处理

  • 预期数据丢失: 数据丢失量取决于配置应用程序的方式。 有关详细信息,请参阅故障转移组概述和最佳做法

  • 预期的停机时间: 故障转移组故障转移期间可能会发生少量停机。 停机时间通常不到 60 秒。

  • 流量重新路由: 故障转移组完成故障转移过程后,读写流量会自动路由到新的主实例。 如果应用程序在其连接字符串中使用故障转移组的终结点,则故障转移后无需修改其连接字符串。

Failback

故障转移组在还原时不会自动故障回复到主要区域,因此你有责任启动故障回复。

测试区域故障

可以 测试故障转移组的故障转移

测试故障转移组只是执行 DR 演练的一部分。 有关详细信息,请参阅 执行 DR 演练

Backups

备份数据库以防止各种风险,包括数据丢失。 备份可以还原为从意外数据丢失、损坏或其他问题中恢复。 备份与异地复制不同,它们具有不同的用途并缓解不同的风险。

SQL 托管实例会自动备份数据库的完整、差异和事务日志备份。 有关备份类型、频率、还原功能、存储成本和备份加密的详细信息,请参阅 SQL 托管实例中的自动备份

SQL 托管实例提供内置自动备份,并且支持用户启动的针对用户数据库的仅复制备份。 有关详细信息,请参阅仅复制备份

备份复制

为 SQL 托管实例配置自动备份时,可以指定备份复制方式。 配置为存储在 ZRS 上的备份具有更高的复原能力。 建议将备份配置为使用以下存储类型之一:

  • 如果区域有可用性区域,则使用 ZRS 提高区域内的复原能力

  • 如果区域具有可用性区域并与另一个区域配对,则 GZRS 可改善跨区域的备份复原能力

  • 如果区域不支持可用性区域,但有配对区域,则使用 GRS

有关不同存储类型及其功能的详细信息,请参阅 备份存储冗余

异地还原

异地还原功能是一种基本的 DR 解决方案,可用于将备份副本还原到其他 Azure 区域。 异地备份通常需要大量的停机时间,并且会造成数据丢失。 若要在发生区域性中断时实现更高级别的可恢复性,应 配置故障转移组

如果使用异地还原,需要考虑如何在次要区域中提供备份:

  • 如果主要区域已配对,请使用 GZRS 或 GRS 备份存储来支持异地还原到配对区域的功能。

  • 如果主要区域未配对,则可构建一个自定义解决方案,将备份复制到另一区域。 请考虑使用用户启动的仅复制备份,并将其存储在某个存储帐户中,该存储帐户使用 blob 对象复制将备份复制到另一区域中的存储帐户。

服务维护期间的可靠性

当 SQL 托管实例对实例执行维护时,SQL 托管实例将保持完全可用,但可能会进行短暂的重新配置。 发生维护事件时,客户端应用程序可能会观察到短暂的连接中断。 客户端应用程序应遵循暂时性故障处理指南来最大程度地降低影响。

使用 SQL 托管实例,您可以指定一个维护时段,通常用于服务升级和其他维护操作。 配置维护时段可能有助于你在营业时间内最大程度地减少任何副作用(例如自动故障转移)。 你还可以接收计划内维护的提前通知。

有关详细信息,请参阅 SQL 托管实例中的维护时段

服务级别协议

Azure 服务的服务级别协议 (SLA) 描述了每个服务的预期可用性,以及解决方案为实现该可用性预期而必须满足的条件。 有关详细信息,请参阅 联机服务的 SLA

对于 SQL 托管实例,仅当正确配置 Azure 虚拟网络时,可用性 SLA 才适用,这样它就不会妨碍管理流量。 此配置包括子网大小、网络安全组(NSG)、用户定义的路由(UDR)、DNS 配置以及影响网络资源的管理和使用的其他资源。 有关 SQL 托管实例所需的网络配置的详细信息,请参阅 网络要求