一、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

集群的健康状态,基于其主分片和副本分片的状态。
ES集群有以下三种状态:

(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号副本分片完成进行初始化分配