译者注:如译文中有不精准或错误的地方,欢迎大家指正,互相学习
地震、飓风、洪水或其他恶劣天气等灾难可能会导致整个云区域出现不可预测的中断。在Oracle云基础设施(OCI)和许多其他云供应商上运行的应用需要做好准备并保护自己免受这些区域性中断的影响。在OCI对象存储服务中将数据存储为对象可能会受到区域性中断的影响。尽管对象存储具有高可用性和持久性,但它仍然是一项区域性服务,并且取决于它所在的区域。为了缓解和预防此类灾难,您可以将通过对象存储运行其数据的应用程序部署在地理位置隔离的不同区域中。
让我们演练一下如何构建自己的容灾恢复策略,通过在OCI云区域之间复制对象来确保应用程序在发生区域性中断时保持连续性。
健全的容灾恢复策略包括以下步骤:
- 为容灾做准备
- 使用跨区域对象复制
- 实施容灾恢复设置
- 处理应用程序故障转移
- 处理区域恢复
- 进行一次性对账
- 执行应用程序故障恢复
请记住通过执行灾难模拟练习来定期验证这些恢复步骤。
为容灾做准备
尽管很少见,但灾难随时可能发生并导致整个云区域中断。在这种情况下,部署在单个区域中的应用程序可能对用户不可用。但是,您可以通过在OCI的多个地理分隔区域中运行应用程序,来构建可实现更高可用性的应用程序,以便在一个区域发生中断时应用程序服务不受影响。如果这些应用程序旨在OCI对象存储中存储和使用数据,则需要格外小心,确保数据在区域中断时可用。
对象存储复制可针对此类区域性中断提供保护。我们建议选择位于同一国家/地区且与主要区域相距较远的OCI区域作为复制区域。例如,可以选择us-sanjose-1作为us-ashburn-1主要区域的次要区域。
使用跨区域对象复制
要将对象自动从一个存储桶复制到相同或不同区域中的另一个存储桶,您必须配置所需的身份和访问管理(IAM)策略。然后,通过选择要将对象复制到的目标区域和存储桶,在源存储桶上配置复制策略。创建策略后上传到源存储桶的对象将异步复制到目标存储桶。关于如何设置跨地域对象复制,请参见本教程。
实施容灾恢复设置
使用对象复制配置后,客户现在可以在主区域中激活应用程序,并使用读写存储桶存储对象,这些对象由OCI对象存储复制到次要区域只读存储桶,其中应用程序可以是被动的并与主存储桶同步。
为了减少灾难期间对应用程序用户的影响,可以将客户端战略性地编程为首先从主区域(us-ashburn-1)读取,如果读取失败,它们可以尝试从次要区域(us-sanjose-1) 读取。如果复制了对象,它在次要区域中仍然可用。如果主区域中发生一系列对象读取和写入故障,则必须触发应用程序故障转移。

如果源存储桶在创建复制策略之前具有现有对象,则不会复制这些对象。对于这些现有对象,可以使用以下方法复制它们:
- 从源读取对象并使用“if-none-match: *”将其复制到目标存储桶中,以确保您不会与复制竞争。
- 将同一对象读回源存储桶,从而触发对象的复制。
处理应用程序故障转移
如果主区域出现故障,则必须触发应用程序故障转移。区域中断会停止对象的跨区域复制。要使次区域中的应用程序使用目标存储桶中的对象,必须允许该存储桶具有读/写权限。

处理区域恢复
当主区域恢复时,可以将其设置为次区域。新次要区域(us-ashburn-1)中的存储桶必须设为只读。现在,必须在us-sanjose-1中的主存储桶(bkp-media-bucket) 上配置跨区域复制,才能开始复制到us-ashburn-1中的媒体存储桶。按照源存储桶的“使用跨区域复制”部分中提到的步骤操作。

进行一次性对账
当区域从灾难中恢复时,一次性对帐可以处理存储桶内容的差异。根据所需的恢复时间目标(RTO)和恢复点目标(RPO),在us-ashburn-1区域关闭时创建、删除或更新的对象必须与us-sanjose-1区域存储桶同步。
列出源(us-sanjose-1)和目标(us-ashburn-1)区域中的存储桶。当您发现差异时,您有以下可能性:
- 对象存在于us-sanjose-1中,但不存在us-ashburn-1:复制对象,使用 “if-none-match: *” 来确保不会与复制竞争。
- 对象存在于us-ashburn-1中,但不存在于us-sanjose-1中:此对象未通过复制,或者在us-sanjose-1中被复制然后删除。保留这些对象是最安全的,但应用程序可能有更好的方法来确定要执行的操作。
- 对象存在于us-sanjose-1和us-ashburn-1中,但对象是不同的!这是协调中最难的部分。采用以下方法之一:
- 抛出错误。
- 将一个对象移动到“冲突”存储桶并让某人查看它。
- 最后一个写入者获胜(按时钟时间)
- 特定于应用程序的合并逻辑
- 第一个作者获胜。
- 新的主要区域始终获胜。
协调后,应用程序可以选择继续使用此配置作为新的稳定状态操作。在这种情况下,us-sanjose-1可以是主动主区域,us-ashburn-1可以是被动次区域,因此不需要以下故障恢复步骤。
执行应用程序故障恢复
如果要将应用程序故障恢复到原始主区域 (us-ashburn-1),请使用以下步骤。对帐完成后,允许应用程序,将us-sanjose-1中的主存储桶设为只读,将us-ashburn-1中的存储桶设置为可读写,并在另一个方向上配置对象复制。然后触发应用程序故障转移。完成后,以us-ashburn-1作为主区域回到原始状态。

结论
可以使用此博客中的方法为容灾恢复方案配置对象复制。您可以使用本教程中的步骤来配置对象复制。使用此博客中的步骤作为发生灾难时恢复应用程序的指南。
要了解有关OCI对象存储复制的更多信息,请参阅文档。要开始使用Oracle云基础设施,请创建一个免费试用帐户。
原文标题:Disaster recovery strategy for OCI Object Storage
原文作者:Ashutosh Mate
原文链接:https://blogs.oracle.com/cloud-infrastructure/post/disaster-recovery-strategy-oci-object-storage




