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