其他集群设置
编辑其他集群设置
编辑元数据
编辑可以使用以下设置将整个集群设置为只读
不要依赖此设置来防止对集群的更改。任何有权访问 cluster-update-settings API 的用户都可以使集群再次变为读写状态。
集群分片限制
编辑集群中的分片数量有限制,该限制基于集群中的节点数量。这是为了防止失控的进程创建过多的分片,这会损害性能,在极端情况下可能会破坏集群的稳定性。
这些限制旨在作为安全网,以防止失控的分片创建,而不是大小调整建议。您的集群可以安全支持的确切分片数量取决于您的硬件配置和工作负载,并且可能小于默认限制。
我们不建议将这些限制增加到超出默认值。具有更多分片的集群在正常运行中可能看起来运行良好,但可能需要很长时间才能从临时中断(例如网络分区或意外的节点重启)中恢复,并且在执行维护活动(例如滚动重启或升级)时可能会遇到问题。
如果某个操作(例如创建新索引、还原索引快照或打开已关闭的索引)会导致集群中的分片数量超过此限制,则该操作将失败,并显示指示分片限制的错误。要解决此问题,请通过添加节点来扩展集群,或删除一些索引以使分片数量低于限制。
如果集群已经超过限制(可能是由于节点成员资格的更改或设置的更改),则所有创建或打开索引的操作都将失败。
集群分片限制默认为每个非冻结数据节点 1000 个分片用于普通(非冻结)索引,以及每个冻结数据节点 3000 个分片用于冻结索引。所有打开索引的主分片和副本分片都计入限制,包括未分配的分片。例如,一个具有 5 个主分片和 2 个副本的打开索引计为 15 个分片。关闭的索引不计入分片计数。
您可以使用以下设置动态调整集群分片限制
-
cluster.max_shards_per_node
-
(动态) 限制集群的主分片和副本分片总数。Elasticsearch 计算限制的方式如下
cluster.max_shards_per_node * 非冻结数据节点数量
关闭的索引的分片不计入此限制。默认为
1000
。没有数据节点的集群不受限制。Elasticsearch 会拒绝任何创建超过此限制允许的分片的请求。例如,
cluster.max_shards_per_node
设置为100
且有三个数据节点的集群的分片限制为 300。如果集群已经包含 296 个分片,则 Elasticsearch 会拒绝任何向集群添加五个或更多分片的请求。请注意,如果
cluster.max_shards_per_node
设置为高于默认值的值,则 mmap 计数和打开的文件描述符的限制也可能需要调整。请注意,冻结分片有其自己的独立限制。
-
cluster.max_shards_per_node.frozen
-
(动态) 限制集群的主冻结分片和副本冻结分片总数。Elasticsearch 计算限制的方式如下
cluster.max_shards_per_node.frozen * 冻结数据节点数量
关闭的索引的分片不计入此限制。默认为
3000
。没有冻结数据节点的集群不受限制。Elasticsearch 会拒绝任何创建超过此限制允许的冻结分片的请求。例如,
cluster.max_shards_per_node.frozen
设置为100
且有三个冻结数据节点的集群的冻结分片限制为 300。如果集群已经包含 296 个分片,则 Elasticsearch 会拒绝任何向集群添加五个或更多冻结分片的请求。
这些限制仅适用于创建分片的操作,而不限制分配给每个节点的分片数量。要限制分配给每个节点的分片数量,请使用 cluster.routing.allocation.total_shards_per_node
设置。
用户定义的集群元数据
编辑可以使用集群设置 API 存储和检索用户定义的元数据。这可用于存储关于集群的任意、不经常更改的数据,而无需创建索引来存储它。此数据可以使用任何以 cluster.metadata.
为前缀的键进行存储。例如,要将集群管理员的电子邮件地址存储在键 cluster.metadata.administrator
下,请发出此请求
resp = client.cluster.put_settings( persistent={ "cluster.metadata.administrator": "[email protected]" }, ) print(resp)
response = client.cluster.put_settings( body: { persistent: { 'cluster.metadata.administrator' => '[email protected]' } } ) puts response
const response = await client.cluster.putSettings({ persistent: { "cluster.metadata.administrator": "[email protected]", }, }); console.log(response);
PUT /_cluster/settings { "persistent": { "cluster.metadata.administrator": "[email protected]" } }
用户定义的集群元数据不用于存储敏感或机密信息。任何存储在用户定义的集群元数据中的信息都将可以被任何有权访问 集群获取设置 API 的用户查看,并记录在 Elasticsearch 日志中。
索引墓碑
编辑集群状态维护索引墓碑,以显式表示已删除的索引。集群状态中维护的墓碑数量由以下设置控制
-
cluster.indices.tombstones.size
- (静态) 索引墓碑可以防止在删除发生时未加入集群的节点加入集群并重新导入索引,就像从未发出删除一样。为了防止集群状态变得巨大,我们仅保留最后
cluster.indices.tombstones.size
个删除,默认为 500。如果预计节点将从集群中消失并错过 500 多个删除,则可以增加它。我们认为这种情况很少见,因此默认值是这样。墓碑不会占用太多空间,但我们也认为像 50,000 这样的数字可能太大了。
如果 Elasticsearch 遇到当前集群状态中不存在的索引数据,则这些索引将被认为是悬挂索引。例如,如果当 Elasticsearch 节点脱机时您删除了超过 cluster.indices.tombstones.size
个索引,则会发生这种情况。
您可以使用 悬挂索引 API 来管理这种情况。
记录器
编辑可以使用 logger.
前缀动态更新控制日志记录的设置。例如,要将 indices.recovery
模块的日志记录级别提高到 DEBUG
,请发出此请求
resp = client.cluster.put_settings( persistent={ "logger.org.elasticsearch.indices.recovery": "DEBUG" }, ) print(resp)
response = client.cluster.put_settings( body: { persistent: { 'logger.org.elasticsearch.indices.recovery' => 'DEBUG' } } ) puts response
const response = await client.cluster.putSettings({ persistent: { "logger.org.elasticsearch.indices.recovery": "DEBUG", }, }); console.log(response);
PUT /_cluster/settings { "persistent": { "logger.org.elasticsearch.indices.recovery": "DEBUG" } }
持久任务分配
编辑插件可以创建一种称为持久任务的任务。这些任务通常是长期运行的任务,并存储在集群状态中,允许在集群完全重启后恢复任务。
每次创建持久任务时,主节点都会负责将任务分配给集群的节点,然后分配的节点将在本地提取并执行任务。将持久任务分配给节点的过程由以下设置控制
-
cluster.persistent_tasks.allocation.enable
-
(动态) 启用或禁用持久任务的分配
-
all
- (默认) 允许将持久任务分配给节点 -
none
- 不允许分配任何类型的持久任务
此设置不会影响正在执行的持久任务。只有新创建的持久任务,或者必须重新分配的任务(例如,在节点离开集群后),才会受此设置的影响。
-
-
cluster.persistent_tasks.allocation.recheck_interval
- (动态) 当集群状态发生重大变化时,主节点将自动检查是否需要分配持久任务。但是,可能还有其他因素(例如内存使用情况)会影响持久任务是否可以分配给节点,但不会导致集群状态更改。此设置控制执行分配检查的频率以响应这些因素。默认值为 30 秒。允许的最小值为 10 秒。