【ES】ElasticSearch 集群

ES(ElasticSearch)集群基础知识02


集群结构

节点:

一个运行中的 Elasticsearch 实例称为一个 节点

 

集群:

是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力

当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。

 

单节点集群:

仅启动一个单独的节点,构成一个单节点集群

 

空节点集群:

集群中至于一个节点,且里面没有任何数据和索引

 

上图只有一个节点,节点内没有数据和索引

上图有一个节点,但是节点内有一个索引(3个主分片)

 

主节点:

被选中用来管理集群内所有变更(索引的增加、删除,节点的增加删除)的节点。

主节点不需要涉及文档级别的变更和搜索等操作。所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。

请求可以发送到集群中的任何节点(含主节点)每个节点都知道任意文档存储的位置,能够将我们的请求直接转发到存储我们所需文档的节点

 

启动多个节点

启动单个节点方式一致。

统一机器:只要cluster.name 配置相同就可以自动识别加入集群并平衡资源

不同机器:需要配置单播主机列表

 

分片与索引

分片:

ES的底层物理工作单元,数据存储的容器,全部数据可以有多个分片存储。

一个分片是一个 Lucene 的实例,以及它本身就是一个完整的搜索引擎

分片是一个功能完整的搜索引擎,它拥有使用一个节点上的所有资源的能力

应用程序通过索引与其间接打交道

 

索引:

保存相关数据的地方,当需要添加数据时会用到。

本质为物理分片的逻辑命名空间

应用程序直接与其打交道

 

主分片:

主分片简单解释为已存储文档的源,索引内任意文档都属于某一个主分片。

主分片个数决定了索引能够保存的文档最大数,而单个主分片能够保存的最大文档数由Integer.MAX_VALUE - 128 决定,具体值需要参考使用场景。

 

副分片:

副分片是主分片的一个拷贝,用于数据容灾以及平衡负载,可提供搜索和返回文档等读操作的服务。

一般情况下副分片的个数要比主分片多(倍数增加),个别情况(集群亚健康yellow)下存在部分主分片无副分片的情形。

当主分片故障后,副分片可以转换成主分片(因此主分片副分片无本质的差异)

上图一个集群3个节点,6个分片(3主3副)

 

创建索引与分片设定:

在索引建立的时候就已经确定了主分片数(默认5个主分片),但是副本分片数可以随时修改。

让我们在包含一个空节点的集群内创建名为 blogs 的索引。我们将分配3个主分片和一份副本(每个主分片拥有一个副本分片):

PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}

 


集群健康状态

Elasticsearch 的集群监控信息中包含了许多的统计数据,其中最为重要的一项就是集群健康

它在 status 字段中展示为 green 、 yellow 或者 red 

查看方式:

GET /_cluster/health

返回如下:

{
   "cluster_name":          "elasticsearch",
   "status":                "green",
   "timed_out":             false,
   "number_of_nodes":       1,
   "number_of_data_nodes":  1,
   "active_primary_shards": 0,
   "active_shards":         0,
   "relocating_shards":     0,
   "initializing_shards":   0,
   "unassigned_shards":     0
}

Green

所有的主分片和副本分片都正常运行。

Yellow

所有的主分片都正常运行,但不是所有的副本分片都正常运行。

Red

有主分片没能正常运行。


集群扩容与容灾

扩容方式:

垂直扩容:通过提升性能的扩容方式

水平扩容:通过增加更多的设备扩容方式

真正的扩容能力:水平扩容,而ES天生分布式的可以有效的支持水平扩容

 

水平扩容:

单一节点的状态,3个分片

{
  "cluster_name": "elasticsearch",
  "status": "yellow",
  "timed_out": false,
  "number_of_nodes": 1,
  "number_of_data_nodes": 1,
  "active_primary_shards": 3,
  "active_shards": 3,
  "relocating_shards": 0,
  "initializing_shards": 0,
  "unassigned_shards": 3,
  "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": 50
}

unassigned_shards:没有被分配到任何节点的副本数。

启动第二个节点后的状态,6个分片

{
  "cluster_name": "elasticsearch",
  "status": "green",
  "timed_out": false,
  "number_of_nodes": 2,
  "number_of_data_nodes": 2,
  "active_primary_shards": 3,
  "active_shards": 6,
  "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
}

启动三个节点的状态,6个分片

 

增加副本扩容

PUT /blogs/_settings
{
   "number_of_replicas" : 2
}

两倍副本扩容后状态,9个分片

 

故障容灾

删除一个主节点后,重新分配主节点node2,以及副分片转换成主分片(R1->P1,R2->P2)

 


参考链接

猜你喜欢

转载自blog.csdn.net/JasonZhu_csdn/article/details/84568535