你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍 Azure SQL 数据库中的可靠性支持,包括通过 可用性区域 和 多区域部署实现区域内复原能力。
使用 Azure 时, 可靠性是共同的责任。 Microsoft提供了一系列功能来支持复原和恢复。 你负责了解这些功能如何在你使用的所有服务中工作,并选择满足业务目标和运行时间目标所需的功能。
生产部署建议
若要了解如何部署 Azure SQL 数据库以支持解决方案的可靠性要求,以及可靠性如何影响体系结构的其他方面,请参阅 Azure 架构良好的框架中 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 数据库处于超大规模服务层级,且已配置多个副本,则在其上启用区域冗余不会产生额外成本。
若要查看有关其他服务层级的可用性区域支持的信息,请务必选择此页面开头的相应服务层级。
配置可用性区域支持
对于“常规用途”、“高级”和“业务关键”服务层级:
新资源:可以在创建数据库时将数据库配置为区域冗余。 有关详细信息,请参阅快速入门:创建单一数据库 - 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 更高。