`

ES优化总结

 
阅读更多
最近一直在研究ES集群,也看了很多篇前辈们总结的博客,同事借鉴了官方给出的一些建议,做了一下几点总结,希望对后来者有用:



1、内存交换。为了防止ES进程的内存被置换到磁盘上(会导致在检索的时候发生内存交换导致检索速度迟缓)引起性能急速下降。在启动ES的时

候可以把config/elasticsearch.yml中的bootstrap.mlockall设置为true就可以了。



2、节点的细分。在官方文档中,主要定义了master node 、data node 、client node 、tribe node、coordinating node,他们之间的协调工作,才能使

集群节点更好的工作。(需要仔细研究,多搭建几个节点测试下)。

master node:配置 node.master : true     node.data : false

1)当master为false,而data为true时,会对该节点产生严重负荷;

2)当master为true,而data为false时,该节点作为一个协调者;

3)当master为false,data也为false时,该节点就变成了一个负载均衡器。



3  索引刷新。每次在进行一次document操作的时候,有两个可选项,在索引(动词,理解为插入一条document)之后刷新,在查询(同上)之前刷

新,在索引之后刷新,会牺牲索引的效率(每次插入document都额外的进行刷新),在查询之前刷新会牺牲查询的效率(查询之前会额外的进行刷新)。这两种方式虽然都可以让我们每次查到的数据都是实时性的,但是效率特别的低下,因此我们正常情况可以采用定时刷新的方式,即每次间隔一秒刷新一次(时间可以自己定)。在创建构建客户端的时候,设置index.refresh_interval为想要的数值即可。如:1s,也可以在elasticsearch中配置index.refresh_interval:1s



4 内存分配。es在内存分配上官方给的内存最大不超过32G(和os有关,超过32G,指针会变长,增加cpu压力),一般为机器内存的50%即可,剩下

的会交给lucene,Lucene的设计目的是把底层OS里的数据缓存到内存中。Lucene的段是分别存储到单个文件中的,这些文件都是不会变化的,所以很利于缓存,同时操作系统也会把这些段文件缓存起来,以便更快的访问。



5  分片数量。ES在创建索引的时候默认的分片大小是5。我们可以在创建索引的时候指定分片数量。注意:分片一旦确定,就没法更改。这是因为

Es在创建分片之后,每次索引(动词)都会使用一个算法

shard= hash(routing) % number_of_primary_shards

来确定存储在哪一个分片上,如果更改分片的数量,那么之前所有的document都将无效。没法被routing。

官方给的建议:每个node上的分片数量不超过3个,因此我们如果想要更多的分片只能通过增加节点的方式。

分片不宜过大,也不宜过小。具体可以参考官网的文档和压力测试的结果来设定大小。

为了导入数据更快,可以在创建索引的时候把复制分片设置为0.导入数据结束之后再设置为想要的值。



6  routing。Elasticsearch的路由机制和它的分片机制有相似的地方,他们都是使用的hash算法。将具有相同hash值得文档放在一起。

情景分析:如果poi将全国所有的店面的信息放在es中,如果我们不指定路由,es会随机的将所有的文档存入分片中(数据很大,所以我们需要不止5个分片),现在我们想要查询上海地区所有的poi信息,es的做法是master收到请求,然后广播,每个节点查询数据,然后将数据交给通道节点合并,排序交给用户。这个会严重增加es的节点压力,网络负载。如果我们在查询的时候能明确的知道上海的poi数据在某一个节点上,我们只需要在查询的时候指定routing,es就会在routing指定的节点上查询,就可以避免不必要的资源浪费。也可以提高查询的速度。

我们可以在添加数据的时候指定某一个相同值得字段放在一起,比如上海的cityid=1,我们可以使用以下命令

Curl -XPUT localhost:9200/store/poi?routing=cityId -d '{

"cityId":"1",

"cityName":"上海"

}'

PUT test/_settings
{
"index.routing.allocation.include.size":"big,medium" #这个是把test索引的数据全部分配到big和medium节点
}

PUT test/_settings
{
"index.routing.allocation.exclude.size": "small" #与上面相反,把test索引的数据全部移除small节点
}





7  导入。在导入数据的时候建议先把副本设置为0.待导入完毕之后再设置为需要的数据。

curl -XPUT '192.168.5.112:9200/qinzi/_settings?pretty' -d '
{
    "index" : {
        "number_of_replicas" : 1
    }
}'

导入的时候先把刷新的时间设置为-1(这样在索引的时候,数据对搜索不可见,就是在索引的时候,数据是没法实时查询的),等到索引结束之后,在设置为想要的时间,这个值可以可以通过api设置

curl -XPUT localhost:9200/test/_settings-d '{
    "index" : {
        "refresh_interval" :"-1"
    }
}'

记得在索引之后改回来,不然之前索引的数据都没法查询。



8  节点状态监控。



9    segments优化 ES是基于lucene的,

curl -XPOST192.168.5.112:9200/baidu/_forcemerge?max_num_segments=1(强制性的把segments变为1)在合并的时候需要预留足够的磁盘空间,因为segments合并时候是采用一定的策略,把segments合并,但是旧的还会暂时存在的。

curl -XPOST 192.168.5.112:9200/baidu/_optimize?max_num_segments=1
分享到:
评论

相关推荐

    elasticsearch分布式优化配置总结

    本人在工作期间主要负责公司的集群维护与ES的分布式平台搭建,在这期间总结了自己的一套关于ES集群的优化配置的准则,性能提升有3-5倍,希望可以帮到你

    elasticsearch分布式优化配置大全

    本人在实际的工作中,负责ES平台的搭建以及维护,在实际中总结的集群优化准则,所有集群通用,性能提升有3-5倍

    一站式掌握elastic search基础与实战视频资源-百度云链接

    视频资源太大,这里提供百度云链接: 资源包括项目源码和所需的数据: 01-1 _课程导学~1.mp4 01-2 说明和建议~1.mp4 02-1 -术语介绍 .mp4 02-2 Document介绍.mp4...24-1 课程总结.avi codes.zip project.zip 文件树.txt

    webpack学习教程之前端性能优化总结

    前言 曾几何时,我们是如上图的方式引入JS... 其他的还包括比如你可以用ES 6 或CoffeeScript写源码,然后构建出浏览器支持的ES5 所以,前端这么好玩,如果还有项目没有前后端分离的话,真的是守旧过头了。 主流构建工

    Hadoop+Spark+Hive+HBase+Oozie+Kafka+Flume+Flink+ES+Redash等详细安装部署

    1、内容概要:Hadoop+Spark+Hive+HBase+Oozie+Kafka+Flume+Flink+Elasticsearch+Redash等大数据集群及组件搭建指南(详细搭建步骤+实践过程问题总结)。 2、适合人群:大数据运维、大数据相关技术及组件初学者。 3、...

    SDCC 2016数据库峰会(上海站)

    SDCC 2016数据库峰会(上海站)PPT ...7 ElasticSearch分析与实践-卢亿雷-卢亿雷 AdMaster技术副总裁兼总架构师 8 饿了么数据库架构演进_虢国飞 饿了么DBA经理 9 InfluxDB的架构演进 陈超 七牛云技术总监

    总结Linux系统环境初始化、系统安全加固措施和系统内核优化

    24. elasticsearch 安装与配置 25. 进程管理 26. 文件系统管理 27. git 初始化本地仓库 28. Nacos 安装与配置 29. ruby 安装与配置 30. Go 语言的安装与配置 31. MongoDB 安装与配置 32. 添加中文字符集

    编程狂人第九期(2014-1-20)

    常用CSS优化总结——网络性能与语法性能建议 编程语言 2013流行Python项目汇总 15款Django开发常用软件包 Rails 3 升级 Rails 4 中遇到的问题及解决方法 php性能优化 Java中的 equals() 和 hashCode() 契约 程序...

    从程序员到CTO大牛企业内部PDF与PPT合集.zip

    整理大牛分享文档如下,一线开发架构,技术...阿里云Elasticsearch架构解析与性能优化实践 Go在区块链的发展和演进 Aliyun ApasaDB Go 微服务架构 罗辑思维Go语言微服务改造实践 Golang打造下一代互联网-IPFS全解析等

    from_coder_to_expert:2020年最新总结,从程序员到CTO,从专业走向卓越,分享大牛企业内部pdf与PPT

    技术文档网易蜂巢公有容器云架构之路新浪微博redis优化历程微博缓存架构设计实践在大数据开发中的经验总结基于Go合成滴滴核心业务平台的实践京东分布式KV存储设计与挑战去哪网数据库架构发展历程58速运数据库降压...

    Java-Study:Java知识点总结

    本仓库是对Java后端各个知识点的整理! 性能优化 elasticsearch 高并发 分布式 网络安全

    浅谈Node框架接入ELK实践总结

    ELK (ELK Stack: ElasticSearch, LogStash, Kibana, Beats) 是一套成熟的日志解决方案,其开源及高性能在各大公司广泛使用。而我们业务所使用的服务框架,如何接入 ELK 系统呢? 业务背景 我们的业务框架背景: ...

    js:javascript核心知识点,es6,7,8,9学习笔记,es6工作总结

    卢珑文JavaScript技术栈 1 JS技术学习路线 打回来 诺言 es6 类 ...5 JS性能优化 6 ES6-10 7个TypeScript 8 JS数据可视化 Javascript基础 内置函数 数组 目的 功能 布尔型 日期 数 串 符号 内置对象

    医疗论坛小程序.zip

    基于SpringCloudAlibaba,uni-app,ElasticSearch,RabbitMQ,Redis实现。 随着移动互联网技术的发展和用户需求的变化,【小程序名称】应运而生,以其轻量化、便捷化的设计理念为用户提供了一种全新的服务模式。...

    micro-juejin::shooting_star:微前端架构的小掘金(qiankunJS + Vue2、3 + Vite)

    希望跟老板预测将新项目采用微前端架构,继续总结更多落地经验,届时有空了分享一波给大家同时也会继续做小掘金的优化 2020.09.25 Vite本地开发接收失败,原因是由于qiankun暂时不支持ESModule类型的包,虽然build后...

    网络互连_网桥.路由器.交换机和互连协议

    最后两章总结了本书,我希望它们是轻松有趣的。第17章探究了将网桥和路由器区别开来的秘密,第18章试图收集人们有关如何设计协议的经验知识。最后有一张术语表。我在第一次使用某个术语时会给出定义,但如果我没有给...

Global site tag (gtag.js) - Google Analytics