Elasticsearch 模块

2025年03月17日 | 阅读 9 分钟

Elasticsearch 由模块组成,这些模块负责其功能。借助这些模块,Elasticsearch 可以执行其功能。在本章中,我们将讨论几个模块。这些模块有两种设置:静态和动态。

静态设置

  • 静态设置需要配置。
  • 必须在节点级别并在每个相关节点上设置这些设置。
  • 在启动 Elasticsearch 之前,我们可以将静态设置配置在 config 文件 (elasticsearch.yml) 中。
  • 我们也可以在启动节点时通过命令行或环境变量来设置这些设置。
  • 为了反映这些设置所做的更改,我们需要更新集群中的所有相关节点。

动态设置

  • 动态设置可以在 Elasticsearch 中动态设置。

我们可以使用 Elasticsearch 中的 cluster-update-setting API 在实时集群上更新这些设置。

模块描述
集群级别路由和分片分配它负责提供控制分片和节点所有活动的设置。这意味着这些设置控制分片何时、何地以及如何分配给节点。
Discovery (发现)它负责发现集群。它还维护集群中所有节点的状. 态。节点互相发现并形成集群。
网关正如发现模块维护节点状态一样。网关模块也维护集群状态。它在重启后管理整个集群的分片。
HTTP管理 Elasticsearch API 与 HTTP 客户端之间的通信。
Indices它有助于维护为所有索引全局设置的设置。
网络它控制默认网络设置,因为 Elasticsearch 绑定到 localhost。
节点客户端节点客户端充当主节点。它启动并加入集群中的一个节点,但不能存储数据。
插件插件以自定义方式增强了基本的 Elasticsearch 功能。
Painless一种为 Elasticsearch 设计的脚本语言,旨在尽可能安全。
脚本脚本允许用户使用脚本并评估自定义表达式。
快照或还原可以为整个集群或单个索引创建快照到远程存储库。它用于数据备份。
线程池节点存储了几个线程池,这些线程池有助于提高节点内管理的线程内存消耗。
交通在 Elasticsearch 中,传输层用于集群之间的通信。需要配置传输网络层。
Tribe 节点它充当集群的联合客户端,并负责加入集群。
跨集群搜索它允许在多个集群上执行搜索请求查询。执行此请求不需要加入集群。与 Tribe 节点一样,跨集群搜索也充当联合客户端。

我们将详细讨论每一个 -

分片分配和集群级路由

集群级设置决定了分片到不同节点的分配。这些设置还决定了分片重新分配以重新平衡集群。以下是一些用于控制分片分配的设置 -

集群级分片分配

以下是集群级分片分配的设置列表,以及它们可能的值和描述

设置可能的值描述
cluster.routing.allocation.enable全部这是此设置的默认值,允许分配所有类型分片的分片。
此设置的一个可能值为 **none**,它不分配任何分片。
Primaries由于可能的值是 primaries,它只允许分配主分片。
new_primaries与 primary 值一样,new_primaries 也负责分片分配。它仅为新索引分配主分片。
cluster.routing.allocation.node_concurrent_recoveries允许的数值(默认为 2)此设置限制了并发分片的恢复。
cluster.routing.allocation.node_initial_primaries_recoveries允许的数值(默认为 4)此设置限制了多少并行初始主分片会恢复。
cluster.routing.allocation.same_shard.host允许的布尔值(默认为 false)在同一物理节点上,它限制了同一分片的多个副本的分配。
indices.recovery.concurrent_streams允许的数值(默认为 3)在从对等分片恢复分片时,它控制着打开的网络流的数量。
indices.recovery.concurrent_small_file_streams允许的数值(默认为 2)对于小文件,它控制每个节点打开的流的数量。在分片恢复时,该小文件的大小小于 5 Mb。
cluster.routing.rebalance.enable全部允许所有类型分片的平衡。
它不允许任何类型分片的平衡。
主要此设置仅允许主分片的平衡,而不是所有分片。
Replica顾名思义,只允许副本分片的平衡。
cluster.routing.allocation.cluster_concurrent_rebalance允许的数值(默认为 2)此设置限制了集群中并发分片平衡的数量。
cluster.routing.allocation.balance.shard只允许浮点数值(默认为 0.45f)在每个节点上,它定义了分片分配的权重因子。
cluster.routing.allocation.balance.index允许浮点数值(默认为 0.55f)它有助于定义在特定节点上分配的每个节点的分片数量的比例。

 

cluster.routing.allocation.balance.threshold允许浮点但非负值(默认为 1.0f)它是操作的最小优化值。
cluster.routing.allocation.allow_rebalance总是这是此设置的默认值,它始终允许重新平衡。
Indices_primaries_active当集群中的所有主分片都分配完毕时,它允许重新平衡。
Indices_all_active当所有主分片和副本分片都分配完毕时,它允许重新平衡。

基于磁盘的分片分配

在集群级分片分配设置之后,我们将讨论基于磁盘的分片分配。以下是基于磁盘的分片分配的设置列表,以及它们可能的值和描述

设置可能的值描述
cluster.routing.allocation.disk.threshold_enabled布尔值它接受布尔值(true 或 false)来启用和禁用磁盘分配决策器。默认情况下,此值为 true。
cluster.routing.allocation.disk.watermark.lowString此基于磁盘的设置表示磁盘的最大使用率。在此之后,不允许将任何其他分片分配给该磁盘。它接受字符串值,默认值为 85%。
cluster.routing.allocation.disk.watermark.highString此设置表示分配期间磁盘的最大利用率。在分配期间达到此点时,Elasticsearch 会将该分片分配给另一个磁盘。默认情况下,其值为 90%。
cluster.info.update.intervalString它表示磁盘使用率和检查之间的间隔。默认间隔值为 30 秒。
cluster.routing.allocation.disk.include_realocations布尔值此设置有助于决定:在计算磁盘利用率时,是否应考虑当前正在分配的分片。为此,它接受一个布尔值,默认为 true。

