Elasticsearch 由许多各自独立的模块组成,这些模块独自对其的功能负责

对这些模块的设置, Elasticsearch 提供了两种方法:

1、 静态设置;

静态设置主要是在启动 Elasticsearch 之前,在配置文件 elasticsearch.yml 中配置这些模块

静态配置需要更新群集中的所有关注节点来启用这些设置所做的更改

2、 动态配置;

可以在 Elasticsearch 运行过程中动态的更改这些配置项

本章节接下来的部分将讨论和介绍各个不同的模块,和允许的配置项

集群级别的路由和分片分配

集群级别设置用于控制分配给不同节点的分片和重新平衡时的节点再分配

下面列出的这些选项用于精细的控制分片的分配

集群级别的分片分配配置项

1、 cluster.routing.allocation.enable

是否启用分配器,默认值有四个

<table> 
 <thead> 
  <tr> 
   <th align="left">值</th> 
   <th align="left">说明</th> 
  </tr> 
 </thead> 
 <tbody> 
  <tr> 
   <td align="left">all</td> 
   <td align="left">默认值,允许在任意分片上启用分配器</td> 
  </tr> 
  <tr> 
   <td align="left">primaries</td> 
   <td align="left">只允许在主分片上启用分配器</td> 
  </tr> 
  <tr> 
   <td align="left">new_primaries</td> 
   <td align="left">只允许在新索引的主分片上启用分配器</td> 
  </tr> 
  <tr> 
   <td align="left">none</td> 
   <td align="left">不允许使用任何分片分配器</td> 
  </tr> 
 </tbody> 
</table>

2、 cluster.routing.allocation.node_concurrent_recoveries

数值型,默认为 2,用于限制分片恢复时的并发数

3、 cluster.routing.allocation.node_initial_primaries_recoveries

数值型,默认为 4,用于限制主要分片恢复时的开始并发数

4、 cluster.routing.allocation.same_shard.host

布尔值,默认为 false,用于限制同一物理节点中的同一分片的副本分片是否可以多于 1 个

5、 indices.recovery.concurrent_streams

数值型,默认为 2 ,从对等网络恢复分片时,用于控制每个节点的开放网络流的数量

6、 indices.recovery.concurrent_small_file_streams

数值型,默认为 2,分片恢复时用于控制小于 5MB 的节点的打开流数量

7、 cluster.routing.rebalance.enable

是否启用重新平衡,可选值有三个

<table> 
 <thead> 
  <tr> 
   <th align="left">值</th> 
   <th align="left">说明</th> 
  </tr> 
 </thead> 
 <tbody> 
  <tr> 
   <td align="left">all</td> 
   <td align="left">默认值,允许在任意类型的分片上执行平衡</td> 
  </tr> 
  <tr> 
   <td align="left">primaries</td> 
   <td align="left">只允许在主分片上执行分片平衡</td> 
  </tr> 
  <tr> 
   <td align="left">replicas</td> 
   <td align="left">只允许在副本分片上执行分片平衡</td> 
  </tr> 
  <tr> 
   <td align="left">none</td> 
   <td align="left">不允许执行任何分片平衡</td> 
  </tr> 
 </tbody> 
</table>

8、 cluster.routing.allocation.allow_rebalance

用于设置是否允许集群重新平衡,可选值有三个

<table> 
 <thead> 
  <tr> 
   <th align="left">值</th> 
   <th align="left">说明</th> 
  </tr> 
 </thead> 
 <tbody> 
  <tr> 
   <td align="left">always</td> 
   <td align="left">默认值,始终允许集群重新平衡</td> 
  </tr> 
  <tr> 
   <td align="left">indices_primaries_active</td> 
   <td align="left">重新分配集群的主分片时允许重新平衡</td> 
  </tr> 
  <tr> 
   <td align="left">indices_all_active</td> 
   <td align="left">重新分配集群中的主分片和副分片时允许重新平衡</td> 
  </tr> 
 </tbody> 
</table>

9、 cluster.routing.allocation.cluster_concurrent_rebalance

数值,默认为 2, 用于设置集群中并发平衡分片的数量

10、 cluster.routing.allocation.balance.shard

浮点值,默认为 0.45f,用于设置每个节点上分配分片的权重因子

11、 cluster.routing.allocation.balance.index

浮点值,默认为 0.55f,用于设置特定节点上分配每个索引时的分片数量比率

12、 cluster.routing.allocation.balance.threshold

非负浮点值,默认为 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 设置计算磁盘使用情况时是否考虑当前正在分配的分片

