Skip to main content
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

一致性控制

贡献者

一致性控制可以根据应用程序的要求、在对象的可用性与这些对象在不同存储节点和站点之间的一致性之间实现平衡。

默认情况下, StorageGRID 保证新创建的对象的写入后读一致性。成功完成 PUT 后的任何 GET 都将能够读取新写入的数据。对现有对象的覆盖,元数据更新和删除最终保持一致。覆盖通常需要几秒钟或几分钟才能传播,但可能需要长达 15 天的时间。

如果要在不同的一致性级别执行对象操作,可以为每个分段或每个 API 操作指定一致性控制。

一致性控制

一致性控制会影响 StorageGRID 用于跟踪对象的元数据在节点之间的分布方式,从而影响对象用于客户端请求的可用性。

您可以将存储分段或 API 操作的一致性控制设置为以下值之一:

  • 全部:所有节点均立即接收数据、否则请求将失败。

  • * 强 - 全局 * :保证所有站点中所有客户端请求的写入后读一致性。

  • * 强站点 * :保证站点内所有客户端请求的写入后读一致性。

  • 读后新写入:(默认)为新对象提供读后写入一致性、并最终为对象更新提供一致性。提供高可用性和数据保护保证。建议用于大多数情况。

  • 可用:为新对象和对象更新提供最终一致性。对于S3存储分段、请仅根据需要使用(例如、对于包含很少读取的日志值的存储分段、或者对于不存在的密钥执行head或get操作)。S3 FabricPool 存储分段不支持。

使用"`read-after-new-write`"和"`available`"一致性控制

如果 head 或 get 操作使用 read-after-new-write 一致性控制,则 StorageGRID 将执行多个步骤的查找,如下所示:

  • 它首先使用低一致性查找对象。

  • 如果该查找失败、则会在下一个一致性级别重复执行该查找、直到达到与强全局行为等效的一致性级别为止。

如果head或get操作使用`read-after-new-write`一致性控制、但对象不存在、则对象查找将始终达到与强全局行为等效的一致性级别。由于此一致性级别要求每个站点提供多个对象元数据副本、因此如果同一站点上的两个或更多存储节点不可用、您可能会收到大量500个内部服务器错误。

除非您需要与 Amazon S3 类似的一致性保证,否则您可以通过将一致性控制设置为 "`Available" 来防止机头和 GET 操作出现这些错误。` 当机头或 GET 操作使用 "`Available` " 一致性控制时, StorageGRID 仅提供最终一致性。它不会在一致性级别提高时重试失败的操作、因此不要求对象元数据的多个副本可用。

为 API 操作指定一致性控制

要为单个 API 操作设置一致性控制,此操作必须支持一致性控制,并且必须在请求标题中指定一致性控制。此示例将 GET 对象操作的一致性控制设置为 strong-site

GET /bucket/object HTTP/1.1
Date: date
Authorization: authorization name
Host: host
Consistency-Control: strong-site
备注 PUT 对象和 GET 对象操作必须使用相同的一致性控制。

为存储分段指定一致性控制

要为存储分段设置一致性控制,您可以使用 StorageGRID PUT 存储分段一致性请求和 GET 存储分段一致性请求。或者,您也可以使用租户管理器或租户管理 API 。

为存储分段设置一致性控制时,请注意以下事项:

  • 设置存储分段的一致性控制可确定对存储分段中的对象或存储分段配置执行 S3 操作时使用的一致性控制。它不会影响存储分段本身的操作。

  • 单个 API 操作的一致性控制将覆盖存储分段的一致性控制。

  • 通常,存储分段应使用默认一致性控制 read-after-new-write 。 如果请求无法正常工作,请尽可能更改应用程序客户端的行为。或者,配置客户端以指定每个 API 请求的一致性控制。请仅作为最后一种方法在存储分段级别设置一致性控制。

一致性控制和 ILM 规则如何交互以影响数据保护

您选择的一致性控制和 ILM 规则都会影响对象的保护方式。这些设置可以进行交互。

例如,存储对象时使用的一致性控制会影响对象元数据的初始放置,而为 ILM 规则选择的载入行为会影响对象副本的初始放置。由于 StorageGRID 需要访问对象的元数据及其数据来满足客户端请求,因此为一致性级别和载入行为选择匹配的保护级别可以提供更好的初始数据保护和更可预测的系统响应。

ILM 规则可以使用以下载入行为:

  • * 严格 * :必须创建 ILM 规则中指定的所有副本,才能将成功返回给客户端。

  • * 平衡 * : StorageGRID 尝试在载入时创建 ILM 规则中指定的所有副本;如果无法创建,则创建临时副本并将成功返回给客户端。在可能的情况下,将创建 ILM 规则中指定的副本。

  • * 双提交 * : StorageGRID 会立即为对象创建临时副本,并将成功返回给客户端。如果可能,将创建 ILM 规则中指定的副本。

备注 在为ILM规则选择载入行为之前、请阅读中这些设置的完整问题描述 使用 ILM 管理对象

一致性控制和 ILM 规则如何交互的示例

假设您有一个双站点网格,其中包含以下 ILM 规则和以下一致性级别设置:

  • * ILM 规则 * :创建两个对象副本,一个在本地站点,一个在远程站点。此时将选择严格的载入行为。

  • * 一致性级别 * : strong-global (对象元数据会立即分发到所有站点。)

当客户端将对象存储到网格时, StorageGRID 会创建两个对象副本并将元数据分发到两个站点,然后再向客户端返回成功。

在载入成功消息时,此对象将受到完全保护,不会丢失。例如,如果本地站点在载入后不久丢失,则远程站点上仍存在对象数据和对象元数据的副本。此对象完全可检索。

如果您改用相同的 ILM 规则和 strong-site 一致性级别,则在将对象数据复制到远程站点之后,在将对象元数据分发到该远程站点之前,客户端可能会收到一条成功消息。在这种情况下,对象元数据的保护级别与对象数据的保护级别不匹配。如果本地站点在载入后不久丢失,则对象元数据将丢失。无法检索此对象。

一致性级别和 ILM 规则之间的关系可能很复杂。如需帮助,请联系 NetApp 。