1. ESRestful API,共四类API:
  2. 1. 检查集群、节点、索引等健康与否,以及获取其相应状态。
  3. 2. 管理集群、节点、索引及元数据
  4. 3. 执行CRUB操作(即:增删查改)
  5. 4. 执行高级操作,如:pagingfiltering等。
  6.  
  7. ES API的访问接口: TCP9200,并且ES是基于HTTP协议工作的.
  8.  
  9. curl -X <Verb> '<Protocol>://Host:Port/<Path>?<Query_String>' -d '<Body>'
  10.  
  11. 注:
  12. Verb: HTTP的操作,GET, PUT, DELETE等.
  13. Protocol: http,https
  14. Path: 访问路径.
  15. Query_String:查询参数,如: '?pretty':表示使用容易读的JSON格式显示输出.
  16. Body:请求的主体。
  17.  
  18. 如查看node1的状态:
  19. curl -X GET 'http://1.1.1.1:9200/?pretty'
  20.  
  21. ESAPI接口:
  22.  
  23. _cat API:
  24. 查看ES集群的状态:
  25. curl -X GET 'http://1.1.1.1:9200/_cat/nodes?v'
  26. 注:
  27. _cat: 这是ESAPI接口名,一般ESAPI接口名使用下划线开头.
  28. 此接口的功能是输出显示的。
  29. v: 问号v,是修饰符,v:是verbose,显示详情。
  30. ?help: 可显示帮助信息。
  31. ?h=name,ip,port,uptime,heap.current :可定义显示那些列.
  32. curl -XGET 'http://1.1.1.1:9200/_cat/indices' #查看ES集群中所有的索引信息
  33. curl localhost:9200/_cat/indices?s #默认可省略s,s: status
  34. curl localhost:9200/_cat/indices?help #可查看支持的查询关键字
  35.  
  36. _cluster APIs:
  37. 查看ES集群健康状态详情:
  38. curl -X GET 'http://1.1.1.1:9200/_cluster/health?pretty'
  39.  
  40. 查看索引的健康状态:
  41. health
  42. curl -X GET 'http://1.1.1.1:9200/_cluster/health/索引名1,索引名2,...'
  43. curl -X GET 'http://1.1.1.1:9200/_cluster/health/索引名1?level=Level'
  44. 注:
  45. cluster:显示到集群级别
  46. indices:显示到索引级别
  47. shards:分片级别
  48.  
  49. 查看集群的状态信息:
  50. state:
  51. curl -X GET 'http://1.1.1.1:9200/_cluster/state/version'
  52.  
  53. curl -X GET 'http://1.1.1.1:9200/_cluster/state/master_node?pretty'
  54. curl -X GET 'http://1.1.1.1:9200/_cluster/state/nodes?pretty'
  55.  
  56. 查看集群的统计数据:
  57. stats:
  58. curl -X GET 'http://1.1.1.1:9200/_cluster/stats?pretty'
  1. 查看集群节点状态信息:
  2. # curl 192.168.10.80:9200/_cat/nodes?v
  3. 堆内存% 总内存% CPU 1分钟 5分钟 15分钟 角色 *:主节点 节点名
  4. ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
  5. 10.2.2.81 14 87 0 0.14 0.12 0.11 mdi - node81
  6. 10.2.2.80 27 95 0 0.02 0.02 0.00 mdi * node80
  7.  
  8. # curl 192.168.10.80:9200/_cat/health?v
  9. epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
  10. 1564141337 11:42:17 myes1 green 2 2 40 20 0 0 0 0 - 100.0%
  11.  
  12. # 下面可以看当前所有Index(索引)的状态统计,通过它,可获取当前ES集群中是否有red 或 yellow的Index,若有,
  1. 则需要通过下面的 _cluster/health?level=indices&pretty 来具体查看该Index分片的详细信息。
  2. curl 192.168.10.80:9200/_cat/indices?v

   

  1. #查看Index分片的状态信息
  2. # curl "localhost:9200/_cluster/health?level=indices&pretty"
  3. {
  4. "cluster_name" : "myes1",
  5. "status" : "green", #整个ES集群的状态为green,是因为下面所有Index的状态为green,若其中有任何一个Index的状态非Green,则整个ES的状态将会非Green。
  6. "timed_out" : false,
  7. "number_of_nodes" : 2,
  8. "number_of_data_nodes" : 2,
  9. "active_primary_shards" : 20,
  10. "active_shards" : 40,
  11. "relocating_shards" : 0,
  12. "initializing_shards" : 0,
  13. "unassigned_shards" : 0,
  14. "delayed_unassigned_shards" : 0,
  15. "number_of_pending_tasks" : 0,
  16. "number_of_in_flight_fetch" : 0,
  17. "task_max_waiting_in_queue_millis" : 0,
  18. "active_shards_percent_as_number" : 100.0,
  19. "indices" : {
  20. ".kibana_task_manager" : {
  21. "status" : "green", #当前.kibana_task_manager这个Index的状态为green。
  22. #通常若Index的分片出现丢失,状态将会是red或yellow:
  23. #red:则表示有一个主分片丢失! yellow:则表示一个副本分片丢失!!但主分片依然可读
  24. "number_of_shards" : 1, #shard的数量为1,即分片为1个
  25. "number_of_replicas" : 1, #副本分片数为1,副本分片数决定了shard的个数,若shard个数与它不相同,则该Index的状态一定不是green:
  26. "active_primary_shards" : 1, #当前活动的主分片数量
  27. "active_shards" : 2, #这是当前所有活动的分片数量
  28. "relocating_shards" : 0, #正在调度分配的分片个数【根据字面理解,不完全正确】
  29. "initializing_shards" : 0, #正在初始化分片的个数
  30. "unassigned_shards" : 0 #未分配的分片个数
  31. },
  32. ...........................

#查看shard分片中那个分片没有分配,以及它在那个Node上丢失分片了
 # curl "localhost:9200/_cat/shards?v&pretty"
 #    shard: 它表示index的分片编号
 #    prirep: 这是主分片和副本分片,其中:p: 表示主分片, r:表示副本分片
 #    state: 这个状态可能有这几种: relocating,initializing ,Started, unassigned ,其中unassigned 这表示未分配,若是这种状态,就需要注意了。
 #    docs 和 store: 就是此Index下文档数量和该docs所占的磁盘空间大小。

  

ElasticSearch集群出现Red 和 Yellow状态的原因

参考链接:https://www.jianshu.com/p/74fe89ab4af7
集群 RED 和 YELLOW 是 Elasticsearch 集群最常见的问题之一.
无论 RED 还是 YELLOW,原因只有一个:有部分分片没有分配,而且那怕只有一个也会导致集群故障。

  red:则表示有主分片没有分配!
  yellow:则表示有副本分片没有分配!!但主分片依然可读

对于集群 RED 或 YELLOW 的问题诊断推荐使用 Cluster Allocation Explain API,该 API 可以给出造成分片未分配的具体原因。
例如,如下请求可以返回第一个未分配的分片的具体原因:
  curl -XGET localhost:9200/_cluster/allocation/explain?pretty

集群 RED 或 YELLOW 时,一般我们首先需要看一下是否有节点离线。
但单个的未分配分片也导致集群状态变为 RED 或 YELLOW,一些常见的未分配原因如下:
  • 由于配置问题导致的,需要修正相应的配置
  • 由于节点离线导致的,需要重启离线的节点
  • 由于分片规则限制的,例如 total_shards_per_node,或磁盘剩余空间限制等,需要调整相应的规则
  • 分配主分片时,由于找不到最新的分片数据,导致主分片未分配,这种要观察是否有节点离线,
     极端情况下只能手工将旧的副本分片修改为主分片,但这会导致丢失一些新入库的数据。

  1. # curl "localhost:9200/_cat/shards?v&pretty" | grep unassingned
  2. #若上面查询中出现了 unassingned ,则可通过,下面命令来查看 该index的分片是什么原因导致未分配
  3. curl -sXGET localhost:9200/_cluster/allocation/explain?pretty -d '{
  4. "index":"myindex", #可指定index名
  5. "shard":3, #指定要查看的Shard(分片)编号
  6. "primary":true
  7. }'
  8. #若输出结果为:
  9. {
  10. "index" : "myindex",
  11. "shard" : 0,
  12. "primary" : true,
  13. "current_state" : "unassigned",
  14. ..............
  15. },
  16. "can_allocate" : "no_valid_shard_copy",
  17. "allocate_explanation" : "cannot allocate because all found copies of the shard are either stale or corrupt",
  1.         #无法分配,因为所找到的分片的所有副本都已陈旧或损坏
  2. ...........................
  3. #这种错误可理解为:
  4. Elasticsearch 找到了这个分片在磁盘中的数据,但是由于分片的数据不是最新的,无法将其分配为主分片。
  5.  
  6. 分配分片的方法
  7. 若知道哪个索引的哪个分片丢失或损坏,就开始手动修复,通过rerouteallocate分配
  8. curl -XPOST '{ESIP}:9200/_cluster/reroute' -H "content-type: application/json" -d '{
  9. "commands" : [ {
  10. "allocate" : {
  11. "index" : "eslog1",
  12. "shard" : 4,
  13. "node" : "es1",
  14. "allow_primary" : true
  15. }
  16. }
  17. ]
  18. }'
  19. 分配时可能遇到的坑,需要注意的地方
  20. 分配副本时必须要带参数"allow_primary" : true, 不然会报错
  21. 当集群中es版本不同时,如果这个未分配的分片是高版本生成的,不能分配到低版本节点上,反过来低版本的分片可以分配给高版本,
  1. 如果遇到了,只要升级低版本节点的ES版本即可
  2. (升级ES版本详见官方详细文档,我是ubuntu系统apt安装的,直接apt-get install elasticsearch升级的,elasticsearch.yml
  1. 配置文件没变不用修改,但是/usr/share/elasticsearch/bin/elasticsearch文件中有个内存配置ES_HEAP_SIZE=6G需要再手动加一下&重启es
  1. 【摘自网络】
    #分片没有被分配的最初原因有下列类型:
  2. 1. INDEX_CREATED
  3. 由于 create index api 创建索引导致,索引创建过程中,把索引的全部分片分配完毕需要一个过程,
  1.      在全部分片分配完毕之前,该索引会处于短暂的 RED YELLOW 状态。因此监控系统如果发现集群 RED,不一定代表出现了故障。
  2. 2. CLUSTER_RECOVERED
  3. 集群完全重启时,所有分片都被标记为未分配状态,因此在集群完全重启时的启动阶段,reason属于此种类型。
  4. 3. INDEX_REOPENED
  5. open 一个之前 close 的索引, reopen 操作会将索引分配重新分配。
  6. 4. DANGLING_INDEX_IMPORTED
  7. 正在导入一个 dangling index,什么是 dangling index
  8. 磁盘中存在,而集群状态中不存在的索引称为 dangling index,例如从别的集群拷贝了一个索引的数据目录到当前集群,
  1.      Elasticsearch 会将这个索引加载到集群中,因此会涉及到为 dangling index 分配分片的过程。
  2. 5. NEW_INDEX_RESTORED
  3. 从快照恢复到一个新索引。
  4. 6. EXISTING_INDEX_RESTORED,
  5. 从快照恢复到一个关闭状态的索引。
  6. 7. REPLICA_ADDED
  7. 增加分片副本。
  8. 8. ALLOCATION_FAILED
  9. 由于分配失败导致。
  10. 9. NODE_LEFT
  11. 由于节点离线。
  12. 10. REROUTE_CANCELLED
  13. 由于显式的cancel reroute命令。
  14. 11. REINITIALIZED
  15. 由于分片从 started 状态转换到 initializing 状态。
  16. 12. REALLOCATED_REPLICA
  17. 由于迁移分片副本。
  18. 13. PRIMARY_FAILED
  19. 初始化副分片时,主分片失效。
  20. 14. FORCED_EMPTY_PRIMARY
  21. 强制分配一个空的主分片。
  22. 15. MANUAL_ALLOCATION
  23. 手工强制分配分片。

Elasticsearch状态API接口排障总结的更多相关文章

  1. 搜索引擎Elasticsearch REST API学习

    Elasticsearch为开发者提供了一套基于Http协议的Restful接口,只需要构造rest请求并解析请求返回的json即可实现访问Elasticsearch服务器.Elasticsearch ...

  2. Spring Boot Security 整合 JWT 实现 无状态的分布式API接口

    简介 JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案.JSON Web Token 入门教程 - 阮一峰,这篇文章可以帮你了解JWT的概念.本文重点讲解Spring Boo ...

  3. 从App业务逻辑中提炼API接口

    2.1 从App业务逻辑中提炼API接口 业务逻辑思维导图 功能-业务逻辑思维导图 基本功能模块关系 功能模块接口UML(设计出API) 在设计稿标注API 编写API文档 2.2 设计API的要点 ...

  4. ElasticSearch的API介绍

    ElasticSearch的API介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ES是基于Restful风格 1>ES是基于Restful风格 Elasticsea ...

  5. 为elasticSearch开发c++接口

    一.    ElasticSearch是什么 ElasticSearch是目前开源全文搜索引擎的首选,可以快速存储,搜索和分析海量数据.Stack Overflow,Github等都在使用. Elas ...

  6. IEEP-OSPF域内路由故障-现象与排障思路

    OSPF域内路由故障-现象与排障思路 一.故障现象 OSPF的或内路由故障常表现为邻居路由器不通告部分或全部路由,可能的原因通常为: 1).拟通告的接口上未启用OSPF 2).拟通告的接口被关闭 OS ...

  7. Elasticsearch Java API 很全的整理

    Elasticsearch 的API 分为 REST Client API(http请求形式)以及 transportClient API两种.相比来说transportClient API效率更高, ...

  8. API 接口设计规范

    概述 这篇文章分享 API 接口设计规范,目的是提供给研发人员做参考. 规范是死的,人是活的,希望自己定的规范,不要被打脸. 路由命名规范 动作 前缀 备注 获取 get get{XXX} 获取 ge ...

  9. 干货来袭-整套完整安全的API接口解决方案

    在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...

