- Elasticsearch 教程
- Elasticsearch - 首页
- Elasticsearch - 基本概念
- Elasticsearch - 安装
- Elasticsearch - 数据填充
- 版本迁移
- Elasticsearch - API 约定
- Elasticsearch - 文档 API
- Elasticsearch - 搜索 API
- Elasticsearch - 聚合
- Elasticsearch - 索引 API
- Elasticsearch - CAT API
- Elasticsearch - 集群 API
- Elasticsearch - 查询 DSL
- Elasticsearch - 映射
- Elasticsearch - 分析
- Elasticsearch 模块
- Elasticsearch - 索引模块
- Elasticsearch - Ingest 节点
- Elasticsearch - 管理索引生命周期
- Elasticsearch - SQL 访问
- Elasticsearch - 监控
- Elasticsearch - 数据汇总
- Elasticsearch - 冻结索引
- Elasticsearch - 测试
- Elasticsearch - Kibana 仪表盘
- Elasticsearch - 按字段过滤
- Elasticsearch - 数据表
- Elasticsearch - 区域地图
- Elasticsearch - 饼图
- Elasticsearch - 面积图和条形图
- Elasticsearch - 时间序列
- Elasticsearch - 词云
- Elasticsearch - 热力图
- Elasticsearch - Canvas
- Elasticsearch - 日志 UI
- Elasticsearch 有用资源
- Elasticsearch - 快速指南
- Elasticsearch - 有用资源
- Elasticsearch - 讨论
Elasticsearch 模块
Elasticsearch 由许多模块组成,这些模块负责其功能。这些模块具有以下两种类型的设置:
静态设置 - 这些设置需要在启动 Elasticsearch 之前在配置文件 (elasticsearch.yml) 中配置。您需要更新集群中的所有相关节点以反映这些设置的更改。
动态设置 - 这些设置可以在运行中的 Elasticsearch 上设置。
我们将在本章的后续部分讨论 Elasticsearch 的不同模块。
集群级路由和分片分配
集群级别设置决定分片到不同节点的分配以及分片的重新分配以重新平衡集群。以下是控制分片分配的设置。
集群级分片分配
| 设置 | 可能值 | 描述 |
|---|---|---|
| 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) | 这是应执行的操作的最小优化值。 |
基于磁盘的分片分配
| 设置 | 可能值 | 描述 |
|---|---|---|
| cluster.routing.allocation.disk.threshold_enabled | 布尔值(默认为 true) | 这启用和禁用磁盘分配决定器。 |
| cluster.routing.allocation.disk.watermark.low | 字符串值(默认为 85%) | 这表示磁盘的最大使用率;超过此点后,不会再将其他分片分配到该磁盘。 |
| cluster.routing.allocation.disk.watermark.high | 字符串值(默认为 90%) | 这表示分配时的最大使用率;如果在分配时达到此点,则 Elasticsearch 将把该分片分配到另一个磁盘。 |
| cluster.info.update.interval | 字符串值(默认为 30s) | 这是磁盘使用情况检查之间的间隔。 |
| cluster.routing.allocation.disk.include_relocations | 布尔值(默认为 true) | 这决定了在计算磁盘使用率时是否考虑当前正在分配的分片。 |
发现
此模块帮助集群发现并维护其中所有节点的状态。当从集群中添加或删除节点时,集群状态会发生变化。集群名称设置用于在不同的集群之间创建逻辑差异。有一些模块可以帮助您使用云供应商提供的 API,如下所示:
- Azure 发现
- EC2 发现
- Google Compute Engine 发现
- Zen 发现
网关
此模块维护集群状态和跨完全集群重启的分片数据。以下是此模块的静态设置:
| 设置 | 可能值 | 描述 |
|---|---|---|
| gateway.expected_nodes | 数值(默认为 0) | 预期在集群中存在的节点数量,用于本地分片的恢复。 |
| gateway.expected_master_nodes | 数值(默认为 0) | 在开始恢复之前,预期在集群中存在的 master 节点数量。 |
| gateway.expected_data_nodes | 数值(默认为 0) | 在开始恢复之前,预期在集群中存在的 data 节点数量。 |
| gateway.recover_after_time | 字符串值(默认为 5m) | 这是磁盘使用情况检查之间的间隔。 |
| cluster.routing.allocation.disk.include_relocations | 布尔值(默认为 true) | 这指定了恢复过程将等待启动的时间,而不管加入集群的节点数量如何。 gateway.recover_after_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.pipelining 这启用或禁用 HTTP 管道。 |
| 10 | http.pipelining.max_events 这限制了在关闭 HTTP 请求之前要排队的事件数。 |
索引
此模块维护为每个索引全局设置的设置。以下设置主要与内存使用相关:
断路器
这用于防止操作导致 OutOfMemroyError。该设置主要限制 JVM 堆大小。例如,indices.breaker.total.limit 设置,默认为 JVM 堆的 70%。
Fielddata 缓存
这主要在对字段进行聚合时使用。建议有足够的内存来分配它。可以使用 indices.fielddata.cache.size 设置来控制 fielddata 缓存使用的内存量。
节点查询缓存
此内存用于缓存查询结果。此缓存使用最近最少使用 (LRU) 逐出策略。Indices.queries.cache.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表示该节点不是数据节点。