Elasticsearch 集群原理(一)

本文来自:[Elasticsearch] 集群的工作原理 - 第一部分
一、什么是ES的集群

由一个或多个相同cluster.name的节点组成,共同承担数据和负载的压力。随着节点被添加到集群,或者从集群中被删除,集群会通过自身调节来将数据均匀分布。

集群中的一个节点会被选为主节点(Master Node),它负责管理整个集群的变化,如创建或者删除一个索引(Index),向集群中添加或者删除节点。主节点并不需要参与到文档级别的变化或者搜索中,这意味着虽然只有一个主节点,但它并不会随着流量的增加而成为瓶颈。任何节点都可以成为主节点。

对于用户,可以和集群中的任意节点进行通信,包括主节点。每个节点都知道每份文档的存放位置,并且能够将请求转发到持有所需数据的节点。用户通信的节点会负责将需要的数据从各个节点收集起来,然后返回给用户。以上整个过程都会由ES透明地进行管理。

二、集群健康指标
在一个ES集群中,有很多可以被监测的统计数据,但是其中最重要的是集群健康指标,它会以green,yellow和red来报告集群的健康状态。

# Retrieve the cluster health
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
}

status字段提供的值反应了集群整体的健康程度。它的值的意义如下:

  • green:所有的主分片(Primary Shard)和副本分片(Replica Shard)都处于活动状态
  • yellow:所有的主分片都处于活动状态,但是并不是所有的副本分片都处于活跃状态
  • red:不是所有的主分片都处于活动状态

三、分片
为了向ES中添加数据,我们需要一个索引(Index) - 它是一个用来存储相关数据的地方。实际上,一个索引实际上只是一个”逻辑命名空间(Logical Namespace)”,用来指向一个或者多个物理分片(Physical Shard)。

一个分片就是底层的”工作单元(Worker Unit)”,它拥有索引中所有数据的一部分。一个分片就是一个Lucene的实例,一个分片本身就是一个完整的搜索引擎。我们的文档会被存储和索引在分片中,但是应用是不会直接和分片进行交互的。相反地,应用和索引进行交互。

ES通过分片将数据分布在集群中。可以将分片想象成数据的容器。文档会被存储在分片中,而分片则会被分配到集群中的节点中。随着集群的扩大和虽小,ES会自动地将分片在节点之间进行迁移,以保证集群能够保持一种平衡。

一个分片可以是主分片(Primary Shard)或者副本分片(Replica Shard)。索引中的每份文档都属于一个主分片,所以主分片的数量就决定了你的索引能够存储的最大数据量。

一个副本分片则只是一个主分片的拷贝。副本用来提供数据冗余,用来保护数据在发生硬件故障是不会丢失,同时也能够处理像搜索和获取文档这样的读请求。

主分片的数量在索引建立之初就会被确定下来,而副本分片的数量则可以在任何时候被更改。

让我们在当前只有一个节点的集群中创建一个新的blogs索引。默认情况下,索引会拥有5个主分片,但是为了演示,我们会让索引有3个主分片和1个副本分片(每个主分片都有1个副本分片):

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

此时我们的集群就变成这样了:
这里写图片描述
这个时候我们如果检查集群的健康状态,会得到如下的结果:

{
   "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 
}

集群的健康状态变成了黄色,同时响应中还说明了有3个未被分配的分片。

黄色说明了所有的主分片都正在正常运行,处于活动状态 - 集群现在能够成功处理来自外部的请求 - 但是并不是所有的副本分片都处于活动状态。实际上,所有的3个副本分片目前都处于”未分配”的状态 - 它们不存在于任何节点上。这是因为将相同数据的拷贝存放在同一节点上是没有意义的。如果我们失去了该节点,那么我们会失去所有数据和它们的拷贝。

因此当前我们的集群能够正常工作,只不过抵御不了硬件故障带来的风险。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Elasticsearch是一种开源的分布式搜索和分析引擎,它可以用于快速搜索、分析和存储大量的数据。Elasticsearch集群是由多个节点组成的,每个节点都可以存储和处理数据。以下是关于Elasticsearch集群的一些介绍和演示: 1. 集群原理Elasticsearch内置了一个名为ZenDiscovery的模块,用于节点发现和选主等功能。这意味着在启动Elasticsearch节点时,它们会自动加入集群,并通过选举机制选择一个主节点来协调集群操作。这使得构建和管理Elasticsearch集群变得非常简单,不需要额外的配置和第三方组件。 2. 单节点演示: 单节点是最简单的Elasticsearch集群配置,它只包含一个节点。以下是一个示例演示如何启动一个单节点的Elasticsearch集群: ```shell # 启动Elasticsearch节点 ./bin/elasticsearch ``` 在启动节点后,您可以使用Elasticsearch的REST API进行索引、搜索和其他操作。 3. 多节点演示: 多节点是更常见的Elasticsearch集群配置,它包含多个节点,可以提供更高的可用性和性能。以下是一个示例演示如何启动一个多节点的Elasticsearch集群: ```shell # 启动第一个节点 ./bin/elasticsearch # 启动其他节点,并指定第一个节点的地址 ./bin/elasticsearch -Ecluster.initial_master_nodes=node1 ``` 在启动所有节点后,它们会自动加入集群,并通过选举机制选择一个主节点来协调集群操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值