本文介绍 Azure SQL 数据库中的可靠性支持,包括通过 可用性区域 和 多区域部署实现区域内复原能力。
使用 Azure 时, 可靠性是共同的责任。 Azure 提供了一系列支持复原和恢复的功能。 你负责了解这些功能如何在你使用的所有服务中工作,并选择满足业务目标和运行时间目标所需的功能。
生产部署建议
若要了解如何部署 Azure SQL 数据库以支持解决方案的可靠性要求,以及可靠性如何影响体系结构的其他方面,请参阅 Azure Well-Architected Framework 中 Azure SQL 数据库的体系结构最佳做法。
可靠性体系结构概述
SQL 数据库在 Windows作系统的最新稳定 SQL Server 数据库引擎上运行,包括所有适用的修补程序。
默认情况下,SQL 数据库通过在主要区域中的单个数据中心存储三个数据副本来实现冗余。 如果发生本地化故障(例如小型网络故障或电源故障),并且发生以下事件,此方法可保护数据:
因客户发起的管理操作而导致短暂停机
服务维护操作
数据中心存在以下组件的问题和数据中心中断:
机架,其中为服务提供支持的计算机正在运行
托管运行 SQL 数据库引擎的虚拟机(VM)的物理计算机
SQL 数据库引擎的其他问题
其他潜在的意外区域性中断
SQL 数据库使用 Azure Service Fabric 管理数据库的复制。
为 SQL 数据库的不同服务层以不同的方式实现冗余。 有关详细信息,请参阅 通过冗余的可用性 - SQL 数据库。
暂时性故障
暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 应用程序通常可以通过重试受影响的请求来处理暂时性故障,这一点很重要。
与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅 处理暂时性故障的建议。
SQL 数据库会自动处理关键服务任务,例如修补、备份、Windows 和 SQL 数据库引擎升级。 它还会自动处理计划外事件,例如基础硬件、软件或网络故障。 SQL 数据库旨在从关键故障中快速恢复,这可确保数据始终可用。 大多数用户不会注意到升级是持续执行的。
当数据库进行修补或故障转移时,如果在应用程序中 使用重试逻辑,停机时间不会对服务产生影响。
可以按照测试应用程序故障复原能力中的指导来测试应用程序对暂时性故障的复原能力。
可用性区域支持
可用性区域 是每个 Azure 区域内物理上独立的数据中心群组。 当某个区域发生故障时,服务可以切换到其他可用的区域。
可以创建 区域冗余 的单一数据库或弹性池。 区域冗余可确保数据库能够抵御大范围的故障,包括重大数据中心停机,而应用程序逻辑无需更改。
对于“常规用途”服务层级,区域冗余确保 SQL 数据库的无状态计算组件和有状态数据存储组件在可用区故障时仍然具有较强的抵御能力。
对于高级、业务关键和超大规模服务层级,区域冗余将 SQL 数据库的副本放置在主要区域中的多个 Azure 可用性区域。 为了消除单一故障点(SPOF),控制环也会跨多个可用性区域重复。
若要查看有关其他服务层级的可用性区域支持的信息,请务必选择此页面开头的相应服务层级。
要求
基本和标准服务层不支持区域冗余。
区域冗余适用于 基于 vCore 的购买模型的“业务关键”、“常规用途”和“超大规模”服务层级中的数据库,以及 基于 DTU 的购买模型的高级服务层级。
对于“常规用途”服务层级:
仅当选择了标准系列(Gen5)硬件时,区域冗余配置才可用。
使用区域冗余 SQL 数据库时,只有特定区域支持自定义维护时段。 有关详细信息,请参阅 SQL 数据库区域对维护时段的支持。
对于高级和业务关键服务层级:
- 使用区域冗余 SQL 数据库时,只有特定区域支持自定义维护时段。 有关详细信息,请参阅 区域冗余数据库的维护时段可用性。
对于“超大规模”服务层级:
使用区域冗余 SQL 数据库时,只有特定区域支持自定义维护时段。 有关详细信息,请参阅 区域冗余数据库的维护时段可用性。
必须启用区域冗余或异地区域冗余备份存储。
支持的区域
对于高级、常规用途和业务关键服务层,区域冗余可在 支持可用性区域的所有 Azure 区域中使用。
对于“超大规模”服务层级,区域冗余可在 支持可用性区域的所有 Azure 区域中使用。 但是,在 选择的 Azure 区域中提供了对超大规模高级系列和高级系列内存优化硬件的区域冗余支持。
若要查看有关其他服务层级的可用性区域支持的信息,请务必选择此页面开头的相应服务层级。
注意事项
延迟: 区域冗余数据库在单独的数据中心具有副本。 添加的网络延迟可能会增加事务提交时间,并可能影响某些联机事务处理(OLTP)工作负荷的性能。 大多数应用程序对此额外延迟不敏感。
master数据库: 在逻辑服务器上创建具有区域冗余配置的数据库时,master与服务器关联的数据库也会自动创建区域冗余。 有关如何检查数据库是否master为区域冗余的详细信息,请参阅 数据库区域冗余可用性。
若要查看有关其他服务层级的可用性区域支持的信息,请务必选择此页面开头的相应服务层级。
成本
对于“常规用途”服务层级,为 SQL 数据库启用区域冗余需要额外的费用。 有关详细信息,请参阅 定价 - SQL 数据库。
高级和业务关键服务层级提供数据库的多个副本。 启用区域冗余时,副本将分布在可用性区域之间。 此分发意味着在高级或业务关键服务层级中启用 SQL 数据库的区域冗余时,不会产生额外的费用。
如果启用超大规模服务层数据库的多个副本,则可以启用区域冗余。 启用区域冗余时,副本将分布在可用性区域之间。 启用区域冗余意味着在拥有多个副本的情况下,您的 SQL 数据库位于 Hyperscale 服务层级时不会产生额外的成本。
若要查看有关其他服务层级的可用性区域支持的信息,请务必选择此页面开头的相应服务层级。
配置可用性区域支持
对于“常规用途”、“高级”和“业务关键”服务层级:
新资源: 可以在创建数据库时将数据库配置为区域冗余。 有关详细信息,请参阅 快速入门:创建单一数据库 - SQL 数据库。
现有资源: 可以将现有数据库重新配置为区域冗余。 有关详细信息,请参阅 “启用区域冗余 - SQL 数据库”。
所有 SQL 数据库的缩放操作(包括启用区域冗余)都是联机操作,所需停机时间最少甚至不需要停机。 有关详细信息,请参阅以最短的停机时间动态缩放数据库资源。
禁用区域冗余: 可以禁用区域冗余。 此过程是一种联机操作,类似于常规的服务层级目标升级。 该过程结束时,数据库将从区域冗余环迁移到单区域环。
对于“超大规模”服务层级:
新资源: 对于超大规模数据库和弹性池,必须在创建数据库时配置区域冗余。 有关详细信息,请参阅 创建区域冗余超大规模数据库。
迁移或禁用区域冗余: 若要在现有超大规模数据库或弹性池上启用或禁用区域冗余,需要重新部署它。 此过程将添加辅助副本以实现高可用性,并将其置于不同的可用性区域中。
有关详细信息,请参阅 重新部署区域冗余超大规模数据库 - SQL 数据库
若要查看有关其他服务层级的可用性区域支持的信息,请务必选择此页面开头的相应服务层级。
常规操作
本部分介绍配置数据库以实现区域冗余和所有可用性区域正常运行时会发生什么情况。
对于“常规用途”服务层级:
区域之间的流量路由: 请求将路由到运行 SQL 数据库计算层的节点。 启用区域冗余后,此节点可能位于任何可用性区域中。
区域之间的数据复制: 使用 ZRS 跨可用性区域同步复制数据和日志文件。 在数据成功复制到所有可用性区域之前,写入作不会被视为完成。 此同步复制可确保在发生区域故障期间保持高度一致性和零数据丢失。 但是,与本地冗余存储(LRS)相比,它可能会导致写入延迟略高。
对于高级和业务关键服务层级:
区域之间的流量路由: 副本分布在可用性区域,其中一个副本被指定为 主要 副本。 请求将路由到数据库的主副本。
区域之间的数据复制: 主副本不断按顺序推送对次要副本的更改,以确保在提交每个事务之前将数据保留在足够数量的次要副本上。 此过程保证,如果主要副本或可读次要副本因任何原因而不可用,则完全同步的副本始终可用于故障转移。 启用区域冗余后,这些副本位于不同的可用性区域中。 但是,由于遍历区域中的网络延迟,此过程可能会导致写入延迟略高。
对于“超大规模”服务层级:
区域之间的流量路由: 数据库副本分布在可用性区域,其中一个副本被指定为 主要 副本。 请求将路由到数据库的主副本。
区域之间的数据复制: 主数据库副本通过区域冗余日志服务推送更改,该服务跨可用性区域同步复制所有更改。 页面服务器位于每个可用性区域中,并存储数据库的状态。 此过程保证,如果主要副本或可读次要副本因任何原因而不可用,则完全同步的副本始终可用于故障转移。 但是,与 LRS 相比,此过程可能会导致写入延迟略高。
若要查看有关其他服务层级的可用性区域支持的信息,请务必选择此页面开头的相应服务层级。
区域关闭体验
本部分说明数据库配置为区域冗余时和可用区出现故障时的预期情况。
检测和响应: SQL 数据库负责检测和响应可用性区域中的故障。 无需执行任何操作即可启动区域故障转移。
活动请求: 当可用性区域脱机时,在故障可用性区域中正在处理的任何请求都将终止,并且必须重试。 有关如何使应用程序能够复原这些类型的问题的详细信息,请参阅 暂时性故障处理指南。
流量重新路由: 对于“常规用途”服务层级,SQL 数据库将数据库引擎移到另一个处于不同可用性区域中且具有足够可用容量的无状态计算节点。 故障转移完成后,新连接会自动重定向到新的主计算节点。
有关详细信息,请参阅 “常规用途”服务层级。
流量重新路由: 对于高级和业务关键服务层级,SQL 数据库选择另一个可用性区域中的副本以成为主要副本。 当一个次要副本成为新的主副本后,系统会创建另一个次要副本,以确保群集有足够数量的副本来维持仲裁。 故障转移完成后,新连接会自动重定向到新的主副本(或基于连接字符串的可读次要副本)。
有关详细信息,请参阅 “高级”和“业务关键”服务层级。
流量重新路由: 对于“超大规模”服务层级,如果主副本因区域中断而丢失,SQL 数据库会将另一个区域中的高可用性副本之一提升为新的主副本。
有关详细信息,请参阅超大规模服务层级。
预期的停机:可用性区域故障转移期间可能会发生零星停机。 停机时间通常少于 30 秒,如果应用程序遵循暂时性故障处理指南,则应该可以容忍此时间。
预期数据丢失: 可用性区域故障转移期间不会丢失任何数据。
若要查看有关其他服务层级的可用性区域支持的信息,请务必选择此页面开头的相应服务层级。
区域恢复
当可用性区域恢复时,Azure Service Fabric 会自动在恢复的可用性区域中创建数据库副本,删除在其他可用性区域中创建的任何临时副本,并恢复到数据库的正常流量路由。 为了避免中断,主副本不会在区域恢复后自动返回原始区域。
对区域故障进行测试
SQL 数据库平台管理区域冗余数据库的流量路由、故障转移和区域恢复过程。 由于此功能是完全托管的,因此你无需启动或验证可用性区域故障流程。 但是,可以遵循 测试应用程序故障复原中所述的过程来验证应用程序的故障和故障转移的处理。
多区域支持
本部分概述了可用于 SQL 数据库的多区域异地复制的两个相关但独立的功能:
活动异地复制 在单个主数据库的任何区域中创建连续同步的可读辅助数据库(有时称为 异地辅助 数据库或 异地副本)。 活动异地复制可以在同一区域中创建辅助数据库,但此配置不会针对区域中断提供保护。 使用活动异地复制实现异地冗余时,可以在主数据库的不同区域中找到辅助数据库。
区域支持
可以在所有 Azure 区域中启用活动异地复制,不需要使用 Azure 区域对。
小窍门
SQL 数据库遵循安全部署实践,其中 Azure 努力不同时将更新部署到配对区域。 如果将主动异地复制配置为使用非配对区域,请为每个区域中的服务器设置不同的维护时段。 此方法有助于降低两个区域同时遇到维护导致的连接问题的可能性。
要求
使用活动异地复制时,请考虑以下要求:
主数据库和异地辅助数据库必须具有相同的服务层,并且应具有相同的计算层、计算大小和备份存储冗余。
主数据库和异地辅助数据库应具有相同的 IP 地址防火墙规则。
支持跨不同 Azure 订阅的数据库进行活动异地复制。
注意事项
成本
辅助数据库按单独的数据库计费。
如果不对任何读取或写入工作负荷使用辅助数据库,请考虑是否可以 将其指定为备用副本 ,以降低成本。
配置多区域支持
启用活动异地复制:有关如何在 Azure 门户中启用活动异地复制的详细信息,请参阅为 SQL 数据库或活动异地复制配置活动异地复制。
启用活动异地复制后,初始种子设定步骤可能需要一些时间。
禁用活动异地复制: 有关如何在数据库上禁用活动异地复制的详细信息,请参阅 “删除辅助数据库”。
常规操作
本部分介绍将数据库配置为使用活动异地复制和所有区域正常运行时预期的情况。
区域之间的流量路由: 应用程序必须配置为将读写请求发送到主数据库。 可以选择将只读请求发送到辅助数据库,这有助于减少只读工作负荷对主数据库的影响。
区域之间的数据复制: 主数据库和辅助数据库之间的复制以异步方式进行,这意味着在将更改应用到主数据库和复制到辅助数据库的那一刻之间可能会有延迟。
执行故障转移时,决定如何处理数据丢失的可能性。
区域故障体验
当数据库被配置为使用主动地理复制时,如果主要区域发生故障,本部分将介绍可能会发生的情况:
检测和响应: 你负责检测数据库或区域中断的情况,并触发故障转移。
活动请求: 故障转移期间的任何活动请求都将终止,必须重试。
预期数据丢失: 如果主数据库可用,可以选择性地执行故障转移,且不会丢失数据。 故障转移过程在切换角色之前同步主数据库和辅助数据库之间的数据。
如果主数据库不可用,可能需要执行 强制故障转移,这会导致数据丢失。 可以通过监视复制滞后时间来估计数据丢失量。 有关详细信息,请参阅 通过指标和警报监控 SQL 数据库。
预期的停机时间: 故障转移期间,停机时间通常最多为 60 秒。 确保应用程序 处理暂时性故障 ,以便它可以在短时间内恢复。 此外,重新配置应用程序以连接到新的主数据库的速度会影响你遇到的停机时间。
流量重新路由: 你负责将应用程序配置为将请求发送到新的主数据库。 如果需要透明故障转移,请考虑使用故障转移组。
区域恢复
测试区域故障
可以随时触发手动故障转移来模拟区域故障。 可以触发故障转移(无数据丢失)或强制故障转移。
Backups
备份数据库以防止各种风险,包括数据丢失。 备份可以还原为从意外数据丢失、损坏或其他问题中恢复。 备份不同于区域冗余、活动异地复制或故障转移组,它们有不同的用途。 有关详细信息,请参阅 冗余、复制和备份。
SQL 数据库提供数据库的自动备份。 有关备份频率的详细信息,如果需要从备份还原,可能会影响数据丢失量,请参阅 SQL 数据库中的自动备份。
备份存储
可以选择将自动备份存储在 LRS 或 ZRS 中。 如果使用配对的区域,可以选择使用异地冗余存储将自动备份复制到配对区域。 此功能允许将备份异地还原到配对区域。 有关详细信息,请参阅 SQL 数据库中的自动备份。
如果使用非配对区域,或者需要将备份复制到配对区域以外的区域,请考虑导出数据库,并将导出的文件存储在利用Blob 对象复制功能复制到其他区域的存储帐户中。 有关详细信息,请参阅 导出数据库。
服务维护期间的可靠性
当 SQL 数据库服务对您的数据库和弹性池进行维护时,它可能会自动切换到辅助副本。 发生故障转移时,客户端应用程序可能会经历短暂的连接中断。 客户端应用程序应遵循暂时性故障处理指南来最大程度地降低影响。
使用 SQL 数据库可以指定通常用于服务升级和其他维护作的维护时段。 配置维护时段可能有助于在营业时间内最大程度地减少任何副作用(例如自动故障转移)。 你还可以接收计划内维护的提前通知。
平台会自动维护用于处理到 SQL 数据库的连接的网关。 升级或维护作也可能导致客户端可以重试的短暂连接中断。
有关详细信息,请参阅 SQL 数据库中的“维护”窗口。
服务级别协议
SQL 数据库的服务级别协议(SLA)描述了服务的预期可用性以及活动异地复制的预期恢复点和恢复时间。 它还描述了必须满足的条件才能达到这些期望。 若要了解这些条件,请务必查看联机服务的服务级别协议 (SLA)。
部署区域冗余数据库或弹性池并使用受支持的服务层级时,运行时间 SLA 更高。