`

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倍

    适用于elasticsearch7.12.1版本

    这个版本的 Elasticsearch 针对性能和稳定性进行了优化,适用于大规模数据检索和分析场景。Elasticsearch 不仅支持英文分词,还特别强调了对中文的支持,因此在处理中文文档时,它通常会搭配使用专门的中文分词器。 ...

    1_elasticsearch技术解析与实战

    总结,Elasticsearch以其强大的全文搜索、分布式架构和易用性,成为现代大数据处理和分析的首选工具。通过深入理解和熟练运用Elasticsearch,开发者可以构建高效、弹性且易于维护的数据解决方案。

    elasticsearch安装和使用

    Elasticsearch是一个开源的全文搜索引擎,它以其高效、可扩展的特性被广泛应用于数据分析、日志分析、网站搜索等领域。...通过理解Term和Match查询的区别,可以更好地利用Elasticsearch进行文本检索,优化搜索效果。

    Elasticsearch总结.doc

    **一、Elasticsearch简介** Elasticsearch是一个开源的全文搜索引擎,基于Apache Lucene构建,用Java编写。它简化了全文检索的过程,提供了一套RESTful API,使得操作变得直观简单。Elasticsearch不仅是一个搜索...

    elasticsearch-analysis-ik 7.10.0 分词器

    **Elasticsearch Analysis IK 7.10.0 分词器详解** Elasticsearch 分词器是搜索引擎核心组件之一,负责将输入的文本拆分成可搜索的独立单元——词语。在中文环境中,这个过程尤为重要,因为中文句子由多个汉字组成...

    ES同义词插件 elasticsearch-analysis-dynamic-synonym-6.5.1.rar

    在IT领域,尤其是在搜索引擎优化和大数据分析中,Elasticsearch(ES)是一个广泛使用的开源全文检索引擎。它基于Lucene库,提供了分布式、实时、高可用性以及容错能力的数据存储和搜索解决方案。本篇文章将重点讲解...

    Elasticsearch数据导出工具

    总结来说,Elasticsearch数据导出工具是一个强大的数据迁移工具,它通过Java实现了与MySQL的无缝连接,允许用户灵活地在Elasticsearch和MySQL之间移动数据,同时也支持将数据保存在本地文件系统,以适应多样化的数据...

    Elasticsearch 34道面试题和答案.docx

    本文档总结了 34 道 Elasticsearch 面试题和答案,涵盖了 Elasticsearch 的基础概念、索引架构、集群管理、性能优化、倒排索引、master 选举等多个方面。 一、Elasticsearch 基础概念 1. 什么是 Elasticsearch?...

    Chrome浏览器查看elasticsearch head插件

    总结,"Chrome浏览器查看elasticsearch head插件"是一个实用的工具,它为Elasticsearch的管理和监控提供了便捷的Web界面,使得非开发人员也能轻松理解和操作ES集群。通过遵循正确的安装步骤,用户可以充分利用这个...

    elasticsearch-7.14.0+分词器+head插件一键下载

    总结来说,这个压缩包提供了一套完整的 Elasticsearch 环境,包括最新的 7.14.0 版本、必备的分词器支持以及方便的可视化工具 Head 插件,配合 PHP 客户端,可以快速搭建起一个功能完备的全文搜索引擎系统。...

    elasticsearch-7.10.2.zip

    Elasticsearch(简称ES)是一款基于Lucene的开源、分布式全文搜索引擎。它以其高效、灵活、可扩展的特点,广泛应用于日志分析、实时监控、数据搜索等多个领域。在版本7.10.2中,Elasticsearch持续优化了性能,提升了...

    谷歌浏览器elasticsearch head插件

    **谷歌浏览器Elasticsearch Head插件详解** 在大数据时代,Elasticsearch作为一款强大的开源搜索引擎,因其高效、灵活和可扩展性而广受青睐。它主要用于全文检索、数据分析以及实时日志收集等领域。为了便于管理和...

    elasticsearch-8.1.2-windows-x86_64

    总结,Elasticsearch 8.1.2是适用于Windows x86_64环境的大数据搜索和分析引擎,其强大的功能和易用性使其成为大数据领域的热门选择。正确安装和配置Elasticsearch,结合其他Elastic Stack组件,可以帮助企业高效...

    elasticsearch实战

    总结来说,Elasticsearch是一本全面的实战指南,它从基础到高级,逐步深入地引导读者掌握Elasticsearch的使用和管理技巧。无论你是Elasticsearch的新手还是有经验的开发者,这本书都能帮助你更好地使用Elasticsearch...

    Go-go-elasticsearch:Elasticsearch官方的go语言客户端

    es, err := elasticsearch.NewDefaultClient() if err != nil { panic(err) } res, err := es.Index(index, "", &doc, nil) if err != nil { panic(err) } defer res.Body.Close() if res.IsError() {...

    elasticsearch-analysis-ik-7.10.2.zip

    Elasticsearch(ES)作为一个开源的全文搜索引擎,因其强大的搜索功能和分布式特性而备受青睐。然而,对于中文这种复杂的语言,分词是搜索引擎理解文本的关键步骤。本文将详细介绍elasticsearch-analysis-ik-7.10.2...

    Elasticsearch head插件

    **Elasticsearch Head 插件详解** ...总结来说,Elasticsearch Head 插件是一款强大的工具,尤其适合开发和测试环境。通过它,我们可以轻松管理和维护 Elasticsearch 集群,提升工作效率,同时为日常运维提供了便利。

Global site tag (gtag.js) - Google Analytics