Elasticsearch

安装部署

下载安装包:https://www.elastic.co/

解压:tar -zxvf elasticsearch-6.1.1.tar.gz -C /export/servers

mv elasticsearch-6.1.1 elasticsearch

修改配置:

vi elasticsearch.yml

修改的主要内容:

#配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。

cluster.name: my-es

#节点名称

node.name: node1

#设置索引数据的存储路径

path.data: /export/servers/esdata

#设置日志的存储路径

path.logs: /export/servers/es/logs

#设置当前的ip地址,通过指定相同网段的其他节点会加入该集群中

network.host: 192.168.52.140

#设置对外服务的http端口

http.port: 9200

#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点

discovery.zen.ping.unicast.hosts: "node-1"

性能调优

  • 索引优化

Elasticsearch 本身索引速度其实还是蛮快的,索引优化主要是在 Elasticsearch 插入层面优化,如果瓶颈不在这块,而是在产生数据部分,比如 DB 或者 Hadoop 上,那么优化方向就需要改变下。

**硬件优化:**尽量使用固态硬盘 SSD

**批量提交:**如果在提交过程中,遇到 EsRejectedExecutionException 异常的话,则说明集群的索引性能已经达到极限了。。这种情况,要么提高服务器集群的资源,要么根据业务规则,减少数据收集速度,比如只收集 Warn、Error 级别以上的日志。

**refresh时间间隔:**通过延长 refresh 时间间隔,可以有效的减少 segment 合并压力,提供索引速度。将 index.refresh_interval 设置为 30s,减少 refresh 次数。在进行全量索引时,可以将 refresh 次数临时关闭,即 index.refresh_interval 设置为 -1,数据导入成功后再打开到正常模式,比如 30s。

**减少副本数量:**Elasticsearch 默认副本数量为 3 个,虽然这样会提高集群的可用性,增加搜索的并发数,但是同时也会影响写入索引的效率。使用 Elasticsearch 做业务搜索的时候,建议副本数目还是设置为 3 个,但是像内部 ELK 日志系统、分布式跟踪系统中,完全可以将副本数目设置为 1 个。

  • 查询优化

**路由:**routing 默认值是文档的 id,也可以采用自定义值,比如用户 id。Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?它其实是通过下面这个公式来计算出来,shard = hash(routing) % number_of_primary_shards。

带routing的查询 VS 不带routing的查询:

不带routing的查询,因为不知道要查询的数据具体在哪个分片上,所以整个过程分为 2 个步骤:

  • 分发:请求到达协调节点后,协调节点将查询请求分发到每个分片上。
  • 聚合: 协调节点搜集到每个分片上查询结果,在将查询的结果进行排序,之后给用户返回结果。

带routing的查询可以直接根据 routing 信息定位到某个分片查询,不需要查询所有的分片,经过协调节点排序。如上面自定义用户查询,如果 routing 设置为 userid 的话,就可以直接查询出数据来,效率提升很多。

Filter vs Query

尽可能使用过滤器上下文(Filter)替代查询上下文(Query),因为Elasticsearch 针对 Filter 查询只需要回答「是」或者「否」,不需要像 Query 查询一下计算相关性分数,同时 Filter 结果可以缓存。

大翻页

在使用 Elasticsearch 过程中,应尽量避免大翻页的出现。

如果 From 或者 Size 很大的话,导致参加排序的数量会同步扩大很多,最终会导致 CPU 资源消耗增大。

可以通过使用 Elasticsearch scroll 和 scroll-scan 高效滚动的方式来解决这样的问题。具体写法,可以参考 Elasticsearch: 权威指南 - scroll 查询

  • 配置优化

Elasticsearch 底层使用 Lucene,建议把 50% 的可用内存作为 Elasticsearch 的堆内存,保留剩下的 50%留给Lucene。假设你有个机器有 128 GB 的内存,你可以创建两个节点,每个节点内存分配不超过 32 GB。 也就是说不超过 64 GB 内存给 ES 的堆内存,剩下的超过 64 GB 的内存给 Lucene。

相关推荐
腾讯云大数据12 小时前
腾讯云大数据计算智能:从结构化 SQL 到多模态 AI Workload 的融合范式
大数据·人工智能·腾讯云
AI职业加油站12 小时前
大数据采集工程师:技术栈全景图与实战路径
大数据·人工智能·数据分析
阿里云大数据AI技术14 小时前
AI Search × ES Agent Builder 最佳实践:企业智能助手落地指南
人工智能·elasticsearch
老白讲技术14 小时前
2026年国内APP开发与软件定制服务商能力观察:从AI应用到行业系统开发
大数据·人工智能·ai·app·软件需求·app开发
荣-14 小时前
从两天到十几分钟:一套 YT Crash 自动化分析工具完整工程复盘
大数据·运维·自动化
人工智能培训16 小时前
大模型驱动下传统大数据架构的变革方向
大数据·人工智能·重构·架构·agent·agi
蜡笔削薪17 小时前
财联万业(杭州)数字科技有限公司能否给代理划定独家经营区域?
大数据·人工智能·python·科技
动恰客流统计17 小时前
零食集合店爆火背后:客流统计技术如何重构新零售运营决策
大数据·人工智能
B8017913Y19 小时前
2026撰写行业报告总写不完零散专业词汇?可系统梳理行业专业词汇
大数据·人工智能
2601_9623413020 小时前
计算机毕业设计之jsp考研在线复习平台
java·大数据·开发语言·hadoop·python·考研·课程设计