Elasticsearch 模块
Elasticsearch 由许多模块组成,这些模块负责其功能。 这些模块有两种类型的设置如下
- 静态设置 - 在启动 Elasticsearch 之前,需要在配置(elasticsearch.yml)文件中配置这些设置。 您需要更新集群中的所有关注节点以反映这些设置的更改。
- 动态设置 - 这些设置可以在实时 Elasticsearch 上设置。
我们将在本章的后续部分讨论 Elasticsearch 的不同模块。
集群级路由和分片分配
集群级别设置决定了分片到不同节点的分配以及分片的重新分配以重新平衡集群。 这些是控制分片分配的以下设置。
集群级分片分配
设置 | 可能值 | 描述 |
---|---|---|
cluster.routing.allocation.enable | ||
all | 此默认值允许对所有类型的分片进行分片分配。 | |
primaries | 这只允许对主分片进行分片分配。 | |
new_primaries | 这只允许为新索引的主分片分配分片。 | |
none | 这不允许任何分片分配。 | |
cluster.routing.allocation .node_concurrent_recoveries | Numeric value (by default 2) | 这限制了并发分片恢复的数量。 |
cluster.routing.allocation .node_initial_primaries_recoveries | Numeric value (by default 4) | 这限制了并行初始主要恢复的数量。 |
cluster.routing.allocation .same_shard.host | Boolean value (by default false) | 这限制了同一物理节点中同一分片的多个副本的分配。 |
indices.recovery.concurrent _streams | Numeric value (by default 3) | 这控制了从对等分片恢复分片时每个节点打开的网络流的数量。 |
indices.recovery.concurrent _small_file_streams | Numeric value (by default 2) | 这控制了在分片恢复时每个节点打开的小于 5mb 的小文件的流数。 |
cluster.routing.rebalance.enable | ||
all | 此默认值允许平衡各种分片。 | |
primaries | 这只允许对主分片进行分片平衡。 | |
replicas | 这只允许对副本分片进行分片平衡。 | |
none | 这不允许任何类型的分片平衡。 | |
cluster.routing.allocation .allow_rebalance | ||
always | 此默认值始终允许重新平衡。 | |
indices_primaries _active | 这允许在分配集群中的所有主分片时重新平衡。 | |
Indices_all_active | 这允许在分配所有主分片和副本分片时重新平衡。 | |
cluster.routing.allocation.cluster _concurrent_rebalance | Numeric value (by default 2) | 这限制了集群中并发分片平衡的数量。 |
cluster.routing.allocation .balance.shard | Float value (by default 0.45f) | 这定义了分配在每个节点上的分片的权重因子。 |
cluster.routing.allocation .balance.index | Float value (by default 0.55f) | 这定义了在特定节点上分配的每个索引的分片数量的比率。 |
cluster.routing.allocation .balance.threshold | Non negative float value (by default 1.0f) | 这是应该执行的操作的最小优化值。 |
基于磁盘的分片分配
设置 | 可能值 | 描述 |
---|---|---|
cluster.routing.allocation.disk.threshold_enabled | Boolean 值 (默认为 true) | 这将启用和禁用磁盘分配决策器。 |
cluster.routing.allocation.disk.watermark.low | String 值(默认 85%) | 这表示磁盘的最大使用率; 在这一点之后,没有其他分片可以分配给该磁盘。 |
cluster.routing.allocation.disk.watermark.high | String 值 (默认 90%) | 这表示分配时的最大使用量; 如果在分配时达到这一点,则 Elasticsearch 会将那个分片分配给另一个磁盘。 |
cluster.info.update.interval | String 值 (默认 30s) | 这是磁盘使用检查之间的间隔。 |
cluster.routing.allocation.disk.include_relocations | Boolean 值 (默认 true) | 这决定了在计算磁盘使用情况时是否考虑当前正在分配的分片。 |
发现
该模块帮助集群发现和维护其中所有节点的状态。 当从集群中添加或删除节点时,集群的状态会发生变化。 集群名称设置用于创建不同集群之间的逻辑差异。 有一些模块可以帮助您使用云供应商提供的 API,如下所示
- Azure 发现
- EC2发现
- 谷歌计算引擎发现
- Zen 发现
网关
该模块在整个集群重新启动时维护集群状态和分片数据。 以下是该模块的静态设置
设置 | 可能值 | 描述 |
---|---|---|
gateway.expected_nodes | numeric 值 (默认 0) | 集群中预期用于恢复本地分片的节点数。 |
gateway.expected_master_nodes | numeric 值 (默认 0) | 在开始恢复之前,预计集群中的主节点数。 |
gateway.expected_data_nodes | numeric 值 (默认 0) | 开始恢复前集群中预期的数据节点数。 |
gateway.recover_after_time | String 值 (默认 5m) | 这是磁盘使用检查之间的间隔。 |
cluster.routing.allocation. disk.include_relocations |
Boolean 值 (默认 true) | 这指定了恢复过程等待启动的时间,而不管加入集群的节点数量如何。 gateway.recover_after_nodes gateway.recover_after_master_nodes gateway.recover_after_data_nodes |
HTTP
该模块管理 HTTP 客户端和 Elasticsearch API 之间的通信。 可以通过将 http.enabled
的值更改为 false 来禁用此模块。
以下是控制此模块的设置(在 elasticsearch.yml 中配置)
序号 | 设置 | 描述 |
---|---|---|
1 | http.port | 这是访问Elasticsearch的端口,范围是 9200-9300 。 |
2 | http.publish_port | 此端口用于 http 客户端,在防火墙情况下也很有用。 |
3 | http.bind_host | 这是http服务的主机地址。 |
4 | http.publish_host | 这是 http 客户端的主机地址。 |
5 | http.max_content_length | 这是 http 请求中内容的最大大小。 它的默认值为 100mb。 |
6 | http.max_initial_line_length | 这是 URL 的最大大小,默认值为 4kb。 |
7 | http.max_header_size | 这是最大的 http 标头大小,默认值为 8kb。 |
8 | http.compression | 这将启用或禁用对压缩的支持,其默认值为 false。 |
9 | http.pipelinig | 这将启用或禁用 HTTP 管道。 |
10 | http.pipelining.max_events | 这限制了在关闭 HTTP 请求之前要排队的事件数。 |
索引
该模块维护为每个索引全局设置的设置。 以下设置主要与内存使用相关
Circuit Breaker
这用于防止操作导致 OutOfMemroyError
。 该设置主要限制 JVM 堆大小。 例如,indices.breaker.total.limit
设置,默认为 JVM 堆的 70%。
Fielddata 缓存
这主要用于在字段上聚合时。 建议有足够的内存来分配它。 可以使用 indices.fielddata.cache.size
设置来控制用于字段数据缓存的内存量。
节点查询缓存
此内存用于缓存查询结果。 此缓存使用最近最少使用 (LRU) 逐出策略。 Indices.queries.cahce.size
设置控制此缓存的内存大小。
索引缓冲区
该缓冲区将新创建的文档存储在索引中,并在缓冲区已满时刷新它们。 像 indices.memory.index_buffer_size
这样的设置控制分配给这个缓冲区的堆的数量。
分片请求缓存
此缓存用于存储每个分片的本地搜索数据。 可以在创建索引期间启用缓存,也可以通过发送 URL 参数来禁用缓存。
Disable cache - ?request_cache = true
Enable cache "index.requests.cache.enable": true
索引恢复
它在恢复过程中控制资源。 以下是设置
设置 | 默认值 |
---|---|
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.compress | true |
indices.recovery.max_bytes_per_sec | 40mb |
TTL间隔
生存时间 (TTL) 间隔定义文档的时间,超过该时间文档将被删除。 下面是控制这个过程的动态设置
设置 | 默认值 |
---|---|
indices.ttl.interval | 60s |
indices.ttl.bulk_size | 1000 |
节点
每个节点都可以选择是否是数据节点。 我们可以通过更改 node.data
设置来更改此属性。 将值设置为 false 定义该节点不是数据节点。