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

   

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

#查看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,或磁盘剩余空间限制等,需要调整相应的规则
  • 分配主分片时,由于找不到最新的分片数据,导致主分片未分配,这种要观察是否有节点离线,
     极端情况下只能手工将旧的副本分片修改为主分片,但这会导致丢失一些新入库的数据。

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

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. __attribute__((format(printf, a, b)))

    最近,在看libevent源码,第一次看到__attribute__((format(printf, a, b)))这种写法.因此,在这里记录下用法. 功能:__attribute__ format属 ...

  2. macrotask与microtask

    在说明宏任务及微任务前总结一下事件循环机制(event loop): 首先判断JS是同步还是异步,同步就进入主线程,异步就进入event table 异步任务在event table中注册函数,当满足 ...

  3. 『optimization 动态规划』

    optimization Description \(visit\_world\) 发现有些优化问题可以用很平凡的技巧解决,所以他给你分享了这样一道题: 现在有一个长度为N的整数序列\(\{a_i\} ...

  4. kvm虚拟机的克隆

    kvm虚拟机的克隆分为两种情况 (1) KVM主机本机虚拟机直接克隆. (2) 通过复制配置文件与磁盘文件的虚拟机复制克隆(适用于异机的静态迁移). 1.  本机虚拟机直接克隆 (1) 查看虚拟机配置 ...

  5. python正确使用异常处理机制

    一.不要过度使用异常 不可否认,Python 的异常机制确实方便,但滥用异常机制也会带来一些负面影响.过度使用异常主要表现在两个方面: 把异常和普通错误混淆在一起,不再编写任何错误处理代码,而是以简单 ...

  6. 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!

    原文地址 迁移到:http://www.bdata-cap.com/newsinfo/1741515.html 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和f ...

  7. 设计模式之(八)组合模式(COMPOSITE)

    初始印象 在开发中存在很多整体和部分的关系,这个方式最大的体现就是树形结构.组合模式就是为了更好地解决这类业务场景的问题.先看下组合模式的定义: 将对象组合成树形结构以表示“整体—部分”的层次关系.组 ...

  8. python中for循环里去修改列表注意的事项

    你的微信好友当中有 5 个推销的,他们存在一个列表 # black_list=['卖茶叶', '卖面膜', '卖保险', '卖花生', '卖手机'] # 当中, 请把这 5 个人分别从 black_l ...

  9. mysql官网下载对应的mysql包

    1.  在百度搜索mysql,点击mysql官网上下载mysql的地址 在url直接输入mysql的下载地址也可以:https://dev.mysql.com/downloads/mysql/ 如图: ...

  10. linux软连接和硬链接(总结)

    参考博客: https://www.cnblogs.com/fengdejiyixx/p/10821820.html https://www.runoob.com/linux/linux-comm-l ...