编写不易,转载请注明( http://shihlei.iteye.com/blog/2423848 )!
一 概述
(一直没有升级ES版本,这里只记录使用这一年多的一些优化结论)
Elasticsearch2.4.2 做索引库,提供低延迟的查询需求。
- 业务规模:docuement 规模 90万,大概200M,不算大。
- 查询特点:都是terms查询,没有聚合查询。客户端使用的是jest 基于http查询es。
- 性能:3000qps 并不大,tp 999 暂未统计
二 架构
(1)节点类型
- master node:协调,存储元数据,负载和内存占用不高,但建议独立部署。
- data node:计算,数据存储,主要负载节点,cpu,内存都要消耗。建议选好点的机器,内存大点的机器,并且机器配置尽量一样,方便负载均衡。
- client node:请求转发,负载均衡节点,主要用于接入和分配查询合并。(我们的场景,没有合并查询,所以基本没有负载)
(2)架构建议:数据量小,查询少可以混合使用。但建议独立部署。
- master node:3台,配置不用太高,但独立部署,重启维护方便。
- data node:n 台,cpu ,内存都好点,有建议ssd,视情况吧。
- client node:建议加入,统一入口,1~2台,cpu好点,有合并的话,内存大点。
三 节点配置
(1)查询队列:threadpool.search
(a)master: 小集群数据量不大,添加修改频繁,基本不用改配置。
(b)datanode:计算,由于tcp同clientnode 连接,我们使用的是 fixed 类型,队列大小需要慎重
threadpool.search.type: fixed threadpool.search.size: 100 # (核数 * 3)/2 +1 如果cpu使用率没有到 70% 以上,建议调大,提高系统的吞吐量 threadpool.search.queue_size: 1000
(c)clinetnode:我们无合并结果需求,只提供接入和datanode负载均衡的能力。cpu内存消耗非常低,避免线程数成为系统瓶颈,所以选择cached类型。
# Cached threadpool threadpool: generic: keep_alive: 200ms
(2)开启交换分区锁定:
bootstrap.mlockall: true
我们索引才几百M,最好都内存计算和fetch,同时避免内存不够是es的换出,性能确实有所提高,慢查询减少到原来的1/3;
(3)g1 gc :
查询请求多的时候,观察系统日志,出现gc 的警告,时间大于1s,这个暂停太长,我们在data node 上更换了g1 gc
要求: 需要高于JDK 8u40,版本,该版本之前改G1会造索引失效
修改方法:bin/elasticsearch.in.sh
调整为:
# Add gc options. ES_GC_OPTS is unsupported, for internal testing if [ "x$ES_GC_OPTS" = "x" ]; then # ES_GC_OPTS="$ES_GC_OPTS -XX:+UseParNewGC" # ES_GC_OPTS="$ES_GC_OPTS -XX:+UseConcMarkSweepGC" # ES_GC_OPTS="$ES_GC_OPTS -XX:CMSInitiatingOccupancyFraction=75" # ES_GC_OPTS="$ES_GC_OPTS -XX:+UseCMSInitiatingOccupancyOnly" ES_GC_OPTS="$ES_GC_OPTS -XX:+UseG1GC" ES_GC_OPTS="$ES_GC_OPTS -XX:MaxGCPauseMillis=200" fi
(4)discover
discovery.zen.ping.unicast.hosts: 建议配置master ip,master单独部署,不常重启影响。
四 索引库配置
1)shard 数据量在100万左右(多了没测),没有聚合的场景,单shard比多shard效果好。
2)preference查询参数可以将查询打在一个分配上,用于利用查询缓存,方便相似查询提升效率。
其他:
rountintKey:由于curd都需要携带,需要结合业务考虑是否适合使用。
其他:
(1)Jest:集群发现代码:
.discoveryEnabled(true)
.discoveryFrequency(10l, TimeUnit.SECONDS) // 需要设置好时间,es维护会影响这里的处理
.discoveryFilter("type:arbitrary")
public static JestClient jestClient() { JestClientFactory factory = new JestClientFactory(); factory.setHttpClientConfig( new HttpClientConfig .Builder(Arrays.asList("http://localhost:9200")) .multiThreaded(true) //一个route 默认不超过2个连接 路由是指连接到某个远程注解的个数。总连接数=route个数 * defaultMaxTotalConnectionPerRoute .defaultMaxTotalConnectionPerRoute(10) // 默认总连接数不超过20, 我们没有并发问题 .maxTotalConnection(30) .connTimeout(10000) .readTimeout(10000) //客户端发现 .discoveryEnabled(true) .discoveryFrequency(10l, TimeUnit.SECONDS) .discoveryFilter("type:arbitrary") .build() ); return factory.getObject(); }
相关推荐
elasticsearch 2.4.2 版 比较好用,我建议大家使用这款
elasticsearch-2.4.2安装包,解压后运行其中 bin 目录的 elasticsearch.bat
elasticsearch 搜索技术框架 外网速度太慢了,我下载速度10kb/s,下了40多分钟。资源放在这里,你只需要10秒钟就可以了。
一般来说我们开发Elasticsearch会选择使用集成springboot,在网上找的springboot集成elasticsearch文章几乎都是extends ElasticsearchRepository的方式来实现。但是新版本ElasticsearchRepository里的方法基本上已经...
(狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...
基于SpringBoot+elasticsearch的操作项目,包含各种es的操作(插入记录、精准搜索、模糊搜索、聚合查询等) 基于SpringBoot+elasticsearch的操作项目,包含各种es的操作(插入记录、精准搜索、模糊搜索、聚合查询等...
elasticsearch elasticsearch-6.2.2 elasticsearch-6.2.2.zip 下载
elasticsearch.js, 使用ElasticSearch的简单javascript库 一个简单的javascript库,用于处理 ElasticSearch 。它还提供了一个backend接口,适合于与倾斜式数据库套件一起使用。用法库需要:下划线jQuery ( 用于Ajax...
十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统。 什么是elasticsearch Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索...
消费kafka数据,然后批量导入到Elasticsearch,本例子使用的kafka版本0.10,es版本是6.4,使用bulk方式批量导入到es中,也可以一条一条的导入,不过比较慢。 <groupId>org.elasticsearch <artifactId>elastic...
Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elastic...
elasticsearch和elasticsearch-head-master包安装及其使用
赠送jar包:elasticsearch-6.8.3.jar; 赠送原API文档:elasticsearch-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-6.8.3-sources.jar; 赠送Maven依赖信息文件:elasticsearch-6.8.3.pom; 包含翻译后的API文档...
赠送jar包:elasticsearch-6.3.0.jar; 赠送原API文档:elasticsearch-6.3.0-javadoc.jar; 赠送源代码:elasticsearch-6.3.0-sources.jar; 赠送Maven依赖信息文件:elasticsearch-6.3.0.pom; 包含翻译后的API文档...
全文搜索引擎ElasticSearch介绍与使用
如果我们安装不成功,我们可以直接下载 Elasticsearch-SQL 插件的压缩包,然后解压,完成之后重命名文件夹为 sql ,放到 ES 的安装路径的 plugins目录中,例如:..\elasticsearch-6.4.0\plugins\sql。
springboot 集成elasticsearch ,api的使用, elasticsearch版本为7.13.4, springboot版本 2.5.3 jdk8
elasticsearch-7.17.6及对应版本IK分词 适合人群:elasticsearch初学者 Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 Elastic...
Elasticsearch 子项目:服务器 org.elasticsearch/elasticsearch/2.4.2/elasticsearch-2.4.2.jar
赠送jar包:elasticsearch-6.8.3.jar; 赠送原API文档:elasticsearch-6.8.3-javadoc.jar; 赠送源代码:elasticsearch-6.8.3-sources.jar; 赠送Maven依赖信息文件:elasticsearch-6.8.3.pom; 包含翻译后的API文档...