随机推荐

  1. Flask高级

    关于Flask启动,和请求处理 #关于后端服务的启动,无非就是启动实现了WSGI协议的socket #关于flask启动的无非就是下面两段代码 #加载配置,创建Flask对象 app = Flask( ...

  2. [转帖]springboot+k8s+抛弃springcloud.eureka

    springboot+k8s+抛弃springcloud.eureka https://www.cnblogs.com/lori/p/12048743.html springboot开发微服务框架一般 ...

  3. c、c++ char*和wchar*互相转换

    1. 问题描述 编写程序时通常会面对一些不同的编码格式,如Unicode和multibytes.在有关字符串的处理时尤其重要,系统编程时通常会遇到很多这样的问题,例如把wchar*的字符串转换为cha ...

  4. Python的设计哲学--zen of Python

               Python的设计哲学--zen of Python Beautiful is better than ugly. 优美胜于丑陋 Explicit is better than ...

  5. web api与mvc的区别

    MVC主要用来构建网站,既关心数据也关心页面展示,而Web API只关注数据 Web API支持格式协商,客户端可以通过Accept header通知服务器期望的格式 Web API支持Self Ho ...

  6. input file 保存图片

    Request.File["控件名称"].FileName 文件名称(没有路径) Request.File["控件名称"].SaveAs("路径名称& ...

  7. 2019 多点Dmalljava面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.多点Dmall等公司offer,岗位是Java后端开发,因为发展原因最终选择去了多点Dmall,入职一年时间了 ...

  8. python数据分析三剑客之: matplotlib绘图模块

    matplotlib 一.Matplotlib基础知识 Matplotlib中的基本图表包括的元素 - x轴和y轴 axis 水平和垂直的轴线 - x轴和y轴刻度 tick 刻度标示坐标轴的分隔,包括 ...

  9. maven 学习---Maven中央存储库

    当你建立一个 Maven 的项目,Maven 会检查你的 pom.xml 文件,以确定哪些依赖下载. 首先,Maven 将从本地资源库获得 Maven 的本地资源库依赖资源, 如果没有找到,然后把它会 ...

  10. 使用gacutil把COM组件注册到全局缓存GAC中

    我们在编写软件的时候,有时候需要调用COM组件,那就需要注册了,注册有两种,一种是使用regasm 在程序运行的时候注册,参考“pb调用C#编写的DLL类库“,不过受路径的限制.还有一种注册方式,使用 ...