索引块

edit

索引块限制了在特定索引上可用的操作类型。这些块有不同的类型,允许阻止写入、读取或元数据操作。可以通过动态索引设置来设置/移除这些块,或者可以使用专用API来添加这些块,该API还确保对于写入块,一旦成功返回给用户,索引的所有分片都正确地记录了该块,例如,在添加写入块后,所有对索引的正在进行的写入操作都已完成。

索引块设置

edit

以下动态索引设置决定了索引中存在的块:

index.blocks.read_only
设置为 true 以使索引和索引元数据为只读,false 以允许写入和元数据更改。
index.blocks.read_only_allow_delete

类似于index.blocks.write,除了当此块生效时可以删除索引。请勿自行设置或移除此块。基于磁盘的分片分配器会根据可用磁盘空间自动设置和移除此块。

从索引中删除文档以释放资源(而不是删除索引本身)会暂时增加索引大小,因此在节点磁盘空间不足时可能不可行。当index.blocks.read_only_allow_delete设置为true时,不允许删除文档。然而,完全删除索引所需的额外磁盘空间非常少,并且几乎可以立即释放索引占用的磁盘空间,因此仍然允许这样做。

当磁盘利用率超过洪水阶段水印时,Elasticsearch会自动添加只读允许删除索引块,并在磁盘利用率降至高水印以下时自动移除此块。有关水印的更多信息,请参阅基于磁盘的分片分配设置,以及修复水印错误以获取解决水印问题的帮助。

index.blocks.read
Set to true to disable read operations against the index.
index.blocks.write
Set to true to disable data write operations against the index. Unlike read_only, this setting does not affect metadata. For instance, you can adjust the settings of an index with a write block, but you cannot adjust the settings of an index with a read_only block.
index.blocks.metadata
设置为 true 以禁用索引元数据的读取和写入。

添加索引块 API

edit

向索引添加一个索引块。

PUT /my-index-000001/_block/write

请求

edit

PUT //_block/

路径参数

edit
<index>

(可选, 字符串) 用于限制请求的索引名称的逗号分隔列表或通配符表达式。

默认情况下,您必须明确指定要添加块的索引。 要允许将块添加到使用 _all* 或其他通配符表达式的索引,请将 action.destructive_requires_name 设置更改为 false。 您可以在 elasticsearch.yml 文件中更新此设置, 或使用 集群更新设置 API 进行更新。

<block>

(必需,字符串) 要添加到索引中的块类型。

Valid values for <block>
metadata
Disable metadata changes, such as closing the index.
read
Disable read operations.
read_only
Disable write operations and metadata changes.
write
Disable write operations. However, metadata changes are still allowed.

查询参数

edit
allow_no_indices

(可选, 布尔值) 如果为false,当任何通配符表达式、 索引别名_all值仅针对缺失或关闭的索引时,请求将返回错误。 即使请求针对其他打开的索引,此行为也适用。例如,如果一个请求针对foo*,bar*,但没有任何索引以bar开头,即使存在以foo开头的索引,请求也会返回错误。

默认为 true

expand_wildcards

(可选,字符串) 通配符模式可以匹配的索引类型。如果请求可以针对数据流,此参数确定通配符表达式是否匹配隐藏的数据流。支持逗号分隔的值,例如 open,hidden。有效值为:

all
匹配任何数据流或索引,包括 隐藏的 数据流和索引。
open
匹配开放的、非隐藏的索引。同时也匹配任何非隐藏的数据流。
closed
匹配关闭的、非隐藏的索引。同时也匹配任何非隐藏的数据流。数据流不能被关闭。
hidden
匹配隐藏的数据流和隐藏的索引。必须与 openclosed 或两者结合使用。
none
不接受通配符模式。

默认为 open

ignore_unavailable
(可选,布尔值) 如果为false,则当请求目标是一个缺失或关闭的索引时,请求将返回错误。默认为false
master_timeout
(可选,时间单位) 等待主节点的时间段。如果在超时到期之前主节点不可用,请求将失败并返回错误。默认为30s。 也可以设置为-1,表示请求不应超时。
timeout
(可选,时间单位) 在更新集群元数据后,等待集群中所有相关节点响应的时间段。 如果在超时到期之前未收到响应,集群元数据更新仍然适用,但响应将表明它未被完全确认。 默认为 30s。 也可以设置为 -1 以指示请求不应超时。

示例

edit

以下示例展示了如何添加索引块:

PUT /my-index-000001/_block/write

API返回以下响应:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "indices" : [ {
    "name" : "my-index-000001",
    "blocked" : true
  } ]
}