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.d/90-nproc.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进行批量删除操作。
参考资料:
相关推荐
### ElasticSearch启动后自行Killed问题解析与解决 #### 问题背景 在处理ElasticSearch启动后自动终止(Killed)的问题过程中,作者遇到了一系列挑战。这个问题最早在上周出现,并持续影响系统的正常使用。最终,...
Elasticsearch 7.13.0 是一个高度可扩展的开源全文搜索引擎,适用于各种规模的企业,尤其在大数据分析和实时搜索场景下表现卓越。它基于 Lucene 库构建,但提供了更高级别的抽象和管理功能,使得部署、操作和扩展...
Elasticsearch 是一款功能强大的开源搜索引擎,它提供了分布式、全文检索、实时分析的存储与检索解决方案。而 `elasticsearch-head` 是一个非常实用的Elasticsearch管理界面插件,允许用户通过浏览器直观地查看和...
在生产环境中部署ElasticSearch时,通常会采用集群架构。这种情况下,需要考虑网络配置、磁盘空间、内存大小等硬件资源,以及集群配置、节点角色划分等软件配置。 **2.3. 中文分词集成** 对于中文文本的处理,...
- 分享了微盟在实际使用过程中遇到的问题和解决方案,这些实战经验对于其他使用者来说是宝贵的参考。 通过以上内容,我们可以了解到在企业环境中运行 Elasticsearch 需要注意的关键点,包括性能优化、监控策略以及...
- **临时查看**:在遇到问题需要临时查看 ES 集群状态时,ES Head 是个快速的解决方案。 4. **与 Kibana 比较** - 虽然 Kibana 功能更强大,包括可视化、警报、仪表板等高级功能,但 ES Head 更简洁,上手更快,...
Elasticsearch和Solr的社区都提供大量的文档和资源,可以帮助开发者快速上手和解决遇到的问题。 关于安装与部署,两者都提供了简单易行的安装流程,可以快速搭建起本地测试环境。在生产环境中,它们都能通过增加...
### 在CentOS系统上安装Elasticsearch流程详解 #### 一、引言 Elasticsearch是一款基于Lucene的开源搜索...如果在安装过程中遇到任何问题,建议参考Elasticsearch的官方文档或在线社区资源以获得更具体的解决方案。
Elasticsearch 8.6.2 是一个高度可扩展的开源全文...总之,Elasticsearch 8.6.2 在 Linux 环境下提供了一套强大的搜索引擎和分析引擎,通过熟练掌握上述知识点,可以构建出高效、稳定且功能丰富的搜索和分析解决方案。
- **问题背景**:当Elasticsearch集群重启时,可能会遇到Shard恢复时间过长的问题,这会影响到系统的可用性和性能。 - **解决策略**: - 使用`index.recovery.initial_shards`参数来指定初始恢复的分片数量。 - ...
1. Elasticsearch(ES)的使用背景和需求分析: - 旅游服务行业的数据特点,比如数据量大、实时更新、多索引和shard的管理; - 面临的挑战,如集群维护、数据一致性和系统稳定性等; - 针对大数据量和高并发场景...
如果遇到权限问题,可能需要以守护进程模式运行,使用`sudo bin/elasticsearch -d`。 4. **配置文件** - Elasticsearch的主要配置位于`config/elasticsearch.yml`文件中。6.5版本可能包含了一些默认设置,如集群名...
- 对Elasticsearch的操作可能会遇到网络问题、索引不存在等异常,应适当地捕获并处理这些异常。 - 记录详细的日志,有助于调试和故障排查。 7. **性能调优** - 考虑使用Elasticsearch的批量操作以提高效率。 - ...
4. **查阅文档**:在使用过程中遇到问题,可以参考 ES Head 插件的官方文档或者社区资源,通常能找到解决方案。 总的来说,ES Head 插件离线版是 ES 用户的一个实用工具,虽然官方已不再支持,但通过离线安装,我们...
在搭建 Elasticsearch 服务时,可能会遇到一系列报错问题,这些错误通常与系统资源限制、配置不当或权限不足有关。在 CentOS7 上安装 Elasticsearch 时,常见的问题和解决方案如下: 1. **内存分配失败**: 报错...
但是请注意,这会永久性地删除索引及其所有数据,所以在生产环境中使用时要格外小心: ```javascript client.deleteIndex({ index: 'my_index' }, (err, res) => { if (err) console.error(err); else console....
在构建基于SpringBoot 2.0、Elasticsearch 5.5和RabbitMQ的...通过了解这些关键点和潜在问题,可以更顺利地搭建和维护基于SpringBoot、Elasticsearch和RabbitMQ的搜索服务,同时也能为未来可能遇到的问题提供解决方案。
- **线程限制问题**:Elasticsearch启动时可能会遇到线程数限制过低的问题。 - 修改`/etc/security/limits.d/90-nproc.conf`文件,将用户`elasticsearch`的`nproc`软限制提高到至少2048。 - 修改`/etc/sysctl.conf...