ElasticSearch实战系列十一: ElasticSearch错误问题解决方案
前言
本文主要介绍ElasticSearch在使用过程中出现的各种问题解决思路和办法。
ElasticSearch环境安装问题
1,max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因: 内存限制太小了!
解决办法: 修改最大内存限制!
修改sysctl.conf文件
vim /etc/sysctl.conf
在末尾增加如下配置:
vm.max_map_count = 655360
vm.swappiness=1
然后保存退出,输入以下命令使其生效
sysctl -p
使用命令查看:
tail -3 /etc/sysctl.conf
图片示例:
2,max number of threads [2048] for user [elastic] is too low, increase to at least [4096]
原因: 线程数限制太少了!
解决办法: 修改最大线程数限制!
修改90-nproc.conf文件
vim /etc/security/limits.d/90-nproc.conf
注:不同的linux服务器90-nproc.conf可能文件名不一样,建议先在/etc/security/limits.d/查看文件名确认之后再来进行更改。
将下述的内容
soft nproc 2048
修改为
soft nproc 4096
使用命令查看:
tail -3 /etc/security/limits.d/90-nproc.conf
3, max file descriptors [65535] for elasticsearch process likely too low, increase to at least [65536]
原因: 打开文件个数太少了!
解决办法: 修改最打开文件个数!
修改limits.conf
vim /etc/security/limits.conf
在末尾添加如下内容:
* hard nofile 65536* soft nofile 65536elastic soft memlock unlimitedelastic hard memlock unlimited
4,ERROR:bootstrap checks failed
原因:未锁定内存。
解决办法:在报错机器上的elasticsearch.yml配置文件中添加bootstrap.memory_lock: true配置!
ElasticSearch使用问题
1,ES查询下标数过大
原因: index * pagesiz 大于ES默认的返回最大的值 1w,所以提示异常!
解决办法:
一、可以通过url设置,方便快捷不用重启。如下:
curl -XPUT http://127.0.0.1:9200/book/_settings -d '{ "index" : { "max_result_window" : 200000000}}'
注意:
- 1.size的大小不能超过index.max_result_window这个参数的设置,默认为10,000。
- 2.需要搜索分页,可以通过from size组合来进行。from表示从第几行开始,size表示查询多少条文档。from默认为0,size默认为10
二、通过配置文件设置:
{ "order": 1, "template": "index_template*", "settings": { "index.number_of_replicas": "0", "index.number_of_shards": "1", "index.max_result_window": 2147483647 }
2,ES的分片未进行分配
1、定位问题分片
使用ES的cat API可以分析出未分配的分片信息及未分配的原因
curl -XGETlocalhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason| grepUNASSIGNED
命令返回信息包括索引名称、分片编号、是主分片还是副本分片、未分配原因等
如果是已删除索引的分片,可以直接使用删除命令删除索引:
curl -XDELETE 'localhost:9200/index_name/'
2、集群有目的的延迟分配
当某个节点脱离集群,主节点会暂时的延迟重分配分片,以减少重新平衡分片带来的资源浪费,这种情况下,如果源节点在一定时间(默认1分钟)内重新加入,可以恢复分片信息。这种情况的日志信息如下:
[TIMESTAMP][INFO][cluster.routing] [MASTER NODE NAME]delaying allocation for [54] unassigned shards, next check in [1m]
可以手动修改延迟时间:
curl -XPUT'localhost:9200/<INDEX_NAME>/_settings' -d '
{"settings": {"index.unassigned.node_left.delayed_timeout": "30s"}
}'
如果需要修改所有索引的阀值,则可以使用_all替换<INDEX_NAME>
3、分片数目过多,而节点数不足
主节点不会将主分片和副本分片分配至同一个节点,同样,也不会将两个副本节点分配到同一个节点,所以当没有足够的节点分配分片时,会出现未分配的状态;为了避免该种情况发生,节点数和副本数的关系应该为N>=R+1 (其中N为节点数,R为副本数量。
解决这个问题可以通过增加节点或者减少副本数量。
4、需要对分片进行重分配
分片重分配默认是开启的,但是可能因为某些原因关闭了重分配但是忘记开启了,开启后,分片被重分配。
开启重分配命令:
curl -XPUT 'localhost:9200/_cluster/settings'-d
'{ "transient":{"cluster.routing.allocation.enable" : "all" }
}'
5、集群中分片数据已不存在
数据在集群中已不存在,处理方法:
- 1,恢复存有0分片的源节点,并加入到集群中(不强制重新分配主分片)
- 2,使用Reroute API强制重分配分片
curl -XPOST'localhost:9200/_cluster/reroute' -d '{ "commands" :[ { "allocate_empty_primary" : { "index" :"constant-updates", "shard" : 0, "node":"<NODE_NAME>", "accept_data_loss": "true" }}]
}'
- 3,从原始数据重建索引或者从备份快照中恢复
6、磁盘空间不足
一般情况下,当磁盘利用率达到85%时,主节点将不再分配分片至该节点上
可以使用如下命令查看磁盘利用率:
curl -s 'localhost:9200/_cat/allocation?v'
如果磁盘空间比较大,而85%利用率有些浪费,可以通过设cluster.routing.allocation.disk.watermark.low
和(或)cluster.routing.allocation.disk.watermark.high
来增加该值:
curl -XPUT 'localhost:9200/_cluster/settings'-d
'{"transient": { "cluster.routing.allocation.disk.watermark.low":"90%" }
}'
注:如果需要集群重启有效,可将transient改为persistent;ES设置中百分比多指已使用空间,字节值多指未使用空间
7、多版本问题
ES集群中存在多版本ES,导致不兼容问题
3,ES索引库的状态只可读
原因: ES索引库写入的数据的时候出现
retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"block
异常。
原因: 可能是因为该服务的磁盘快满了,因此ES集群修改了这些索引库的状态,让其只读,无法写入。
根本解决办法,增加磁盘或者清理磁盘无用的数据。
临时方法,修改器状态为可读。
PUT /_all/_settings
{
"index.blocks.read_only_allow_delete": null
}
4,ES集群出现红色的情况
首先进行查看集群的具体情况,使用 GET /_cluster/health 命令查看集群的健康状态。
如果出现的是unassigned shards,说明缺失了分片,可以使用GET /_cat/shards查看分片的状态并且找到缺失的分片。
如果是因为集群宕机问题而导致的主分片缺失,可以增加节点并且进行自动分片的话一般情况下是可以解决!
如果是因为数据缺失的话,也就是主副分片都丢失了,那么这种情况下的数据是无法恢复的,可以根据情况进行选择,若是重要索引库的数据,可以使用reindex将数据重新迁移,可以解决集群red的情况,但是缺少的数据是无法找回的。
如果是不重要的索引库,那么删除该索引库重建即可。
5,ES集群GC回收失败
解决办法: 1.升级JDK的版本,JDK的版本高于1.8_145;
2.减少GC回收频率。
6, 脑裂
master not discovered or elected yet, an election requires a node with id
解决办法:
1.指定master节点,es7.x配置,
2.删除原有data的数据,清空从来
es7.x配置示例:
cluster.name: pancm
node.name: node-3
network.host: 192.168.8.160
node.master: false
node.data: true
discovery.seed_hosts: ["192.168.9.238","192.168.8.181","192.168.8.160"]
#指定主节点
cluster.initial_master_nodes: ["192.168.9.238"]
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
cluster.routing.allocation.cluster_concurrent_rebalance: 16
cluster.routing.allocation.node_concurrent_recoveries: 16
cluster.routing.allocation.node_initial_primaries_recoveries: 16
path.data: /home/elastic/masternode/data
path.logs: /home/elastic/masternode/logs
Logstash使用问题
1,logstash: Could not execute action: PipelineAction::Create, action_result: false
解决办法: 斜杆用“/”
2, logstash: object mapping for [host] tried to parse field [host] as object, but found a concrete value
解决办法: 在filter里面添加:
#mutate {# rename => { "[host][name]" => "host" }# }
mutate {rename => { "host" => "host.name" }}
ElasticSearch的Java代码问题
1…ES7.x版本查询报错:
org.elasticsearch.action.search.SearchRequest.isCcsMinimizeRoundtrips()Z
解决办法: 缺失jar包,完整的pom配置如下:
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.3.2</version><exclusions><exclusion><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId></exclusion><exclusion><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.3.2</version>
</dependency><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>7.3.2</version>
</dependency>
其他
参考:
https://blog.csdn.net/laoyang360/article/details/78443006
https://blog.csdn.net/u013673976/article/details/53305898
https://www.datadoghq.com/blog/elasticsearch-unassigned-shards/
https://blog.csdn.net/kezhen/article/details/79379512
ElasticSearch实战系列:
- ElasticSearch实战系列一: ElasticSearch集群+Kinaba安装教程
- ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程—图文详解
- ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程
- ElasticSearch实战系列四: ElasticSearch理论知识介绍
- ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合
- ElasticSearch实战系列六: Logstash快速入门
- ElasticSearch实战系列七: Logstash实战使用-图文讲解
- ElasticSearch实战系列八: Filebeat快速入门和使用—图文详解
- ElasticSearch实战系列九: ELK日志系统介绍和安装
- ElasticSearch实战系列十: ElasticSearch冷热分离架构
原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!
版权声明:
作者:虚无境
博客园出处:http://www.cnblogs.com/xuwujing
CSDN出处:http://blog.csdn.net/qazwsxpcm
掘金出处:https://juejin.im/user/5ae45d5bf265da0b8a6761e4
个人博客出处:http://www.panchengming.com
ElasticSearch实战系列十一: ElasticSearch错误问题解决方案相关推荐
- ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合
Title:ElasticSearch实战系列四: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合 前言 在上上一篇中介绍了ElasticSearch实战系列三: Elas ...
- java search 不能使用方法_ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程
前言 在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的 ...
- ElasticSearch实战系列02 SpringBoot + ElasticSearch 7.7 实现高仿QQ用户搜索:中文+拼音混合检索,并高亮显示
本文导读 本文仿照QQ的用户搜索,搭建一个中文+拼音的混合检索系统,并高亮显示检索字段.全文共分为以下几部分: 1.项目简介,包括需求描述与分析等: 2.项目开发,通过两个版本的index,验证并完成 ...
- Elasticsearch实战(十一)---前缀模糊匹配搜索 prefix search
Elasticsearch实战- 前缀模糊匹配搜索 prefix/wildcard/regexp search 文章目录 Elasticsearch实战- 前缀模糊匹配搜索 prefix/wildca ...
- elasticsearch 分页_[Springboot实战系列]整合ElasticSearch实现数据模糊搜索
前言 本文介绍了如何整合搜索引擎elasticsearch与springboot,对外提供数据查询接口. 业务介绍 我的个人网站需要对mysql数据库内存储的京东商品进行模糊查询(模仿淘宝商品搜索), ...
- ElasticSearch实战系列02:中文+拼音混合检索,并高亮显示
点击上方"方才编程",即可关注我! 本文导读 本文仿照QQ的用户搜索,搭建一个中文+拼音的混合检索系统,并高亮显示检索字段.全文共分为以下几部分: 1.项目简介,包括需求描述与分 ...
- (二)ElasticSearch实战基础教程(ElasticSearch入门)
1.ElasticSearch基础概念 1.1 文档(Doucument) 1.ElasticSearch是面向文档的,文档是所有可搜索数据的最小单位·日志文件中的日志项·一本电影的具体信息/一张唱片 ...
- 云计算实战系列十一(软件包管理)
软件包管理 知识点: Linux 软件包管理机制 Yum 使用官方源 Yum 管理软件包 Yum 缓存机制[扩展] Rpm 工具管理 RPM 包 源码包应用场景[定制] 源码包管理软件包 nginx ...
- MP实战系列(十一)之封装方法详解(续一)
之前写的封装方法详解,比较简要. 今天我主要讲增加和删除及其修改.查的话得单独再详讲. 增删改查,无论是Java或者C#等等,凡是对数据库操作的都离不开这四个. 一.增加方法讲解 MyBatis Pl ...
最新文章
- android 轮播 中间变大,如何实现中间大两头小的轮播效果
- socket什么意思_浅析Redis为什么这么快
- 字符串(0-9和小数点)转为数字--atof,数字转化为字符串--sprintf
- 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) Stone Games
- 在Java 8中使用Stream API解析文件
- 【leetcode】Combinations (middle)
- 我的100篇随笔纪念,关于JScript开发
- 横向对比5大开源语音识别工具包,CMU Sphinx最佳
- Elasticsearch核心知识大纲脑图
- Thymeleaf指定背景图片以及图片如何调整大小
- r语言nonzerocoef函数_文献汇报||Lasso方法在肿瘤基因位点筛选中的应用
- 认知神经学lecture1---感受与感知
- 关于Python面试的4点,你做到就吃鸡了!
- Java开源模板引擎
- 关于入户广州的政策条件?大学生毕业后如何正确处理档案户口的事项?
- 32岁,我从测试新人到资深测试工程师,终于实现财富自由了···
- 最大数字字符串(leetCode179)
- 锂电池升压芯片,IC电路图资料
- Spring Boot学习笔记(一)
- MCU控制固态继电器SSR的一种简单可靠的方法
热门文章
- node mysql timeout_Error: Handshake inactivity timeout in Node.js MYSQL module
- 扫描转换html,html+css实现图片扫描仪特效
- Unity3D教程:Unity3D自带寻路教程
- 通过网线连接获取树莓派的ip地址
- linux启动分区丢,Linux装机因为分区丢失引导解决办法
- SpringBoot 优雅地对接口进行数据加解密
- JLink 警告:The connected J-Link is defective,Proper operation cannot be guaranteed.所遇到的坑
- 阴阳师最新的服务器,阴阳师6月30日正式服务器更新内容一览
- Python 阴阳师/pillow-窗口截屏/opencv-图像识别/pyaotugui-点击/pyqt5-UI界面设计/pyqt5-窗口绘制
- python 分类问题 画roc曲线实战