发现模块 ( Discovery )

此模块可以帮助集群发现和维护其中所有节点的状态

从集群添加或删除节点时,群集状态会变更

集群名称用于设置用于创建不同集群之间的逻辑差异

下面这些模块可以帮助我们使用云供应商提供的 API

1、 Azure发现服务;
2、 EC2发现服务;
3、 Googlecomputeengine发现服务;
4、 Zen发现服务;

网关模块 ( Gateway )

此模块用于整个集群重新启动时维护集群状态和分片数据

提供了以下选项用于定制集群网关服务

配置项 数据类型 默认值 说明
gateway.expected_ nodes numeric 0 恢复本地分片时的预计的集群中的节点数量
gateway.expected_ master_nodes numeric 0 开始恢复前预计的集群中主节点的数量
gateway.expected_ data_nodes numeric 0 开始恢复前预计的数据节点的数量
gateway.recover_ after_time String 5m 用于指定恢复进程启动前的等待时间
如果设置了此参数,那么就会忽略加入集群的节点数量
gateway.recover_ after_nodes numeric 用于指定恢复进程启动前的加入节点的数量
gateway.recover_after_ master_nodes numeric 用于指定恢复进程启动前的加入的主节点的数量
gateway.recover_after_ data_nodes numeric 用于指定恢复进程启动前的加入的数据节点的数量

HTTP 模块

该模块主要用于管理 HTTP 客户端和 Elasticsearch API 之间的通信

可以将配置 http.enabled 的值更改为 false 来禁用此模块

下表列出的选项用于定制 HTTP 模块 ( 主要在 config/elasticsearch.yml 中配置 )

配置项 默认值 说明
http.port 9200 Elasticsearch RESTFul API 的端口号,默认范围为:9200-9300
http.publish_port HTTP 客户端的端口号,对于防火墙设置很有用
http.bind_host HTTP 服务器端的地址
http.publish_host HTTP 客户端的地址
http.max_content_length 100mb 设置请求消息体内容长度的最大值
http.max_initial_line_length 4kb URL 的最大长度
http.max_header_size 8kb 设置 HTTP 头部数据允许的最大值
http.compression false 是否启用压缩功能
http.pipelinig 是否启用 HTTP 多路复用功能
http.pipelining.max_events 用于限制关闭 HTTP 请求之前的请求处理数量

索引模块 ( Indices )

该模块用于维护每个索引的全局配置

下面罗列的配置主要都是和内存使用相关的

断路器 ( Circuit Breaker )

该配置主要用于限制 JVM 堆的大小,以防止 OutOfMemroyError

可以配置的选项有

indices.breaker.total.limit

默认为JVM 堆的 70%

字段数据缓存

该缓存主要用于存储字段上的统计信息,建议给它分配足够的内存

可以使用下面的选项来定制字段数据缓存的大小

indices.fielddata.cache.size

节点查询缓存

该缓存用于缓存查询结果,采用最近最少使用策略 ( LRU )

可以使用以下配置来定制节点查询缓存的大小

indices.queries.cahce.size

索引缓冲区 ( Indexing Buffer )

索引缓冲区用于存储索引中新创建的文档,而且会在缓冲区满时删除就的文档

可以使用以下配置来定制索引缓冲区的大小

indices.memory.index_buffer_size

分片请求缓存 ( Shard Request Cache )

该缓存用于存储每个分片的本地搜索数据

可以在创建索引期间启用缓存,也可以在任意请求过程中通过 URL 参数禁用缓存

1、 禁用缓存参数;

    ?request_cache = true

2、 启用缓存配置;

    index.requests.cache.enable": true

索引恢复 ( Indices Recovery )

在索引恢复的是,可以使用下表列出的选项类定制恢复的行为

选项 默认值 说明
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 Interval )

TTL是 Time To Live 的缩写,中文译为生存时间或过期时间,用于定义文档的过期时间,过期之后文档将被删除

其实还是推荐译为 “生存时间” 的,虽然主要目的是标记什么时候无效,但对于缓存系统来说,标记什么时候有效才是最重要的

可以使用下表列出的选项来控制生存时间

选项 默认值 说明
indices.ttl.interval 60s 索引生存时间
indices.ttl.bulk_size 1000 存放索引生存时间桶的大小

节点 ( Node )

每个节点都有一个选项 data 来设置该节点是否为数据节点

我们可以修改 node.data 属性,比如设置为 false 来表示该节点并非数据节点