Elasticsearch(ES)作为NOSQL+搜索引擎的有机结合体,不仅有近实时的查询能力,还具有强大的聚合分析能力。因此在全文检索、日志分析、监控系统、数据分析等领域ES均有广泛应用。而完整的Elastic Stack体系(Elasticsearch、Logstash、Kibana、Beats),更是提供了数据采集、清洗、存储、可视化的整套解决方案。
预留一半内存给Lucene使用
毋庸置疑,内存对于 Elasticsearch 来说绝对是重要的,但还有一个内存消耗大户 —— Lucene。

more /data/elasticsearch/config/elasticsearch.yml

cluster.name: sevfun_es_mall     //es的集群名称
node.name: sevfun_es_mall3     //节点名
node.master: true                       //该节点是否有资格被选举成为master
node.ingest: false                       
node.data: true                          //该节点是否存储索引数据
http.enabled: true                      //是否使用http协议对外提供服务
http.cors.enabled: true
http.cors.allow-origin: "*"
path.data: /data/esdata             //设置索引数据的存储路径
path.logs: /data/eslogs
action.auto_create_index: false  
bootstrap.memory_lock: false   //防止内存溢出避免es使用swap
network.host: 10.100.0.22       //设置绑定的ip地址
http.port: 9200       //设置对外服务的http端口;节点间交互的tcp端口默认是9300
discovery.zen.ping.unicast.hosts: [10.100.0.45,10.100.0.37,10.100.0.22]
discovery.zen.minimum_master_nodes: 2  //候选主节点的个数/2+1
discovery.zen.fd.ping_timeout: 120s //设置集群中自动发现其它节点时ping连接超时时间
discovery.zen.fd.ping_retries: 6
discovery.zen.fd.ping_interval: 30s
client.transport.ping_timeout: 60s
discovery.zen.ping_timeout: 10s
indices.query.bool.max_clause_count: 5000
thread_pool.search.size: 40
thread_pool.search.queue_size: 1000
thread_pool.index.queue_size: 1000
thread_pool.bulk.queue_size: 1000

more /data/elasticsearch/config/jvm.options

-Xms8g        //JVM堆的大小 设置最小堆的值为2g
-Xmx8g       //JVM堆的大小  设置组大堆的值为2g
-XX:NewRatio=3 //设置年轻代和年老代的比值。如:为3,表示年轻代与年老代比值为1:3,年轻代占整个年轻代年老代和的1/4 
-XX:+ExitOnOutOfMemoryError
-XX:HeapDumpPath=/data/       //生成DUMP文件的路径
-XX:+ExitOnOutOfMemoryErrorsss   //防止出现内存溢出但是进程没有退出

Linux参数调优:
禁用swap
索引优化:
建议根据集群节点的个数规模,分片个数建议>=集群节点的个数。
5节点的集群,5个分片就比较合理。
建议每个分片大小不要超过30GB
建议冷热数据分离:
热数据存储SSD和普通历史数据存储机械磁盘,物理上提高检索效率。