elasticsearch优化总结

1.避免脑裂问题

quorum计算公式:quorum = 可选举节点数/2 + 1
设置discovery.zen.minimum_master_nodes:quorum,可避免脑裂问题

2.调大系统的”最大打开文件数“

  • 建议32K或者64K
    ulimit -a(查看)
    ulimit -n 65536(设置)
    elasticsearch优化总结_第1张图片
    集群的话都要分别进行设置。

3.调整ES的JVM内存大小

1)修改es的配置文件中ES_MIN_MEM和ES_MAX_MEM的大小,建议设置一样大,避免怕频繁的内存分配。根据服务器的大小,一般分配60%左右(默认256M)
2)内存最大不要超过32G

4.设置memory_lock锁定进程的物理内存地址

  • 避免内存交换(swapped)来提高性能,bootstrap.memory_lock: true。
    若集群都要分别设置。

5.适当增大分片个数

如果分片数过多或者过少,都会导致检索比较慢。
1)分片数过多,会导致检索时打开文件过多,另外也会导致多台服务器之间通讯,影响效率。
2)分片数过少会导致单个分片索引过大,所以检索速度慢。
3)建议单个分片最多存储20G左右的索引数据,通用计算公式:分片数量=数据总量/20G

6.设置合理副本数

1)增加副本可以提升搜索的能力
2)如果副本数过多,会对服务器造成额外的压力,因为主分片需要给所有副本同步数据。另外,副本过多也会占用磁盘资源。
3)一般建议设置2-3个即可。

7.定时进行合并优化

定时对索引进行合并优化,segment越多,占用的segment memory越多,查询性能也越差。
1)索引量不大的情况下,可以将segment设置为1.
2)在es2.1.0以前使用_optimiize接口,后期改为_forcemerge接口。

8.close不使用的index,减少内存占用

只要索引处于open状态,索引库中的segment就会占用内存,close之后就只会占用磁盘空间不会占用内存。

9.删除文档

在es中删除文档,数据不会马上在硬盘上除去,而是在es索引中产生一个.del的文件,而在检索过程中这部分数据也会参与检索,es在检索过程会判断是否删除了,如果删除了在过滤掉。这样也会降低检索效率。所以可以执行清除删除文档。

curl -XPOST 'http://192.168.80.10:9200/zhouls/_forcemerge?only_expunge_deletes=true'

client.admin().indices().prepareForceMerge("zhouls").setOnlyExpungeDeletes(true).get();

10.优化数据导入

1)因为es在索引数据的时候,如果有副本存在,数据也会马上同步到副本中,这样会对es增加压力。
2)可以等索引完成后将副本按需要改回来。这样可以提高索引效率。

11. 优化ES索引_all

去掉mapping中_all字段,Index中默认会有_all这个字段,默认会把所有字段的内容都拷贝到这一个字段里面,这样会给查询带来方便,但是会增加索引时间和索引尺寸。

12. 优化索引_source

在ES中创建Mappings时,默认_source是enable=true,会存储整个document的值,当执行search操作的时,会返回整个document的信息。如果只想返回document的部分fields,但_source会返回原始所有的内容,当某些不需要返回的field很大时,ES查询的性能会降低,这时候可以考虑使用store结合_source的enable=false来创建mapping。
注:store对于复杂的数据类型如nested类型不支持。

禁用_all字段 “_all”:{“enabled”:false}
如果只是某个字段不希望被加到_all中,可以使用 “include_in_all”:false

13. 日志优化

log输出的水平默认为trace,即查询超过500ms即为慢查询,就要打印日志,造成cpu和mem,io负载很高。把log输出水平改为info,可以减轻服务器的压力,修改ES_HOME/conf/logging.yaml文件。

14.兼容优化

1)使用java代码操作es集群,要保证本地es版本和集群上es的版本保持一致。
2)保证集群中每个节点的JDK版本和es配置一致。

15.读写优化

在查询中尽量使用filter,如果遇到查询慢可以使用explain进行慢查询,进而优化数据模型和query;对于ES的写优化,最好采用bulk批量插入。

你可能感兴趣的:(elasticsearch,大数据,big,data)