ES 模块
Elasticsearch 模块
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 设置,我们可以更改此设置。