前言

本文主要介绍ElasticSearch在使用过程中出现的各种问题解决思路和办法。

ElasticSearch环境安装问题

1,max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

原因: 内存限制太小了!

解决办法: 修改最大内存限制!

修改sysctl.conf文件

  1. vim /etc/sysctl.conf

在末尾增加如下配置:

  1. vm.max_map_count = 655360
  2. vm.swappiness=1

然后保存退出,输入以下命令使其生效

  1. sysctl -p

使用命令查看:

  1. 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文件

  1. vim /etc/security/limits.d/90-nproc.conf

注:不同的linux服务器90-nproc.conf可能文件名不一样,建议先在/etc/security/limits.d/查看文件名确认之后再来进行更改。

将下述的内容

  1. soft nproc 2048

修改为

  1. soft nproc 4096

使用命令查看:

  1. 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

  1. vim /etc/security/limits.conf

在末尾添加如下内容:

  1. * hard nofile 65536
  2. * soft nofile 65536
  3. elastic soft memlock unlimited
  4. elastic hard memlock unlimited

4,ERROR:bootstrap checks failed

原因:未锁定内存。

解决办法:在报错机器上的elasticsearch.yml配置文件中添加bootstrap.memory_lock: true配置!

ElasticSearch使用问题

1,ES查询下标数过大

原因: index * pagesiz 大于ES默认的返回最大的值 1w,所以提示异常!

解决办法:

一、可以通过url设置,方便快捷不用重启。如下:

  1. 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

二、通过配置文件设置:

  1. { "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可以分析出未分配的分片信息及未分配的原因

  1. curl -XGETlocalhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason| grepUNASSIGNED

命令返回信息包括索引名称、分片编号、是主分片还是副本分片、未分配原因等

如果是已删除索引的分片,可以直接使用删除命令删除索引:

  1. curl -XDELETE 'localhost:9200/index_name/'

2、集群有目的的延迟分配

当某个节点脱离集群,主节点会暂时的延迟重分配分片,以减少重新平衡分片带来的资源浪费,这种情况下,如果源节点在一定时间(默认1分钟)内重新加入,可以恢复分片信息。这种情况的日志信息如下:

  1. [TIMESTAMP][INFO][cluster.routing] [MASTER NODE NAME]delaying allocation for [54] unassigned shards, next check in [1m]

可以手动修改延迟时间:

  1. curl -XPUT'localhost:9200/<index_name>/_settings' -d '
  2. {
  3. "settings": {
  4. "index.unassigned.node_left.delayed_timeout": "30s"
  5. }
  6. }'

如果需要修改所有索引的阀值,则可以使用_all替换<index_name>

3、分片数目过多,而节点数不足

主节点不会将主分片和副本分片分配至同一个节点,同样,也不会将两个副本节点分配到同一个节点,所以当没有足够的节点分配分片时,会出现未分配的状态;为了避免该种情况发生,节点数和副本数的关系应该为N>=R+1 (其中N为节点数,R为副本数量。

解决这个问题可以通过增加节点或者减少副本数量。

4、需要对分片进行重分配

分片重分配默认是开启的,但是可能因为某些原因关闭了重分配但是忘记开启了,开启后,分片被重分配。

开启重分配命令:

  1. curl -XPUT 'localhost:9200/_cluster/settings'-d
  2. '{ "transient":
  3. {"cluster.routing.allocation.enable" : "all"
  4. }
  5. }'

5、集群中分片数据已不存在

数据在集群中已不存在,处理方法:

  • 1,恢复存有0分片的源节点,并加入到集群中(不强制重新分配主分片)
  • 2,使用Reroute API强制重分配分片
  1. curl -XPOST'localhost:9200/_cluster/reroute' -d '{ "commands" :
  2. [ { "allocate_empty_primary" :
  3. { "index" :"constant-updates", "shard" : 0, "node":"<node_name>", "accept_data_loss": "true" }
  4. }]
  5. }'
  • 3,从原始数据重建索引或者从备份快照中恢复

6、磁盘空间不足

一般情况下,当磁盘利用率达到85%时,主节点将不再分配分片至该节点上

可以使用如下命令查看磁盘利用率:

  1. curl -s 'localhost:9200/_cat/allocation?v'

如果磁盘空间比较大,而85%利用率有些浪费,可以通过设cluster.routing.allocation.disk.watermark.low

和(或)cluster.routing.allocation.disk.watermark.high来增加该值:

  1. curl -XPUT 'localhost:9200/_cluster/settings'-d
  2. '{
  3. "transient": {
  4. "cluster.routing.allocation.disk.watermark.low":"90%"
  5. }
  6. }'

