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