ElasticSearch

16. 杂项集群设置

2023-12-10  本文已影响0人  ElasticSearch文档
元数据

整个集群可以通过以下设置设置为只读状态:
cluster.blocks.read_only
(动态)将整个集群设置为只读(索引不接受写操作),元数据不允许修改(创建或删除索引)。
cluster.blocks.read_only_allow_delete
(动态)与cluster.blocks.read_only相同,但允许删除索引以释放资源。
不要依赖此设置阻止对集群的更改。任何具有对cluster-update-settings API的访问权限的用户都可以使集群恢复为读写状态。

集群分片限制

集群中的分片数量存在软限制,该限制基于集群中的节点数量。这旨在防止可能无意中使集群不稳定的操作。
该限制旨在作为一个安全网,而不是一个大小建议。您的集群能够安全支持的确切分片数量取决于硬件配置和工作负载,但在几乎所有情况下,应该远低于此限制,因为默认限制设置得相当高。

如果某个操作(例如创建新索引、还原索引的快照或打开已关闭的索引)导致集群中的分片数量超过此限制,该操作将失败,并显示指示分片限制的错误。

如果由于节点成员资格或设置更改而导致集群已经超过限制,那么所有创建或打开索引的操作都将失败,直到限制如下所述增加,或者关闭或删除某些索引以将分片数量降低到限制以下。

集群分片限制默认为每个正常(非冻结)数据节点 1,000 个分片,并且对于冻结索引的每个冻结数据节点为 3,000 个分片。所有打开索引的主分片和副本分片都计入限制,包括未分配的分片。例如,具有 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 下,请发出以下请求:

PUT /_cluster/settings
{
  "persistent": {
    "cluster.metadata.administrator": "sysadmin@example.com"
  }
}

用户定义的集群元数据不用于存储敏感或机密信息。存储在用户定义的集群元数据中的任何信息都将对任何具有 Cluster Get Settings 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,请发出以下请求:

PUT /_cluster/settings
{
  "persistent": {
    "logger.org.elasticsearch.indices.recovery": "DEBUG"
  }
}
持久任务分配

插件可以创建一种称为持久任务(persistent tasks)的任务。这些任务通常是长寿命的任务,并存储在集群状态中,允许在完全集群重新启动后重新启动任务。

每次创建持久任务时,主节点负责将任务分配给集群中的一个节点,然后分配的节点将接管任务并在本地执行它。将持久任务分配给节点的过程由以下设置控制:

cluster.persistent_tasks.allocation.enable
(动态)启用或禁用持久任务的分配:

all -(默认值)允许将持久任务分配给节点
none - 不允许为任何类型的持久任务分配
此设置不影响已经正在执行的持久任务。仅新创建的持久任务或必须重新分配任务(例如,节点离开集群后)受此设置影响。

cluster.persistent_tasks.allocation.recheck_interval
(动态)主节点将在集群状态发生显着更改时自动检查是否需要分配持久任务。但是,可能还有其他因素,例如内存使用情况,影响是否可以将持久任务分配给节点,但不会导致集群状态更改。此设置控制执行分配检查以响应这些因素的频率。默认值为 30 秒。允许的最小值为 10 秒。
上一篇 下一篇

猜你喜欢

热点阅读