ES 模块

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

静态设置:

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

动态设置:

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

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

模块 说明
Cluster level routing and shard allocation 它负责提供控制分片和节点所有活动的设置。这意味着这些设置控制分片分配给节点的时间、地点和方式。
Discovery 它负责发现一个集群。它还维护集群中存在的所有节点的状态。节点相互发现并形成集群。
Gateway 作为发现模块维护节点的状态。同样,网关模块维护集群的状态。它在重启时管理整个集群中的分片。
HTTP 管理 Elasticsearch API 和 HTTP 客户端之间的通信。
Indices 它有助于维护为所有索引全局设置的设置。
Network 它控制默认网络设置,因为 elasticsearch 绑定到本地主机。
Node Client 节点客户端充当主节点。它启动并加入集群中的节点但不能保存数据。
Plugin 插件以自定义方式增强了基本的 elasticsearch 功能。
Painless 一种脚本语言旨在让 elasticsearch 尽可能地受到保护。
Scripting 脚本使用户能够使用脚本并评估自定义表达式
Snapshot or Restore 可以为整个集群以及远程存储库中的单个索引创建快照。用于数据备份。
Thread pools 一个节点存储了多个线程池,这有助于提高一个节点内管理的线程内存消耗。
Transport 在elasticsearch中,传输层用于集群之间的通信。需要配置传输网络层。
Tribe Nodes 它充当整个集群的联合客户端,并负责加入集群。
Cross-Cluster Search 它允许在多个集群上执行搜索请求查询。不需要加入集群来执行这个请求。与部落节点一样,跨集群搜索也充当联合客户端。

我们将详细讨论它们中的每一个:

分片分配和集群级路由

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

集群级分片分配

以下是集群级分片分配的设置列表及其可能的值和说明:

设置 可能的价值 说明
cluster.routing.allocation.enable All 此设置的默认值允许为所有类型的分片分配分片。
None 此设置的可能值之一是 none 不分配任何分片。
Primaries 由于可能的值为primaries,所以它只允许为primary shards分配shards。
new_primaries 和主值一样,new_primaries 也负责分片分配。它只为主分片和新索引分配分片。
cluster.routing.allocation.node_concurrent_recoveries 允许的数值(默认为 2) 此设置限制了并发分片的恢复。
cluster.routing.allocation.node_initial_primaries_recoveries 允许的数值(默认为 4) 此设置限制将恢复的并行初始初选数量。
cluster.routing.allocation.same_shard.host 允许布尔值(默认值为false) 在同一个物理节点上,限制了同一个shard的多个副本的分配。
indices.recovery.concurrent_streams 允许的数值(默认为 3) 在从对等分片恢复分片时,它控制开放网络流的数量。
Indices.recovery.concurrent_small_file_streams 允许的数值(默认为 2) 对于小文件,它控制每个节点的打开流数。在分片恢复时,这个小文件的大小小于 5 Mb。
Cluster.routing.rebalance.enable All 允许平衡各种分片。
None 它不允许任何类型的分片平衡。
Primary 此设置仅允许主分片的分片平衡,而不是所有分片。
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 Always 这是此设置的默认值,始终允许重新平衡。
Indices_primaries_active 当所有主分片都分配在一个集群中时,它允许重新平衡。
Indices_all_active 当所有的主分片和副本分片都被分配时,它允许重新平衡。

基于磁盘的分片分配

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

设置 可能的价值 说明
cluster.routing.allocation.disk.threshold_enabled Boolean 它接受布尔值(真或假)来启用和禁用磁盘分配决策程序。默认情况下,此值为 true。
cluster.routing.allocation.disk.watermark.low String 这个基于磁盘的设置表示磁盘的最大使用量。在此之后,不允许为该磁盘分配任何其他分片。它接受字符串值,默认为 85%。
cluster.routing.allocation.disk.watermark.high String 此设置表示分配时磁盘的最大利用率。如果此时点已达到分配时间,则 Elasticsearch 将该分片分配到另一个磁盘。默认情况下,其值为 90%。
cluster.info.update.interval String 表示磁盘使用和检查之间的间隔。默认间隔值为 30 秒。
Cluster.routing.allocation.disk.include_realocations Boolean 这个设置有助于决定-在计算磁盘利用率时,我们是否应该考虑当前正在分配的分片。为此,它接受一个布尔值,默认为 true。

