Elasticsearch优化的一些建议

news/2024/7/7 6:38:57 标签: elasticsearch, 大数据, big data

1. 增大系统打开文件数

  • 调大系统的“最大打开文件数” ,建议32K甚至是64K
ulimit -a(查看)
ulimit -n 32000(设置)

2. 合理设置JVM内存

修改配置文件调整ES的JVM内存大小。

  • 修改jvm.options中-Xms和-Xmx的大小,建议设置一样大, 避免频繁的分配内存。 根据服务器内存大小, 一般分配50%左右(默认1g)

3. 锁定物理内存

设置memory_lock来锁定进程的物理内存地址,避免内存交换(swapped) 来提高性能

# 修改文件
vi config/elasticsearch.yml
    bootstrap.memory_lock: true

4. 合理设置分片

适当增大分片, 可以提升建立索引的能力, 5-20个比较合适。

如果分片数过少或过多, 都会导致检索比较慢。

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

地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

5. 合理设置副本数

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

地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-create-index.html

6. 合并索引

定时对索引进行合并优化, segment越多, 占用的segment memory越多, 查询的性能也越差。

  • 索引量不大的情况下, 可以将segment设置为1。
  • 在es2.1.0以前调用_optimize接口, 后期改为_forcemerge接口。
curl -u elastic:123456 -XPOST 'http://master:9200/test/_forcemerge?max_num_segments=1'

7. 关闭索引

针对不使用的index, 建议close, 减少内存占用。

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

curl -u elastic:123456 -XPOST 'master:9200/test/_close'

8. 清除删除文档

在Lucene中删除文档, 数据不会马上在硬盘上清除, 而是在lucene索引中产生一个.del的文件, 然而在检索过程中这部分数据也会参与检索, lucene在检索过程会判断是否删除, 如果已经删除, 再过滤掉, 这样也会降低检索效率。

可以执行清除删除文档命令:

curl -u elastic:123456 -XPOST 'http://master:9200/test/_optimize?only_expunge_deletes=true'

9. 合理数据导入

如果在项目开始阶段, 需要批量入库大量数据, 建议将副本数设置为0。 因为es在索引数据的时候, 如果副本已经存在, 数据会立即同步到副本中, 这样会对es增加压力。

等到索引完成后, 再恢复副本数即可, 可以提高索引效率。

curl -XGET http://master:9200/test/_settings?pretty
curl -H "Content-Type:application/json" -XPUT 'http://master:9200/test/_settings' -d \
'{
    "index":{
        "number_of_replicas":0
    }
}'
curl -H "Content-Type:application/json" -XPUT 'http://master:9200/test/_settings' -d \
'{
    "index":{
        "number_of_replicas":1
    }
 }'

10. 设置索引_all

去掉mapping中_all域, Index中默认会有_all的域, 虽然会给查询带来方便, 但是会增加索引时间和索引尺寸。

地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-all-field.html

11. 设置索引_source

_source字段我在们进行检索时相当重要。

ES默认检索只会返回ID, 如果在{“enabled”:false}情况下,你需通过根据这个ID去去倒排索引中去取每个Field数据,效率不高。 而反之, 在{“enabled”:true}的情况下可以根据ID直接检索对应source JSON的字段, 不用去倒排索引去按Field取数据。

地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html

12. 版本

  • 使用 Java 代码操作 es 集群,要保证本地 es 的版本和集群上 es 的版本保持一致。

  • 保证集群中每个节点的 JDK 版本和 es 配置一致


http://www.niftyadmin.cn/n/1570323.html

相关文章

docker和k8s面试题总结(未完待续)

6 容器类面试题 6.1 docker有几种网络模式?容器和容器之间怎么通信?主机和主机之间怎么通信? docker 有四种网络模式 none 桥接(默认模式) Host container 容器之间通过桥接模式进行通信 跨主机的容器之间通过…

gitlab部署与使用

2 Gitlab 部署与使用 # Gitlab 服务的安装文档 https://about.gitlab.com/install/ # 安装环境要求 https://docs.gitlab.com/ce/install/requirements.html # 安装包下载地址 https://packages.gitlab.com/gitlab/gitlab-ce# rpm 包国内下载地址 https://mirrors.tuna.tsingh…

elasticsearch的索引(增删改查)管理

1. 创建索引 # 语法 PUT /索引名/[类型名]/文档id {请求体 }可以通过 postman 发送请求,也可以通过 kibana 发送请求,由于 kibana 有提示,所以我们选择kibana 索引名不能有大写字母 PUT Book{"error" : {"root_cause"…

解决es集群Yellow与Red的问题

1. 集群健康度 分片健康,在集群中节点的状态有三种:绿色、黄色、红色 红色:至少有一个主分片没有分配,表示集群无法正常工作。 黄色:表示节点的运行状态为警告状态,所有的主分片目前都可以直接运行&#x…

Prometheus安装

1. 安装 Prometheus # 官网 https://prometheus.io/download/[rootpromethues ~]# tar zxvf prometheus-2.30.3.linux-amd64.tar.gz -C /usr/local/ [rootpromethues ~]# ln -sv /usr/local/prometheus-2.30.3.linux-amd64 /usr/local/prometheus [rootpromethues ~]# mkdir -…

Prometheus主机(node)监控

9 Prometheus node 监控 # 安装 node_exporter [rootpromethues ~]# tar zxvf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local/ node_exporter-1.2.2.linux-amd64/ node_exporter-1.2.2.linux-amd64/LICENSE node_exporter-1.2.2.linux-amd64/NOTICE node_exporter-1.…

Prometheus邮件报警设置

1. 告警功能概述 Prometheus 对指标的收集、存储同告警能力分别属于 Prometheus Server 和 AlertManager 两个独立的组件,前者仅负责基于“告警规则”生成告警通知,具体的告警操作则由后者完成 Alertmanager 负责处理由客户端发来的告警通知 客户端通常…

failed to register layer: open xxx no such file or directory

今天遇到一个镜像下载失败的问题,如下 failed to register layer: open /ssd/docker/overlay2/8b59377a7b63cd2014d31a3a885353c107f2aad1fb07886c92e1aa35732b3d21/committed: no such file or directory搜索网上的解决办法,比如 docker system prune…