Azure Blob 存储是适用于云的 Azure 对象存储解决方案,旨在存储大量非结构化数据,例如文本、二进制数据、文档、媒体文件和应用程序备份。 作为一项基础的 Azure 存储服务,Blob 存储提供了多种可靠性功能,以确保数据在面对计划的和未计划的事件时保持可用且持久。
Azure Blob 存储支持内置冗余机制,用于跨不同的容错域存储数据的多个副本。 它提供了全面的冗余选项,包括使用区域冗余存储 (ZRS) 的可用性区域部署、通过异地冗余配置的多区域保护以及复杂的故障转移功能。
本文介绍了 Azure Blob 存储中的可靠性支持,并涵盖了通过可用性区域实现区域复原能力和通过异地冗余存储实现跨区域复原能力。
注释
Azure Blob 存储是 Azure 存储平台的一部分。 Blob 存储的某些功能在许多 Azure 存储服务中通用。 本文档使用“Azure 存储”来指示这些常见功能。
生产部署建议
若要了解如何部署 Azure Blob 存储以支持解决方案的可靠性要求,以及可靠性如何影响体系结构的其他方面,请参阅 Azure 架构良好的框架中 Azure Blob 存储的体系结构最佳做法。
可靠性体系结构概述
Azure 存储提供了多个冗余选项,可帮助保护数据免受不同类型的故障的影响。 每个选项提供一个特定的数据冗余级别,使你可以选择最符合你的应用程序要求的选项。
本地冗余存储 (LRS) 将存储帐户中的数据复制到所选主要区域中的一个或多个 Azure 可用性区域。 尽管没有选择首选可用性区域的选项,但 Azure 可以跨区域移动或扩展 LRS 帐户以提高负载均衡。 无法保证数据将分散到各个区域。 有关可用性区域的详细信息,请参阅可用性区域是什么?。
区域冗余存储 (ZRS)、异地冗余存储 (GRS) 和异地区域冗余存储 (GZRS) 提供额外的保护。 本文详细介绍了这些选项。
暂时性故障
暂时性故障是指组件发生短暂的间歇性故障。 这些故障经常出现在云之类的分布式环境中,在运营过程中比较常见。 暂时性故障在短时间内自行纠正。 应用程序通常可以通过重试受影响的请求来处理暂时性故障,这一点很重要。
与任何云托管的 API、数据库和其他组件通信时,所有云托管的应用程序都应遵循 Azure 暂时性故障处理指南。 有关详细信息,请参阅 处理暂时性故障的建议。
若要在使用 Azure Blob 存储时有效管理暂时性故障,请实施以下建议:
使用 Azure 存储客户端库,其中包括具有指数退避和抖动的内置重试策略。 .NET、Java、Python 和 JavaScript SDK 自动处理暂时性故障的重试。 有关详细的重试配置选项,请参阅 Azure 存储重试策略指导。
根据 Blob 大小和网络条件为 Blob 操作配置适当的超时值。 较大的 Blob 需要较长的超时时间,而较小的操作可以使用较短的值以快速检测故障。
可用性区域支持
可用性区域 是每个 Azure 区域内物理上独立的数据中心群组。 当某个区域发生故障时,服务可以切换到其他可用的区域。
Azure Blob 存储通过区域冗余存储 (ZRS) 配置提供可靠的可用性区域支持,这些配置可跨一个区域中的多个可用性区域自动分发数据。 与 LRS 不同,ZRS 保证 Azure 跨多个可用性区域同步复制 Blob 数据。 ZRS 确保即使一个区域遇到中断,数据仍可访问。
区域冗余在存储帐户级别启用,并应用于该帐户中的所有 Blob 容器。 无法为不同的冗余级别配置单个容器 - 该设置应用于整个存储帐户。 当可用性区域遇到中断时,Azure 存储自动将请求路由到正常区域,而无需你或应用程序进行任何干预。
区域支持
可以在支持可用性区域的任何区域中部署区域冗余 Azure 存储帐户。
要求
区域冗余适用于标准常规用途 v2 和高级块 Blob 存储帐户类型。 所有 Blob 类型(块 blob、追加 blob 和页 Blob)都支持区域冗余配置,但使用的存储帐户类型决定了哪些功能可用。 有关详细信息,请参阅支持的存储帐户类型。
成本
启用区域冗余存储 (ZRS) 时,由于额外的复制和存储开销,你需以不同于本地冗余存储 (LRS) 的费率付费。
有关详细的定价信息,请参阅 Azure Blob 存储定价。
配置可用性区域支持
- 创建具有区域冗余的 Blob 存储帐户:若要创建具有区域冗余存储的新存储帐户,请参阅创建存储帐户并选择 ZRS、异地区域冗余存储 (GZRS) 或读取访问异地冗余存储 (RA-GZRS),作为帐户创建期间的冗余选项。
更改复制类型。 若要了解如何将现有存储帐户更改为区域冗余存储 (ZRS),以及配置选项和要求,请参阅更改存储帐户的复制方式。
禁用区域冗余。 使用相同的冗余配置更改过程,将 ZRS 帐户转换回非区域配置,例如本地冗余存储 (LRS)。
常规操作
本部分介绍为 Blob 存储帐户配置区域冗余,并且所有可用性区域都正常运行时会发生什么情况。
区域之间的流量路由:具有区域冗余存储 (ZRS) 的 Azure 存储自动在多个可用性区域中的存储群集之间分配请求。 流量分布对应用程序是透明的,不需要客户端配置。
区域之间的数据复制:对 ZRS 的所有写入操作都跨区域内的所有可用性区域进行同步复制。 上传或修改数据时,在数据成功复制到所有可用性区域之前,该作不会被视为完成。 此同步复制可确保在发生区域故障期间保持高度一致性和零数据丢失。
区域关闭体验
本部分介绍为 Blob 存储帐户配置 ZRS 并发生可用性区域中断时会发生什么情况。
检测和响应: Azure 会自动检测区域故障并启动恢复过程。 对于区域冗余存储 (ZRS) 帐户,不需要客户操作。
如果某个区域变得不可用,则 Azure 会执行网络更新,例如域名系统 (DNS) 重新指向。
通知:可以使用 Azure 服务运行状况和资源运行状况监视区域故障事件。 针对这些服务设置警报,以接收区域级别问题的通知。
活动请求:在恢复过程中,正在传输的请求可能会掉线,应该重试。 应用程序应 实现重试逻辑 来处理这些临时中断。
预期数据丢失: 区域故障期间不会发生数据丢失,因为在写入作完成之前,数据在多个区域中同步复制。
预期的故障时间:在自动恢复过程中,由于流量被重定向到正常区域,可能会出现少量故障时间,通常为几秒钟。 为 ZRS 设计应用程序时,请遵循暂时性故障处理的做法,包括实现具有指数退避的重试策略。
- 交通改道。 如果某个区域变为不可用,Azure 会进行网络更新(如域名系统 (DNS) 重新指向),以便将请求定向到剩余的正常可用性区域。 该服务通过剩余可用区域保持全部功能,无需客户干预。
区域恢复
发生故障的可用性区域恢复时,Azure 存储会自动还原所有可用性区域中的正常作。 该服务通过同步中断期间发生的任何操作来自动确保数据一致性。
对区域故障进行测试
使用区域冗余存储 (ZRS) 时,Azure 存储自动管理复制、流量路由和区域故障响应。 由于此功能是完全托管的,因此你无需启动或验证可用性区域故障流程。
多区域支持
Azure 存储(包括 Azure Blob 存储、Azure 文件存储、Azure 表存储和 Azure 队列存储)提供了一系列异地冗余和故障转移功能,以满足不同的要求。
重要
异地冗余存储 (GRS) 仅在 Azure 配对区域内工作。 如果存储帐户的区域未配对,请考虑使用 替代的多区域方法。
跨配对区域复制
Azure 存储在配对区域中提供多种类型的 GRS。 无论使用哪种类型的 GRS,次要区域中的数据始终使用本地冗余存储 (LRS) 进行复制。 此方法针对次要区域内的硬件故障提供了保护。
GRS 支持在主要区域发生中断时,向 Azure 配对区域的计划和未计划的故障转移。 GRS 以异步方式将数据从主要区域复制到配对区域。
异地区域冗余存储 (GZRS) 将主要区域中多个可用性区域中的数据复制到配对区域。
- 读取访问异地冗余存储 (RA-GRS) 和读取访问异地区域冗余存储 (RA-GZRS) 扩展了异地冗余存储 (GRS) 和异地区域冗余存储 (GZRS),并具有对次要终结点进行读取访问的额外优势。 这些选项非常适合为高可用性业务关键型应用程序设计的应用程序。 在主终结点遇到中断的可能性不大的情况下,配置为对次要区域进行读取访问的应用程序可以继续运行。
故障转移类型
针对不同场景,Azure 存储支持三种类型的故障转移。
客户托管的未计划的故障转移:如果主要区域中出现区域范围的存储故障,你负责启动恢复。
客户托管的计划的故障转移:如果解决方案的另一部分在主要区域中发生故障,你负责启动恢复。 需要将整个解决方案切换到次要区域。
Microsoft托管的故障转移: 在特殊情况下,Azure可能会为某个区域中的所有异地冗余存储(GRS)帐户发起故障转移。 但是,Azure 管理的故障转移是最后的手段,仅预期在长时间的服务中断之后才执行。 不应依赖由 Azure 管理的故障转移。
GRS 帐户可以使用这些故障转移类型中的任何一种。 无需预先配置存储帐户即可使用任何故障转移类型。
区域支持
Azure 存储异地冗余配置使用 Azure 配对区域进行次要区域复制。 次要区域根据主要区域选择自动确定,无法自定义。
如果存储帐户的区域未配对,请考虑使用 替代的多区域方法。
要求
异地冗余存储 (GRS) 及客户发起的故障转移和故障回复可在支持常规用途 v2 Azure 存储帐户的所有 Azure 配对区域中使用。
注意事项
实现多区域 Azure Blob 存储时,请考虑以下重要因素:
异步复制延迟:向次要区域的数据复制是异步操作,这意味着将数据写入主要区域与这些数据在次要区域中变为可用之间存在一个滞后时间。 如果在复制最近的数据之前发生主要区域故障,则此滞后可能会导致潜在的数据丢失。 数据丢失由恢复点目标 (RPO) 度量。 可以预期复制滞后时间少于 15 分钟,但此时间是一个估计值,无法保证。
可以检查“上次同步时间”属性,了解如果存储帐户具有未计划的故障转移,可能会丢失多少数据。
次要区域访问:使用异地冗余存储 (GRS) 和异地区域冗余存储 (GZRS) 配置,在发生故障转移之前,无法访问次要区域进行读取。
读取访问异地冗余存储 (RA-GRS) 和读取访问异地区域冗余存储 (RA-GZRS) 配置在正常操作期间提供对次要区域的读取访问权限,但由于异步复制延迟,它们可能会返回略微过时的数据。
- 功能限制:在你使用异地冗余存储 (GRS) 或客户托管的故障转移时,某些 Azure 存储功能不受支持或存在限制。 在实现异地冗余之前,请查看功能兼容性。
成本
多区域 Azure 存储帐户配置对次要区域中的跨区域复制和存储会产生额外的成本。 Azure 区域之间的数据传输根据标准区域间带宽费率收费。
有关详细的定价信息,请参阅 Azure Blob 存储定价。
配置多区域支持
- 创建新的异地冗余存储 (GRS) 帐户。 若要创建 GRS 帐户,请参阅创建存储帐户,并在帐户创建期间选择 GRS、读取访问异地冗余存储 (RA-GRS)、异地区域冗余存储 (GZRS) 或读取访问异地区域冗余存储 (RA-GZRS)。
在现有存储帐户上启用异地冗余。 若要将现有存储帐户转换为异地冗余存储 (GRS),请参阅更改存储帐户的复制方式,了解分步转换过程。
警告
为异地冗余重新配置帐户后,可能需要花费大量时间才能将新的主要区域中的现有数据完全复制到新的次要区域。
若要避免大量数据丢失,请在启动未计划的故障转移之前检查“上次同步时间”属性的值。 若要评估潜在的数据丢失,请将上次同步时间与上次将数据写入新的主要区域的时间进行比较。
禁用异地冗余。 使用相同的冗余配置更改过程,将 GRS 帐户转换回单区域配置,例如本地冗余存储 (LRS) 或区域冗余存储 (ZRS)。
常规操作
本部分说明当存储帐户配置为异地冗余且所有区域都正常运行时的预期情况。
区域之间的流量路由:Azure 存储使用主动-被动方法,其中所有写入操作和大多数读取操作都被定向到主要区域。
对于读取访问异地冗余存储 (RA-GRS) 和读取访问异地区域冗余存储 (RA-GZRS) 配置,应用程序可以通过访问次要终结点选择性地从次要区域读取。 此方法需要显式应用程序配置,并且不是自动的。 此外,由于异步复制滞后,次要区域中的数据可能略有过时。
区域之间的数据复制:通过使用以下配置的冗余类型,写入操作首先被提交到主要区域:
- 针对异地冗余存储 (GRS) 和 RA-GRS 的本地冗余存储 (LRS)
- 针对异地区域冗余存储 (GZRS) 和 RA-GZRS 的区域冗余存储 (ZRS)
在主要区域中成功完成后,数据被异步复制到次要区域,在其中使用 LRS 存储数据。
跨区域复制的异步性质意味着将数据写入主要区域与这些数据在次要区域中可用之间存在一个滞后时间。 可以使用“上次同步时间”属性监视复制时间。
区域故障体验
本部分介绍在为存储帐户配置了异地冗余,且主要区域中出现中断时会发生什么情况。
客户托管的故障转移(未计划):当主要区域中的存储不可用时,请使用未计划的故障转移。
检测和响应:在主要区域中存储帐户不可用的极端情况下,可以考虑发起客户管理的计划外故障转移。 若要做出此决定,请考虑以下因素:
Azure 资源运行状况是否显示访问主要区域中存储帐户时出现问题
Azure 是否建议您执行故障转移到其他区域
警告
计划外故障转移 可能会导致数据丢失。 在启动客户托管的故障转移之前,请确定还原服务是否值得冒数据丢失的风险。
通知:可以通过 Azure 服务运行状况和资源运行状况监视区域故障事件。 针对这些服务设置警报,以接收区域级别问题的通知。
活动请求: 在故障转移过程中,主存储帐户终结点和辅助存储帐户终结点暂时都不能同时进行读取和写入。 可能会删除任何活动请求,客户端应用程序需要在故障转移完成后重试。
预期数据丢失:由于异步复制滞后,数据丢失在未计划的故障转移期间很常见,这意味着可能不会复制最近的写入。 可以检查“上次同步时间”属性,了解在未计划的故障转移期间可能会丢失多少数据。 你通常可以预期数据丢失少于 15 分钟,但这一时间是无法保证的。
预期的停机时间: 故障转移通常在 60 分钟内完成,具体取决于帐户大小和复杂性。
流量重新路由: 故障转移完成后,Azure 会自动更新存储帐户终结点,以便无需重新配置应用程序。 如果应用程序一直缓存域名系统 (DNS) 条目,则则可能有必要清除缓存,以确保应用程序将流量发送到新的主要区域。
故障转移后配置:在未计划的故障转移完成后,目标区域中的存储帐户使用本地冗余存储 (LRS) 层。 如果需要再次对其进行异地复制,则需要重新启用异地冗余存储 (GRS),并等待数据复制到新的次要区域。
有关如何启动客户托管的故障转移的详细信息,请参阅客户托管的(未计划)故障转移的工作原理和启动存储帐户故障转移。
客户托管的故障转移(计划):当存储在主要区域中保持运行,但你出于另一个原因需要将整个解决方案故障转移到次要区域时,请使用计划的故障转移。
检测和响应:你负责故障转移的决定。 如果你需要在区域之间进行故障转移,那么即使你的存储帐户正常,你通常也会做出此决定。 例如,当主要区域中发生另一个应用程序组件的重大中断且无法恢复时,你可能会启动故障转移。
通知:可以通过 Azure 服务运行状况和资源运行状况监视区域故障事件。 针对这些服务设置警报,以接收区域级别问题的通知。
活动请求: 在故障转移过程中,主存储帐户终结点和辅助存储帐户终结点暂时都不能同时进行读取和写入。 可能会删除任何活动请求,客户端应用程序需要在故障转移完成后重试。
预期数据丢失: 由于故障转移过程等待所有数据同步,因此不会丢失任何数据。
预期的停机时间: 故障转移通常在 60 分钟内完成,具体取决于帐户大小和复杂性。 在故障转移过程中,主存储帐户终结点和辅助存储帐户终结点暂时都不能同时进行读取和写入。
流量重新路由: 故障转移完成后,Azure 会自动更新存储帐户终结点,以便无需重新配置应用程序。 如果应用程序一直缓存 DNS 条目,则则可能有必要清除缓存,以确保应用程序将流量发送到新的主要区域。
故障转移后配置: 计划内故障转移完成后,目标区域中的存储帐户将继续进行异地复制,并保留在 GRS 层上。
有关如何启动客户托管的故障转移的详细信息,请参阅客户托管的(计划)故障转移的工作原理和启动存储帐户故障转移。
Microsoft 管理的故障转移: 在极少数情况下发生重大灾难时,如果 Azure 判断主要区域已经无法恢复,Azure 可能会自动切换至次要区域。 此过程完全由 Azure 管理,无需客户操作。 故障转移发生前经过的时间取决于灾难的严重性和评估情况所需的时间。
- 通知:可以通过 Azure 服务运行状况和资源运行状况监视区域故障事件。 针对这些服务设置警报,以接收区域级别问题的通知。
重要
使用客户管理的故障转移选项来开发、测试和实现灾难恢复计划。 请勿依赖于 Microsoft 托管的故障转移,这可能只在极端情况下使用。 Azure 托管的故障转移可能针对整个区域启动。 无法为单个存储帐户、订阅或客户启动该功能。 对于不同的 Azure 服务,故障转移可能在不同的时间发生。 建议使用客户托管的故障转移。
Failback
故障恢复过程在 Azure 托管的故障转移方案与客户管理的故障转移方案之间存在显著差异。
客户托管的故障转移(未计划):在未计划的故障转移后,存储帐户配置有本地冗余存储 (LRS)。 若要进行故障回复,需要重新建立异地冗余存储 (GRS) 关系,并等待复制数据。
客户托管的故障转移(计划):在计划的故障转移后,存储帐户保持异地复制状态。 可以启动另一个客户托管的故障转移,以故障回复到原始主要区域。 相同的故障转移注意事项仍然适用。
由微软管理的故障转移: 如果 Azure 启动故障转移,可能是因为在主要区域发生了重大灾难,主要区域可能难以恢复。 任何时间线或恢复计划都取决于区域灾难和恢复工作的程度。 应监视 Azure 服务运行状况通信以了解详细信息。
测试区域故障
可以模拟区域故障以测试灾难恢复过程。
计划的故障转移测试:对于异地冗余存储 (GRS) 帐户,可以在维护窗口期内执行计划的故障转移操作,以测试完整的故障转移和故障回复过程。 计划的故障转移不会导致数据丢失,但它在故障转移和故障回复期间确实涉及故障时间。
次要终结点测试:对于读取访问异地冗余存储 (RA-GRS) 和读取访问异地区域冗余存储 (RA-GZRS) 配置,请定期针对次要终结点测试读取操作,以确保应用程序能够从次要区域成功读取数据。
备选多区域方法
Azure 存储的跨区域故障转移功能可能不适合,原因如下:
存储帐户位于未配对的区域。
内置故障转移选项提供的恢复时间和数据丢失无法满足你的业务运行时间目标。
你需要故障转移到不是你的主要区域的配对的区域。
需要在区域之间进行主动/主动配置。
可转而设计满足需求的跨区域故障转移解决方案。 对 Azure 存储的部署拓扑的完全处理超出了本文的范围,但可以考虑多区域部署模型。
可使用每个区域中的单独存储帐户,跨多个区域部署 Azure 存储。 此方法提供区域选择的灵活性、使用非配对区域的能力以及对复制计时和数据一致性的更精细控制。 跨区域实现多个存储帐户时,需要配置跨区域数据复制、实现负载均衡和故障转移策略并确保跨区域的数据一致性。
对象复制为跨区域数据复制提供了一个附加选项,用于在存储帐户之间提供块 Blob 的异步复制。 与使用固定配对区域的内置异地冗余存储选项不同,对象复制使你能够在任何 Azure 区域(包括非配对区域)中的存储帐户之间复制数据。 使用此方法可以完全控制源区域和目标区域、复制策略以及要复制的特定容器和 Blob 前缀。
可以将对象复制配置为复制容器中的所有 Blob,或基于 Blob 前缀和标记的特定子集。 复制是异步的,在后台发生。 可以配置多个复制策略,甚至配置跨多个存储帐户的链式复制,以创建复杂的多区域拓扑。
对象复制并非与所有存储帐户都兼容。 例如,对象复制不适用于使用分层命名空间的存储帐户(也称为 Azure Data Lake Gen2 帐户)。
有关详细的实现指导,请参阅块 blob 的对象复制和配置对象复制。
Backups
Azure Blob 存储提供多个数据保护机制,为全面的备份策略补充冗余。 服务的内置冗余可防范基础结构故障的同时,额外的备份功能可防范意外删除、损坏和恶意活动。
时间点还原使你能够在配置的保持期(最多 365 天)内将块 Blob 数据还原到以前的状态。 此功能完全由 Azure 管理,在容器或 Blob 级别提供精细恢复功能。 时间点还原数据存储在源帐户所在的同一区域中,在使用异地冗余配置的情况下,即使在区域中断期间也可以访问这些数据。
Blob 版本控制在 Blob 被修改或删除时自动维护其先前版本。 每个版本都存储为单独的对象,可以进行独立访问。 各版本存储在当前 Blob 所在的同一区域中,并遵循与存储帐户相同的冗余配置。
软删除为意外删除的 Blob 和容器提供安全网,方法是在可配置的时间段内保留已删除的数据。 软删除的数据保留在相同的存储帐户和区域中,使其立即可供恢复。 对于异地冗余帐户,软删除的数据也会复制到次要区域。
Blob 快照创建可用于备份和恢复场景的 Blob 的只读时间点副本。 快照存储在同一存储帐户中,并遵循与基本 Blob 相同的冗余和异地复制设置。
对于跨区域备份要求,请考虑使用适用于 Blob 的 Azure 备份,它提供了集中的备份管理,并且可以将备份数据存储在与源数据不同的区域中。 此服务提供具有可配置保留策略和还原功能的操作备份和保管备份选项。 有关详细信息,请参阅适用于 Blob 的 Azure 备份概述。
服务级别协议
Azure 存储的服务级别协议(SLA)描述了服务的预期可用性以及达到该可用性预期必须满足的条件。 你有资格获得的可用性 SLA 取决于你所使用的存储层和复制类型。 有关详细信息,请参阅 联机服务的 SLA。