Discovery

这个模块基本上有助于发现集群。在这个模块的帮助下,我们可以发现一个集群并维护其中所有可用节点的状态。因此,无论何时在集群中添加或删除节点,该集群的状态都会发生变化。集群名称设置在多个集群之间造成了逻辑差异。

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

  • Google 计算引擎发现
  • 蔚蓝的发现
  • 禅意发现
  • EC2 发现

Gateway

该模块有助于维护集群状态以及管理整个集群重启期间的分片数据。以下是网关模块的一些静态设置及其可能的值和说明:

设置 可能的价值 说明
gateway.expected_nodes numeric 此设置的默认可能值为 0(零)。对于本地分片的恢复,它是集群中预期的节点数。
gateway.expected_master_nodes numeric 它是恢复开始前集群中预期的主节点数。此设置的默认值为 0。
gateway.expected_data_nodes 接受 numeric 它是恢复开始前集群中预期的数据节点数。默认情况下,此设置为 0。
gateway.recover_after_time string 此设置表示磁盘利用率和检查之间的间隔。
cluster.routing.allocation.disk.include_relocations Boolean 基本上,此设置用于指定恢复过程将等待启动的时间,而无需担心集群中包含的节点数。

HTTP

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

下面列出了不同的http设置和描述:

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

Indices

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

断路器

  • Elasticsearch 中有多个断路器。
  • 此断路器设置用于防止由于 OutOfMemoryError 而导致的所有操作。
  • 它主要使用 index.breaker.total.limit 设置来控制 JVM 堆大小。
  • 默认情况下,它是 JVM 堆的 70%。

字段数据缓存

  • 在字段上聚合时使用此 fielddata 设置。
  • 它必须有足够的内存来分配。
  • 可以通过使用 fielddata.cache.size 设置来控制内存量。
  • 此内存用于字段数据缓存。

节点查询缓存

  • 节点查询缓存内存用于缓存查询结果。
  • 它使用 LRU(最近最少使用)驱逐政策。
  • 所有分片每个节点共享一个查询缓存。
  • 为了控制此缓存的内存大小,使用了 queries.cache.size 设置。

索引缓冲区

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

分片请求缓存

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

指数恢复

  • 负责在恢复过程中恢复资源。以下是一些用于控制资源的设置(及其默认值)-
设置 默认值
indices.recovery.compress 40MB
indices.recovery.concurrent_streams 3
indices.recovery.concurrent_small_file_streams 2
indices.recovery.file_chunk_size 512KB
indices.recovery.translog_ops 1000
indices.recovery.translog_size 512KB
indices.recovery.max_bytes_per_sec true

TTL 间隔

TTL 间隔是指生存时间间隔。 ttl interval 的主要目的是定义文档的时间,之后文档被删除。有一个重新动态设置来控制这个过程:

设置 默认值
Indices.ttl.interval 60 年代
indices.ttl.bulk_size 1000

节点

每个节点都可以选择是否为数据节点。如果设置值为 false,则节点将是数据节点。 Elasticsearch 允许更改此属性。通过更改 node.data 设置,我们可以更改此设置。

下一章:ES 探索

Elasticsearch 是一种在浏览器上运行的数据库工具,用于查询书面文字。它在其核心执行一些其他任务。它旨在遍历文本并返回与给定查询相同的文本。 Elasticsearch 是一个可扩展且支持集群的数据库工具。更具体地说, ...