Elasticsearch 2.2.0 索引配置详解

内存控制器

    在Elasticsearch中有很多控制器可以防止内存溢出,每个控制器可以指定内存使用的最大值,除此之外,还有一个总的控制器在确定整个系统使用的最大内存值。这些配置都可以动态更新。总的内存控制有以下参数:

indices.breaker.total.limit:总的内存使用大小,默认为JVM堆内存大小的70%。

列数据内存大小:

列数据内存大小是指,在Elasticsearch系统中,系统会估计有多少数据被加载到内存中,如果估计超过这个阀值,它可以通过一个异常来防止该字段的数据加载。

indices.breaker.fielddata.limit:列数据内存大小的限制,默认为JVM堆内存大小的60%。

indices.breaker.fielddata.overhead:所有列估计的内存大小的乘积,默认是1.03.

请求控制器,防止Elasticsearch每个请求的数据结构()超过一定的值。

indices.breaker.request.limit:请求控制器的大小,默认为JVM堆内存大小的40%。

indices.breaker.request.overhead:所有请求的乘积,默认为1。

数据缓存

    现场数据缓存主要用于当排序或聚合操作的时候。它将所有的字段值加载到内存中以便提供快速访问文档中的这些值。

indices.fielddata.cache.size:数据缓存的最大值,可以是一个节点的内存大小的比例,例如30%,也可以是一个绝对数字,比如12GB。默认是无限制,可以最大的利用内存。这个配置是静态的配置,必须在集群中的每个数据节点上启动前配置好。可以通过http://localhost:9200/_nodes/stats请求来监控节点的使用情况。

节点查询缓存

    查询缓存是负责缓存查询结果。每个节点都有一个查询缓存,这个缓存为这个节点下的所有分片服务。这个缓存采用最近最少使用算法;  当缓存满的是,把最少使用的数据优先删掉。查询缓存只有使用过滤的时候才会起作用。

indices.queries.cache.size:可以是一个节点的内存大小的比例,例如5%,也可以是一个绝对数字,比如 512mb。默认为JVM堆内存大小的10%。

索引缓冲区

    索引缓冲区用于存储新的索引文档。当缓冲区满后,缓冲区中的文件被写入磁盘上的一个段,它会在节点的所有分片上分离。它的设置是静态的,并且必须在群集中的每个数据节点上配置。

indices.memory.index_buffer_size:一个节点索引缓冲区的大小,可以是一个节点的内存大小的比例获知是一个绝对数字。默认为JVM堆内存大小的10%。

indices.memory.min_index_buffer_size:可以使用此设置指定最小的索引缓冲区大小。默认为48MB。

indices.memory.max_index_buffer_size:可以使用此设置指定最大的索引缓冲区大小。默认为无限制。

indices.memory.min_shard_index_buffer_size:设置分配给每个分片索引缓冲区的内存最小值,默认4MB。

本文由赛克 蓝德(secisland)原创,转载请标明作者和出处。

分片请求缓存

    当一个搜索请求是对一个索引或者多个索引的时候,每一个分片都是进行它自己内容的搜索然后把结果返回到协调节点,然后把这些结果合并到一起统一对外提供。分片缓存模块缓存了这个分片的搜索结果。这使得搜索频率高的请求会立即返回。

注意:请求缓存只缓存查询条件 size=0的搜索,缓存的内容有hits.total, aggregations, suggestions,不缓存原始的hits。通过now查询的结果将不缓存。

缓存失效:只有在分片的数据实际上发生了变化的时候刷新分片缓存才会失效。刷新的时间间隔越长,缓存的数据越多,当缓存不够的时候,最少使用的数据将被删除。缓存过期可以手工设置,例如:

localhost:9200/kimchy,elasticsearch/_cache/clear?request_cache=true

默认情况下缓存未启用,但在创建新的索引时可启用,例如:

PUT localhost:9200/my_index 

{
  "settings": {
    "index.requests.cache.enable": true
  }
}

当然也可以通过动态参数配置来进行设置:

PUT localhost:9200/my_index/_settings -d'

{ "index.requests.cache.enable": true }

每请求启用缓存,查询字符串参数request_cache可用于启用或禁用每个请求的缓存。例如:

localhost:9200/my_index/_search?request_cache=true

{
  "size": 0,
  "aggs": {
    "popular_colors": {
      "terms": {
        "field": "colors"
      }
    }
  }
}

注意:如果你的查询使用了一个脚本,其结果是不确定的(例如,它使用一个随机函数或引用当前时间)应该设置request_cache为false禁用请求缓存。

缓存key,数据的缓存是整个JSON,这意味着如果JSON发生了变化 ,例如如果输出的顺序顺序不同,缓存的内容江将会不同。不过大多数JSON库对JSON键的顺序是固定的。

分片请求缓存是在节点级别进行管理的,并有一个默认的值是JVM堆内存大小的1%,可以通过配置文件进行修改。

例如:indices.requests.cache.size: 2%

可以通过localhost:9200/_stats/request_cache?pretty&human或者'localhost:9200/_nodes/stats/indices/request_cache?pretty&human来缓存监控,缓存的大小(以字节为单位)。

索引恢复

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:删除程序的运行时间。默认为60。

indices.ttl.bulk_size:删除处理与批量请求的数量,默认为10000。

    赛克蓝德(secisland)后续会逐步对Elasticsearch的最新版本的各项功能进行分析,近请期待。也欢迎加入secisland公众号进行关注

你可能感兴趣的:(elasticsearch,日志分析,赛克蓝德,secilog)