通过 CloudFront 源站故障转移优化高可用性 - Amazon CloudFront
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

通过 CloudFront 源站故障转移优化高可用性

对于需要高可用 CloudFront 性的场景,您可以设置源站故障转移。要开始使用,您需要创建一个具有两个源的源组:一个主源和一个辅助源。如果主源不可用,或者返回表示失败的特定 HTTP 响应状态代码,则 CloudFront 会自动切换到辅助源。

要设置源故障转移,您必须具有一个至少包含两个源的分配。接下来,为包含两个源(将其中一个设置为主源)的分配创建一个源组。最后,创建或更新缓存行为以使用源组。

要查看用于设置源组和配置特定源故障转移选项的步骤,请参阅创建源组

为缓存行为配置源故障转移后, CloudFront 对查看者请求执行以下操作:

  • 当有缓存命中时, CloudFront 返回请求的对象。

  • 当出现缓存未命中时,会将请求 CloudFront 路由到源组中的主要来源。

  • 当主源返回未配置为故障转移的状态码(例如 HTTP 2xx 或 3xx 状态码)时,将请求的对象 CloudFront 提供给查看者。

  • 发生以下任何情况时:

    • 主源返回您为故障转移配置的 HTTP 状态代码

    • CloudFront 无法连接到主源

    • 来自主源的响应需要太长时间(超时)

    然后将请求 CloudFront 路由到起源组中的次要来源。

    注意

    对于某些用例,例如流式传输视频内容,您可能需要快速故障转移 CloudFront 到辅助来源。要调整 CloudFront 故障转移到辅助源的速度,请参阅控制源超时和尝试次数

CloudFront 将所有传入的请求路由到主源,即使之前的请求故障转移到辅助源也是如此。 CloudFront 只有在向主源发出的请求失败后,才会向辅助源发送请求。

CloudFront 仅当查看器请求的 HTTP 方法为GET、或时HEAD,才会故障转移到辅助源OPTIONS。 CloudFront 当查看者发送不同的 HTTP 方法(例如POST、等)时PUT,不会进行故障切换。

下图阐述了源故障转移的工作原理。


				源故障转移的工作原理

创建源组

创建源组
  1. 登录Amazon Web Services Management Console并打开 CloudFront 控制台,网址为https://console.amazonaws.cn/cloudfront/v4/home

  2. 选择要为其创建源组的分配。

  3. 选择选项卡。

  4. 确保此分配有多个源。否则请添加第二个源。

  5. Origins(源)选项卡的 Origin groups(源组)窗格中,选择 Create origin group(创建源组)。

  6. 选择源组的源。添加源后,使用箭头设置优先级,即哪个源是主源组,哪个源是辅助源。

  7. 为此源组输入一个名称。

  8. 选择要用作故障转移条件的 HTTP 状态代码。您可以选择以下状态代码的任意组合:400、403、404、416、500、502、503 或 504。当 CloudFront 收到包含您指定的状态代码之一的响应时,它会故障转移到辅助源。

    注意

    CloudFront 仅当查看器请求的 HTTP 方法为GET、或时HEAD,才会故障转移到辅助源OPTIONS。 CloudFront 当查看者发送不同的 HTTP 方法(例如POST、等)时PUT,不会进行故障切换。

  9. 选择 Create origin group(创建源组)。

有关为分配指定源组的信息,请参阅名称

控制源超时和尝试次数

默认情况下,在故障转移到辅助源之前, CloudFront 会尝试连接到源组中的主源长达 30 秒(3 次连接尝试,每次尝试 10 秒)。对于某些用例,例如流式传输视频内容,您可能需要更快地故障转移 CloudFront 到辅助来源。您可以调整以下设置以影响 CloudFront 故障转移到辅助源的速度。如果源是次要来源,或者源不是源组的一部分,则这些设置会影响向查看者 CloudFront 返回 HTTP 504 响应的速度。

要更快地进行故障转移,请指定更短的连接超时、更少的连接尝试次数,或者同时指定两者。对于自定义源(包括配置 静态网站托管的 Amazon S3 存储桶源),您还可以调整源响应超时。

源连接超时

源连接超时设置会影响尝试与源建立连接时 CloudFront 等待的时间。默认情况下, CloudFront 等待 10 秒钟才能建立连接,但您可以指定 1—10 秒(含)。有关更多信息,请参阅连接超时

源连接尝试次数

源连接尝试次数设置会影响 CloudFront 尝试连接到源的次数。默认情况下, CloudFront 尝试连接 3 次,但您可以指定 1—3(包括在内)。有关更多信息,请参阅连接尝试次数

对于自定义源(包括配置了静态网站托管的 Amazon S3 存储桶),此设置还会影响在源响应超时时时 CloudFront 尝试从源获取响应的次数。

源响应超时
注意

这仅适用于自定义源。

源站响应超时设置会影响 CloudFront 等待从源站收到响应(或接收完整响应)的时间。默认情况下, CloudFront 等待 30 秒,但您可以指定 1—60 秒(含)。有关更多信息,请参阅响应超时(仅自定义源)

如何更改这些设置

CloudFront 控制台中更改这些设置

  • 对于新源或新分配,您可以在创建资源时指定这些值。

  • 对于现有分配中的现有源,可在编辑源时指定这些值。

有关更多信息,请参阅 您创建或更新分配时指定的值

将源故障转移与 Lambda@Edge 函数结合使用

您可以将 Lambda @Edge 函数与使用源组设置的 CloudFront 分布一起使用。要使用 Lambda 函数,请在创建缓存行为时在源组的源请求或源响应触发器中指定它。当您将 Lambda@Edge 函数与源组一起使用时,对于单个查看器请求可以触发两次此函数。例如,考虑以下情景:

  1. 使用源请求触发器创建 Lambda@Edge 函数。

  2. Lambda 函数在向主源 CloudFront 发送请求时触发一次(缓存未命中)。

  3. 主源使用为故障转移配置的 HTTP 状态代码进行响应。

  4. 当向辅助源 CloudFront 发送相同的请求时,会再次触发 Lambda 函数。

下图阐述了源故障转移在源请求或响应触发器中包含 Lambda@Edge 函数时的工作方式。


					源故障转移如何与 Lambda@Edge 函数结合使用

有关如何使用 Lambda@Edge 触发器的更多信息,请参阅为 Lambda@Edge 函数添加触发器

将自定义错误页与源故障转移结合使用

可以将自定义错误页面与源组结合使用,方式与将其与未为源故障转移设置的源结合使用的方式类似。

使用源故障转移时,您可以配置 CloudFront 为返回主源或辅助源(或两者)的自定义错误页面:

  • 返回主源的自定义错误页面-如果主源返回的HTTP状态代码未配置为故障转移,则将自定义错误页面 CloudFront 返回给查看者。

  • 返回辅助来源的自定义错误页面-如果 CloudFront 收到来自辅助来源的故障状态代码,则 CloudFront 返回自定义错误页面。

有关将自定义错误页面与配合使用的更多信息 CloudFront,请参阅生成自定义错误响应