9.9 elasticsearch优化
1 分片和副本
ElasticSearch6以后设置索引的默认分片数和副本数已经不在elasticsearch.yml文件中了,而是使用了索引模板的方式配置。
官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/7.14/size-your-shards.html
2 索引优化
官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/7.14/tune-for-indexing-speed.html
index.refresh_interval: 30s
# 增加刷新间隔,Elasticsearch默认1s秒刷新一次您的索引,加到更大的值,例如30s,可能有助于提高索引速度。
bootstrap.memory_lock: true
# 锁定内存,禁用内存交换到swap,建议服务器内存的一半
# 1) 修改"elasticsearch/config/jvm.options"文件中的如下两个参数
# -Xms3g
# -Xmx3g
# 2) 修改/usr/lib/systemd/system/elasticsearch.service文件在[Service]下添加如下参数应用"bootstrap.memory_lock: true"配置
# LimitMEMLOCK=infinity
indices.memory.index_buffer_size: 512mb
# 调整索引缓冲区大小
3 事物日志优化
官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/7.14/index-modules-translog.html
index.translog.sync_interval: 30s
# translog被写入磁盘并提交的频率,默认为5s
index.translog.durability: async
# 在每个索引、删除、更新或批量请求之后是否同步和提交事务日志。
# request: 默认值,同步并在每个请求后提交。如果发生硬件故障,所有已确认的写入将已经提交到磁盘。
# async: 同步和提交在每个sync_interval时执行一次。如果发生故障,则自上次自动提交以来所有已确认的写入将被丢弃。
index.translog.flush_threshold_size: 512mb
# translog存储所有尚未安全持久化在Lucene中的操作,一旦达到最大大小,就会发生刷新,生成一个新的Lucene提交点。默认为512mb。
4 索引段合并优化
官方文档: https://www.elastic.co/guide/en/elasticsearch/reference/7.14/index-modules-merge.html
Elasticsearch中的一个分片是一个Lucene索引,一个Lucene索引被分解成段。段是索引中存储索引数据的内部存储元素,并且是不可变的。
较小的段会定期合并为较大的段以保持索引大小。
index.merge.scheduler.max_thread_count: 1
# 单个分片上可以同时合并的最大线程数,如果您的索引位于旋转盘片驱动器上,请将其减少到1。
# 默认为Math.max(1, Math.min(4, <<node.processors, node.processors>> / 2)),适用于ssd固态硬盘。
5 索引优化配置
(1) 以上索引优化参数通过elasticsearch.yml配置的如下
bootstrap.memory_lock: true
indices.memory.index_buffer_size: 512mb
(2) 以上索引优化参数通过命令行方式配置的如下
curl -u elastic:elastic -XPUT -H "Content-Type: application/json" 'http://192.168.30.47:9200/_all/_settings?preserve_existing=true' -d '{
"index.merge.scheduler.max_thread_count" : "1",
"index.refresh_interval" : "30s",
"index.translog.durability" : "async",
"index.translog.flush_threshold_size" : "512mb",
"index.translog.sync_interval" : "30s"
}'
6 索引生命周期优化
(1) 官方文档:
https://www.elastic.co/guide/en/elasticsearch/reference/7.14/index-lifecycle-management.html
kibana中有索引生命周期管理。
(2) 实现方式
配置好生命周期策略后,我们需要创建一个模板,将我们现在的输入index接管过来,然后将策略应用于这个模板,这就达到了每次创建的index都能应用于这一策略。
7 elasticsearch-head通过认证的方式连接elasticsearch
(1) 在elasticsearch.yml中添加如下参数
http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length
(2) 访问elasticsearch-head
http://172.16.1.120:9100/?auth_user=elastic&auth_password=elastic