Elasticsearch 简明教程

Elasticsearch - Modules

Elasticsearch 由多个模块组成,这些模块负责其功能。这些模块有以下两种类型的设置:

  1. Static Settings − 在启动 Elasticsearch 之前,需要在 config (elasticsearch.yml) 文件中配置这些设置。您需要更新集群中所有相关节点才能反映这些设置的更改。

  2. Dynamic Settings − 可以在活动的 Elasticsearch 上设置这些设置。

我们将在本章的以下部分中讨论 Elasticsearch 的不同模块。

Cluster-Level Routing and Shard Allocation

集群级别设置决定将分片分配给不同的节点以及重新分配分片来重新平衡集群。以下这些设置控制分片分配。

Cluster-Level Shard Allocation

Setting

Possible value

Description

cluster.routing.allocation.enable

all

此默认值允许为所有种类的分片分配分片。

primaries

此选项仅允许为主分片分配分片。

new_primaries

此选项仅允许为新索引的主分片分配分片。

none

此选项不允许分配任何分片。

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)

此选项控制分片恢复期间每个节点针对小文件(大小小于 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

数值(默认值为 2)

这限制了群集中并发切分平衡的数量。

cluster.routing.allocation .balance.shard

浮点数(默认值为 0.45f)

这定义了每个节点分配的切片权重因子。

cluster.routing.allocation .balance.index

浮点数(默认值为 0.55f)

这定义了分配给特定节点的每个索引切片数量的比率。

cluster.routing.allocation .balance.threshold

非负浮点数(默认值为 1.0f)

Disk-based Shard Allocation

Setting

Possible value

Description

cluster.routing.allocation.disk.threshold_enabled

布尔值(默认值为真)

这启用和禁止磁盘分配决策器。

cluster.routing.allocation.disk.watermark.low

String value(by default 85%)

这表示磁盘的最大使用量;在这一点之后,无法将任何其他切片分配到该磁盘。

cluster.routing.allocation.disk.watermark.high

字符串值(默认值为 90%)

这表示分配时的最大使用量;如果在分配时达到此点,则 Elasticsearch 将把该切片分配到另一个磁盘。

cluster.info.update.interval

字符串值(默认值为 30 秒)

这是磁盘使用量检查之间的间隔。

cluster.routing.allocation.disk.include_relocations

布尔值(默认值为真)

这决定了在计算磁盘使用量时是否考虑当前正在分配的切片。

Discovery

该模块帮助群集发现和维护其中所有节点的状态。当向群集中添加或从群集中删除某个节点时,群集状态将会发生更改。群集名称设置用于在不同群集之间创建逻辑差异。以下是一些帮助你使用云供应商提供的 API 的模块:

  1. Azure discovery

  2. EC2 discovery

  3. Google compute engine discovery

  4. Zen discovery

Gateway

该模块在整个群集重启过程中维护群集状态和切片数据。该模块的静态设置如下:

Setting

Possible value

Description

gateway.expected_nodes

数字值(默认值为 0)

为本地分片恢复而预期的集群节点数量。

gateway.expected_master_nodes

数字值(默认值为 0)

开始恢复前预期的集群主节点数量。

gateway.expected_data_nodes

数字值(默认值为 0)

开始恢复前预期的数据节点数量。

gateway.recover_after_time

字符串值(默认值为 5m)

这是磁盘使用量检查之间的间隔。

cluster.routing.allocation. disk.include_relocations

布尔值(默认值为真)

此设置指定了无论群集中加入了多少节点,恢复进程都将等待启动的时间。gateway.recover_after_nodes gateway.recover_after_master_nodes gateway.recover_after_data_nodes

HTTP

此模块管理 HTTP 客户端和 Elasticsearch API 之间的通信。该模块可通过将 http.enabled 的值更改为 false 来禁用。

以下为控制此模块的设置(在 elasticsearch.yml 中配置):

S.No

Setting & Description

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 请求之前要排队的事件数量。

Indices

该模块维护设置,这些设置全局针对每个索引进行设置。以下设置主要与内存使用相关:

Circuit Breaker

此项用于防止操作导致 OutOfMemroyError。此项设置主要限制 JVM 堆大小。例如,indices.breaker.total.limit 设置的默认值是 JVM 堆的 70%。

Fielddata Cache

这主要是用于在一个字段中聚合时使用的。建议有足够的内存分配给它。使用索引中用于字段数据缓存的内存量可以得到 indices.fielddata.cache.size 设置的控制。

Node Query Cache

该内存用于缓存查询结果。该缓存使用最近最少使用 (LRU) 驱逐策略。Indices.queries.cahce.size 设置控制该缓存的内存大小。

Indexing Buffer

该缓冲区存储索引中新创建的文档,并在缓冲区已满时刷新它们。诸如 indices.memory.index_buffer_size 的设置控制为该缓冲区分配的堆大小。

Shard Request Cache

该缓存用于存储每个分片的本地搜索数据。可以在创建索引期间启用缓存或通过发送 URL 参数禁用缓存。

Disable cache - ?request_cache = true
Enable cache "index.requests.cache.enable": true

Indices Recovery

它在恢复过程中控制资源。以下是设置−

Setting

Default value

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 Interval

生存期 (TTL) 间隔定义了一个文档的时间,之后将删除该文档。以下动态设置用于控制这一过程−

Setting

Default value

indices.ttl.interval

60s

indices.ttl.bulk_size

1000

Node

每个节点都可以选择为数据节点,也可以不为数据节点。您可以通过更改 node.data 设置来更改此属性。将该值设定为 false 来确定节点不是数据节点。