目录

Elasticsearch集群管理

概述

本文主要讲解一下通过 API 管理 Elasticsearch 集群的一些信息。

集群健康值

查看集群健康 API 的简单情况。

1
curl -XGET http://10.25.145.119:8581/_cluster/health?pretty

返回结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
  "cluster_name" : "test-es",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 8,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 1,
  "active_shards" : 1,
  "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
}

查看指定索引的健康情况:

1
curl -XGET http://10.25.145.119:8581/_cluster/health/pi_document_content_v2?pretty

返回结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
{
  "cluster_name" : "test-es",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 8,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 1,
  "active_shards" : 1,
  "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
}

集群状态

可以查看整个集群的综合状态信息。

1
curl -XGET http://10.25.145.119:8581/_cluster/state?pretty

集群统计

注意跟上述 API 有所区别,集群统计信息可以通过 API_cluster/stats,返回两个最基本的信息,一个是索引信息,比如分片的数量、存储大小、内存使用等。另一个是集群节点的信息,比如节点数量、角色、操作系统、JVM 版本、内存使用率、CPU、和插件的安装信息。

1
curl -XGET http://10.25.145.119:8581/_cluster/stats?pretty

节点信息

集群节点信息接口用于搜索一个或多个集群节点信息。

1
curl -XGET http://10.25.145.119:8581/_nodes?pretty

集群分片迁移

在 ES 中可以通过集群路由 API_cluster/reroute 来对集群中的分片进行曹组 ,例如可以在集群中把一个分片从一个节点迁移到另一个节点,把未分配的分片可以分配到一个特定的节点上等。

集群节点配置

启动 ES 实例,就会启动至少一个节点,相同集群名的多个节点的连接就组成一个集群,在默认情况下,集群中的每个节点都可以处理 HTTP 请求和集群节点的数据传输。集群中所有的节点都知道集群中其他所有的节点,可以把客户端请求转发到适当的节点。节点分为以下类型:

  1. 主节点 master:在上一个节点上当 node.master 设置为 true 的时候,他有资格被选作为主节点,控制整个集群。
  2. 数据节点 data:在一个节点 node.data 设置为 true 的时候,该节点保存数据和执行数据相关操作,如增删改查、搜索或聚合。
  3. 客户端节点:当一个节点的 node.master 和 node.data 都设置为 false 的时候,既不是主节点也不能称为客户端节点。
  4. 部落节点:当一个节点配置 tribe.* 的时候,它是一个特殊的客户端,可以连接多个集群,在所有连接的集群上执行搜索和其他操作。

主节点

主节点的主要职责是和集群操作相关的内容,如创建和删除索引,跟踪那些节点是集群的一部分,并决定哪些分片分配给相关节点。稳定的主节点对集群的健康是非常重要的。

索引数据和搜索查询等操作会占用大量 CPU、内存、IO 资源,为确保一个集群的稳定,分离主节点和数据节点是比价好的一个选择。

数据节点

数据节点主要是存储索引数据的节点,主要对文档进行增删改查、聚合操作等。数据节点对 CPU、内存、IO 要求比较高,在优化的时候需要监控数据节点的状态。

节点发现

在 ES 中,节点之间可以进行相互发现,并把相同集群名称的节点统一成一个集群。

主节点选举

在集群中系统会自动通过 ping 来进行选举主节点或者加入主节点,这些都是自动完成的。

故障检测

有两种方式进行故障检测,第一个是由主节点到其他节点的验证,证明它们还活着。另一种是每个节点 ping 主节点验证,当主节点有故障的时候会启动选举过程。

警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。