一、ES集群健康状态API(health)¶
1、安装jq工具
yum -y install epel-release
yum -y install jq
2、测试取数据
(1)取全部数据
[root@elk121 ~]# curl http://192.168.1.123:9200/_cluster/health 2>/dev/null| jq
{
"cluster_name": "es",
"status": "green",
"timed_out": false,
"number_of_nodes": 3,
"number_of_data_nodes": 3,
"active_primary_shards": 41,
"active_shards": 67,
"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
}
相关数据说明:
<colgroup> <col style="width: 50%" /> <col style="width: 50%" /> </colgroup>| 参数 | 参数说明 |
|---|---|
| cluster_name | 集群的名称 |
| status | 集群的健康状态,基于其主分片和副本分片的状态。 (1)Green:所有分片都已分配。 (2)Yellow:所有主分片都已分配,但一个或多个副本分片未分配。如果集群中的某个节点发生故障,则在修复该节点之前,某些数据可能不可用。 (3)Red:一个或多个主分片未分配,因此某些数据不可用。这可能会在集群启动期间短暂发生,因为分配了主分片。 |
| timed_out | 是否在参数false指定的时间段内返回响应(默认情况下30秒) |
| number_of_nodes | 集群内的节点数 |
| number_of_data_nodes | 作为专用数据节点的节点数 |
| active_primary_shards | 可用主分片的数量 |
| active_shards | 可用主分片和副本分片的总数 |
| relocating_shards | 正在重定位的分片数 |
| initializing_shards | 正在初始化的分片数 |
| unassigned_shards | 未分配的分片数 |
| delayed_unassigned_shards | 分配因超时设置而延迟的分片数 |
| number_of_pending_tasks | 尚未执行的集群级别更改的数量 |
| number_of_in_flight_fetch | 未完成的提取次数 |
| task_max_waiting_in_queue_millis | 自最早启动的任务等待执行以来的时间(以毫秒为单位) |
| active_shards_percent_as_number | 集群中活动分片的比率,以百分比表示 |
(2)取status数据
[root@elk121 ~]# curl http://192.168.1.123:9200/_cluster/health 2>/dev/null| jq .status
"green"
(3)取active_shards_percent_as_number数据
[root@elk121 ~]# curl http://192.168.1.123:9200/_cluster/health 2>/dev/null| jq .active_shards_percent_as_number
100
二、ES集群的设置及优先级(settings)¶
参考链接:
(1)https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-get-settings.html
(2)https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-update-settings.html
2.1 查看ES集群的默认设置¶
填写GET请求http://192.168.1.123:9200/_cluster/settings?include_defaults=true,查看ES集群的默认设置

2.2 修改ES集群的设置¶
1、填写PUT请求http://192.168.1.123:9200/_cluster/settings,修改ES集群的设置为不允许分配任何类型的分配
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
相关参数说明:
| "cluster.routing.allocation.enable"参数 | 参数说明 |
|---|---|
| all | 允许所有分片类型进行分配 |
| primaries | 仅允许分配主分片 |
| new_primaries | 仅允许新创建索引分配主分片 |
| none | 不允许分配任何类型的分配 |

2、再次查看ES集群的默认设置,观察到已经修改

三、ES集群状态API(state)¶
集群状态是一种内部数据结构,它跟踪每个节点所需的各种信息,包括:
(1)集群中其他节点的身份和属性
(2)集群范围的设置
(3)索引元数据,包括每个索引的映射和设置
(4)集群中每个分片副本的位置和状态
参考链接:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-state.html
3.1 查看集群的状态信息¶
1、填写GET请求http://192.168.1.123:9200/_cluster/state, 查看集群的状态信息

3.2 只查看节点信息¶
1、填写GET请求http://192.168.1.123:9200/_cluster/state/nodes, 查看集群的节点信息

3.3 查看nodes,version,routing_table这些信息,并且查看以”es*”开头的所有索引¶
1、填写GET请求http://192.168.1.123:9200/_cluster/state/nodes,version,routing_table/es*, 查看集群的节点信息

四、ES集群统计API(stats)¶
参考链接:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-allocation-explain.html
Cluster Stats API 允许从集群范围的角度检索统计信息。返回基本索引指标(分片数量、存储大小、内存使用情况)和有关构成集群的当前节点的信息(数量、角色、操作系统、jvm 版本、内存使用情况、cpu 和已安装的插件)。
填写GET请求http://192.168.1.123:9200/_cluster/stats, 查看集群的统计信息

五、查看集群的分片分配情况(allocation)¶
5.1 查看集群的分片分配情况¶
填写GET请求http://192.168.1.123:9200/_cluster/allocation/explain, 查看集群分片分配的情况
{
"index": "teacher",
"shard": 0,
"primary": true
}

5.2 分析集群的分片未分配原因¶
1、填写PUT请求http://192.168.1.123:9200/_cluster/settings,修改ES集群的设置为不允许分配任何类型的分配
{
"transient": {
"cluster.routing.allocation.enable": "none"
}
}
相关参数说明:
| "cluster.routing.allocation.enable"参数 | 参数说明 |
|---|---|
| all | 允许所有分片类型进行分配 |
| primaries | 仅允许分配主分片 |
| new_primaries | 仅允许新创建索引分配主分片 |
| none | 不允许分配任何类型的分配 |

2、再次查看ES集群的默认设置,观察到已经修改

3、填写PUT请求192.168.1.121:9200/teacher, 创建索引teacher。观察到一直处于请求中

默认等待30s后,反馈结果:分片创建失败

4、填写GET请求http://192.168.1.123:9200/_cluster/allocation/explain, 分析teacher索引的0号分片未分配的原因。观察到显示无法分配,因为任何节点都不允许分配
{
"index": "teacher",
"shard": 0,
"primary": true
}

六、集群分片重路由API(reroute)¶
参考链接:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-reroute.html
reroute 命令允许手动更改集群中各个分片的分配。
例如,可以将分片从一个节点显式移动到另一个节点,可以取消分配,并且可以将未分配的分片显式分配给特定节点。
6.1 分片移动到别的节点¶
将”teacher” 索引的0号分片从elk121节点移动到elk122节点。下图是原本环境:

1、填写POST请求http://192.168.1.123:9200/_cluster/reroute, 将”teacher” 索引的0号分片从elk121节点移动到elk122节点。
{
"commands": [
{
"move": {
"index": "teacher",
"shard": 0,
"from_node": "elk121",
"to_node": "elk122"
}
}
]
}

2、打开ES Head扩展程序查看结果,”teacher” 索引的0号分片从elk121节点移动到elk122节点。

6.2 副本分片重新初始化分配¶
将elk122节点的”teacher” 索引的0号副本分片进行重新初始化分配,下图是原本环境:

1、填写POST请求http://192.168.1.123:9200/_cluster/reroute, 将elk122节点的”teacher” 索引的0号副本分片进行初始化分配
{
"commands": [
{
"cancel": {
"index": "teacher",
"shard": 0,
"node": "elk122"
}
}
]
}

2、打开ES Head扩展程序查看结果,elk122节点的”teacher” 索引的0号副本分片完成进行初始化分配