注:如果需要集群重启有效,可将transient改为persistent;ES设置中百分比多指已使用空间,字节值多指未使用空间

7、多版本问题

ES集群中存在多版本ES,导致不兼容问题

3,ES索引库的状态只可读

原因: ES索引库写入的数据的时候出现

  1. retrying failed action with response code: 403 ({"type"=&gt;"cluster_block_exception", "reason"=&gt;"block

异常。

原因: 可能是因为该服务的磁盘快满了,因此ES集群修改了这些索引库的状态,让其只读,无法写入。

根本解决办法,增加磁盘或者清理磁盘无用的数据。

临时方法,修改器状态为可读。

  1. PUT /_all/_settings
  2. {
  3. "index.blocks.read_only_allow_delete": null
  4. }

4,ES集群出现红色的情况

首先进行查看集群的具体情况,使用 GET /_cluster/health 命令查看集群的健康状态。

如果出现的是unassigned shards,说明缺失了分片,可以使用GET /_cat/shards查看分片的状态并且找到缺失的分片。

如果是因为集群宕机问题而导致的主分片缺失,可以增加节点并且进行自动分片的话一般情况下是可以解决!

如果是因为数据缺失的话,也就是主副分片都丢失了,那么这种情况下的数据是无法恢复的,可以根据情况进行选择,若是重要索引库的数据,可以使用reindex将数据重新迁移,可以解决集群red的情况,但是缺少的数据是无法找回的。

如果是不重要的索引库,那么删除该索引库重建即可。

5,ES集群GC回收失败

解决办法: 1.升级JDK的版本,JDK的版本高于1.8_145;

2.减少GC回收频率。

6, 脑裂

  1. master not discovered or elected yet, an election requires a node with id

解决办法:

1.指定master节点,es7.x配置,

2.删除原有data的数据,清空从来

es7.x配置示例:

  1. cluster.name: pancm
  2. node.name: node-3
  3. network.host: 192.168.8.160
  4. node.master: false
  5. node.data: true
  6. discovery.seed_hosts: ["192.168.9.238","192.168.8.181","192.168.8.160"]
  7. #指定主节点
  8. cluster.initial_master_nodes: ["192.168.9.238"]
  9. network.tcp.keep_alive: true
  10. network.tcp.no_delay: true
  11. transport.tcp.compress: true
  12. cluster.routing.allocation.cluster_concurrent_rebalance: 16
  13. cluster.routing.allocation.node_concurrent_recoveries: 16
  14. cluster.routing.allocation.node_initial_primaries_recoveries: 16
  15. path.data: /home/elastic/masternode/data
  16. 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里面添加:

  1. #mutate {
  2. # rename =&gt; { "[host][name]" =&gt; "host" }
  3. # }
  4. mutate {
  5. rename =&gt; { "host" =&gt; "host.name" }
  6. }

ElasticSearch的Java代码问题

1..ES7.x版本查询报错:

  1. org.elasticsearch.action.search.SearchRequest.isCcsMinimizeRoundtrips()Z

解决办法: 缺失jar包,完整的pom配置如下:

  1. <dependency>
  2. <groupid>org.elasticsearch.client</groupid>
  3. <artifactid>elasticsearch-rest-high-level-client</artifactid>
  4. <version>7.3.2</version>
  5. <exclusions>
  6. <exclusion>
  7. <groupid>org.elasticsearch</groupid>
  8. <artifactid>elasticsearch</artifactid>
  9. </exclusion>
  10. <exclusion>
  11. <groupid>org.elasticsearch.client</groupid>
  12. <artifactid>elasticsearch-rest-client</artifactid>
  13. </exclusion>
  14. </exclusions>
  15. </dependency>
  16. <dependency>
  17. <groupid>org.elasticsearch</groupid>
  18. <artifactid>elasticsearch</artifactid>
  19. <version>7.3.2</version>
  20. </dependency>
  21. <dependency>
  22. <groupid>org.elasticsearch.client</groupid>
  23. <artifactid>elasticsearch-rest-client</artifactid>
  24. <version>7.3.2</version>
  25. </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实战系列:

原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!

版权声明:

作者:虚无境

博客园出处:http://www.cnblogs.com/xuwujing

CSDN出处:http://blog.csdn.net/qazwsxpcm

掘金出处:https://juejin.im/user/5ae45d5bf265da0b8a6761e4    

个人博客出处:http://www.panchengming.com</node_name></index_name></index_name>

ElasticSearch实战系列十一: ElasticSearch错误问题解决方案的更多相关文章

  1. ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解

    前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...

  2. ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程

    前言 在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的 ...

  3. ElasticSearch实战系列四: ElasticSearch理论知识介绍

    前言 在前几篇关于ElasticSearch的文章中,简单的讲了下有关ElasticSearch的一些使用,这篇文章讲一下有关 ElasticSearch的一些理论知识以及自己的一些见解. 虽然本人是 ...

  4. ElasticSearch实战系列五: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合

    Title:ElasticSearch实战系列四: ElasticSearch的聚合查询基础使用教程之度量(Metric)聚合 前言 在上上一篇中介绍了ElasticSearch实战系列三: Elas ...

  5. ElasticSearch实战系列十: ElasticSearch冷热分离架构

    前言 本文主要介绍ElasticSearch冷热分离架构以及实现. 冷热分离架构介绍 冷热分离是目前ES非常火的一个架构,它充分的利用的集群机器的优劣来实现资源的调度分配.ES集群的索引写入及查询速度 ...

  6. ElasticSearch实战系列一: ElasticSearch集群+Kinaba安装教程

    前言 本文主要介绍的是ElasticSearch集群和kinaba的安装教程. ElasticSearch介绍 ElasticSearch是一个基于Lucene的搜索服务器,其实就是对Lucene进行 ...

  7. ElasticSearch实战系列七: Logstash实战使用-图文讲解

    前言 在上一篇中我们介绍了Logstash快速入门,本文主要介绍的是ELK日志系统中的Logstash的实战使用.实战使用我打算从以下的几个场景来进行讲解. 时区问题解决方案 在我们使用logstas ...

  8. ElasticSearch实战系列六: Logstash快速入门和实战

    前言 本文主要介绍的是ELK日志系统中的Logstash快速入门和实战 ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...

  9. ElasticSearch实战系列八: Filebeat快速入门和使用---图文详解

    前言 本文主要介绍的是ELK日志系统中的Filebeat快速入门教程. ELK介绍 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是 ...

随机推荐

  1. Linux 服务器性能测试报告-sysbench命令实践

    Linux 服务器性能测试报告 我们使用linux 工具sysbench 来测试linux服务器性能,目前在Centos上进行操作 Install sysbench yum -y install sy ...

  2. day-08-文件管理

    文件的操作的初识 利用python代码写一个很low的软件,去操作文件. 文件路径:path 打开方式:读,写,追加,读写,写读...... 编码方式:utf-8,gbk ,gb2312...... ...

  3. Spring Authorization Server 全新授权服务器整合使用

    前言 Spring Authorization Server 是 Spring 团队最新开发适配 OAuth 协议的授权服务器项目,旨在替代原有的 Spring Security OAuth 经过半年 ...

  4. OkHttp配置HTTPS访问+服务器部署

    1 概述 OkHttp配置HTTPS访问,核心为以下三个部分: sslSocketFactory() HostnameVerifier X509TrustManager 第一个是ssl套接字工厂,第二 ...

  5. User-Agent大全 python

    1 # -*-coding:utf-8 -*- 2 3 import random 4 5 # 返回一个随机的请求头 headers 6 def getheaders(): 7 # 各种PC端 8 u ...

  6. 网络编程Netty入门:EventLoopGroup分析

    目录 Netty线程模型 代码示例 NioEventLoopGroup初始化过程 NioEventLoopGroup启动过程 channel的初始化过程 Netty线程模型 Netty实现了React ...

  7. k8s kubernetes 集群 证书更新操作

    转载自https://www.cnblogs.com/kuku0223/p/12978716.html 1. 各个证书过期时间 /etc/kubernetes/pki/apiserver.crt #1 ...

  8. Java获取多线程执行结果方式的归纳与总结

    在日常的项目开发中,我们会经常遇到通过多线程执行程序并需要返回执行结果的场景,下面我们就对获取多线程返回结果的几种方式进行一下归纳,并进行简要的分析与总结. 一.Thread.join 在一些简单的应 ...

  9. 使用defineProperty实现自定义setter, 简化前端Angular的重构工作

    一.问题场景 Angular的双向绑定给我们开发提供了很大的遍历,将父scope的引用变量作为参数传递给子指令,这样就可以方便的在父作用域内进行业务操作,数据变更会自动传递到子指令.但是如果你基于一个 ...

  10. CentOS7用yum安装软件提示 cannot find a valid baseurl for repobase7x86_64

    解决办法[亲测有效] 1.打开 vi /etc/sysconfig/network-scripts/ifcfg-enp4s0(每个机子都可能不一样,但格式会是"ifcfg-e..." ...