Discovery (发现)

此模块主要有助于集群的发现。借助此模块,我们可以发现集群并维护其中所有可用节点的状. 态。因此,每当有节点被添加到集群或从集群中删除时,该集群的状态就会发生变化。集群名称设置在多个集群之间创建了逻辑差异。

云供应商提供了一些模块,帮助我们使用 API。这些模块如下 -

  • Google Compute Engine Discovery
  • Azure Discovery
  • Zen Discovery
  • EC2 Discovery

网关

此模块有助于在整个集群重启后维护集群状态并管理分片数据。以下是网关模块的一些静态设置及其可能的值和描述 -

设置可能的值描述
gateway.expected_nodesnumeric此设置的默认可能值为 0(零)。对于本地分片的恢复,它是集群中预期节点的数量。
gateway.expected_master_nodes接受数值这是在恢复开始前集群中预期的主节点数量。此设置的默认值为 0。
gateway.expected_data_nodes Accept数值这是在恢复开始前集群中预期的数据节点数量。默认情况下,此设置的值为 0。
gateway.recover_after_time接受字符串此设置表示磁盘利用率和检查之间的间隔。
cluster.routing.allocation.disk.include_relocations布尔值基本上,此设置用于指定恢复过程将在不考虑集群中包含的节点数量的情况下等待多长时间才能开始。

HTTP

  • HTTP 模块负责管理 Elasticsearch API 和 HTTP 客户端之间的通信。
  • 如果需要,此模块可以被禁用并重新启用。可以通过将 **enabled** 值更改为 **false** 来禁用它。
  • 需要配置一系列设置来控制此模块。这些设置在 **yml** 文件中可用。

以下是不同 http 设置及其描述的列表 -

序号设置描述
1http.port这是用于在 Web 上访问 Elasticsearch 的 http 端口。默认端口号为 **9200**。其范围在 9200-9300 之间。
2http.bind_host此 http.bind_host 是 **http 服务**的 **主机地址**。
3http.publish_port此端口用于 **HTTP 客户端**。在防火墙的情况下,它也很有用。
4http.publish_host与 http.bind_host 类似,它是一个 **主机地址**。此主机地址用于 **HTTP 客户端**。
5http.max_content_length这用于设置 http 请求中内容的最大大小。其 **默认大小**为 **100mb**。
6http.max_initial_line_length这用于指定 URL 的最大大小。其 **默认大小**为 **8kb**。
7http.max_header_size这指定了 http 头的最大大小。默认情况下,其值为 **8kb**。
8http.compression此设置的默认值为 **false**。此设置用于启用或禁用对压缩的支持。
9http.pipelininghttp.pipelining 设置用于启用或禁用 HTTP 流水线。
10http.pipelining.max_events在关闭 http 请求之前,此设置有助于限制要排队的事件数量。

Indices

此模块有助于维护每个索引的设置,这些设置是全局设置的。有一些设置我们将讨论,主要与内存使用有关。这些设置如下 -

断路器

  • Elasticsearch 中有几个断路器。
  • 此断路器设置用于防止所有 **OutOfMemoryError** 操作。
  • 它主要通过 indices.breaker.total.limit 设置控制 JVM 堆大小。
  • 默认情况下,它是 JVM 堆的 70%。

Fielddata 缓存

  • 当对字段进行聚合时,使用此 fielddata 设置。
  • 它必须有足够的内存来分配它。
  • 内存量可以通过使用 **fielddata.cache.size** 设置来控制。
  • 此内存用于 field data 缓存。

节点查询缓存

  • 节点查询缓存内存用于缓存查询结果。
  • 它使用 LRU(最近最少使用)淘汰策略。
  • 所有分片共享每个节点的一个查询缓存。
  • 要控制此缓存的内存大小,可以使用 **queries.cache.size** 设置。

索引缓冲区

  • 索引缓冲区用于在索引中存储新创建的文档。
  • 当缓冲区满时,它会刷新文档。
  • indices.memery.index_buffer_size 设置有助于控制为存储文档的此缓冲区分配的堆内存量。

分片请求缓存

  • 分片请求缓存保存每个分片的本地搜索数据。
  • 默认情况下,它可以缓存搜索请求的结果。
  • Elasticsearch 允许我们启用和禁用缓存。
  • 我们可以在创建索引时启用缓存。通过发送 URL 参数,也可以禁用缓存。

索引恢复

  • 它负责在恢复过程中恢复资源。以下是一些(及其默认值)用于控制资源的设置 -
设置默认值
indices.recovery.compress40MB
indices.recovery.concurrent_streams3
indices.recovery.concurrent_small_file_streams2
indices.recovery.file_chunk_size512KB
indices.recovery.translog_ops1000
indices.recovery.translog_size512KB
indices.recovery.max_bytes_per_sectrue

TTL 间隔

TTL 间隔指的是生存时间间隔。TTL 间隔的主要目标是定义文档的生存时间,之后该文档将被删除。有一些动态设置可以控制此过程 -

设置默认值
indices.ttl.interval60s
indices.ttl.bulk_size1000

节点

每个节点都有成为数据节点或不成为数据节点的选项。如果设置为 **false**,则节点将成为数据节点。Elasticsearch 允许更改此属性。通过更改 **node.data** 设置,我们可以更改此设置。