本文翻译自Elasticsearch官方指南的life
inside a cluster
一章。

ES就是为高可用和可扩展而生的。

扩展能够通过购置性能更强的server(垂直扩展或者向上扩展,Vertical Scale/Scaling Up),亦或是通过购置很多其它的server(水平扩展或者向外扩展,Horizontal Scale/Scaling Out)来完毕。

虽然ES可以利用更强劲的硬件。垂直扩展毕竟还是有它的极限。真正的可扩展性来自于水平扩展 - 通过向集群中加入很多其它的节点来分布负载,添加可靠性。

在大多数数据库中,水平扩展通常都须要你相应用进行一次大的重构来利用很多其它的节点。相反。ES天生就是分布式的:它知道怎样管理多个节点来完毕扩展和实现高可用性。

这也意味着你的应用不须要在乎这一点。

在本章中,我们会介绍怎样建立集群(Cluster),节点(Node)和分片(Shard)来依据你的需求完毕扩展,同一时候也可以保证即使发生硬件故障你的数据也会安然无恙。

一个空的集群

假设我们启动了一个没有不论什么数据和索引的节点(Node),我们的集群(Cluster)看起来就像以下这样:

一个节点会执行一个ES的实例。而一个集群则会包括拥有同样cluster.name的一个或者多个节点。这些节点共同工作来完毕数据共享和负载分担。

随着节点被加入到集群,或者从集群中被删除,集群会通过自身调节来将数据均匀分布。

集群中的一个节点会被选为主节点(Master Node)。它负责管理整个集群的变化。如创建或者删除一个索引(Index)。向集群中加入或者删除节点。主节点并不须要參与到文档级别的变化或者搜索中,这意味着尽管仅仅有一个主节点,但它并不会随着流量的添加而成为瓶颈。

不论什么节点都能够成为主节点。

在我们的样例中仅仅有一个节点,所以它就承担了主节点的功能。

对于用户,可以和集群中的随意节点进行通信,包含主节点。每一个节点都知道每份文档的存放位置,而且可以将请求转发到持有所需数据的节点。

用户通信的节点会负责将须要的数据从各个节点收集起来,然后返回给用户。以上整个过程都会由ES透明地进行管理。

集群健康指标(Cluster Health)

在一个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个副本分片眼下都处于"未分配"的状态 - 它们不存在于不论什么节点上。这是由于将同样数据的拷贝存放在同一节点上是没有意义的。

假设我们失去了该节点。那么我们会失去全部数据和它们的拷贝。

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

[Elasticsearch] 集群的工作原理 - 第一部分的更多相关文章

  1. Elasticsearch从入门到精通之Elasticsearch集群内的原理

    上一章节我介绍了Elasticsearch安装与运行,本章节及后续章节将全方位介绍 Elasticsearch 的工作原理 在这个章节中,我将会再进一步介绍 cluster . node . shar ...

  2. Elasticsearch集群内的原理

        一个运行中的 Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力.当有节点加入集群中或者从 ...

  3. LVS集群之工作原理和调度算法(2)

      LVS的工作机制 LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默 ...

  4. 剖析Elasticsearch集群系列第一篇 Elasticsearch的存储模型和读写操作

    剖析Elasticsearch集群系列涵盖了当今最流行的分布式搜索引擎Elasticsearch的底层架构和原型实例. 本文是这个系列的第一篇,在本文中,我们将讨论的Elasticsearch的底层存 ...

  5. 翻译【ElasticSearch Server】第一章:开始使用ElasticSearch集群(5)

    数据操作与REST API(Data manipulation with REST API) ElasticSearch REST API可用于各种任务.多亏了它,我们可以管理索引,更改实例参数,检查 ...

  6. 腾讯云Elasticsearch集群规划及性能优化实践

    ​一.引言 随着腾讯云 Elasticsearch 云产品功能越来越丰富,ES 用户越来越多,云上的集群规模也越来越大.我们在日常运维工作中也经常会遇到一些由于前期集群规划不到位,导致后期业务增长集群 ...

  7. ES2:ElasticSearch 集群配置

    ElasticSearch共有两个配置文件,都位于config目录下,分别是elasticsearch.yml和logging.yml,其中,elasticsearch.yml 用来配置Elastic ...

  8. [译]使用explain API摆脱ElasticSearch集群RED苦恼(转)

    "哔...哔...哗",PagerDuty的报警通知又来了. 可能是因为你又遭遇了节点宕机, 或者服务器机架不可用, 或者整个ElasticSearch集群重启了. 不管哪种情况, ...

  9. Elasticsearch 集群和索引健康状态及常见错误说明

    之前在IDC机房线上环境部署了一套ELK日志集中分析系统, 这里简单总结下ELK中Elasticsearch健康状态相关问题, Elasticsearch的索引状态和集群状态传达着不同的意思. 一.  ...

随机推荐

  1. Jax

    The scope of this project is to automate the current Credit Correction process of opening, editing, ...

  2. Spring-Aop的两种代理方式

    Spring-Aop两种代理方式: 1.JDK动态代理:用于目标类实现了接口: 2.Cglib动态代理:用于目标类没有实现接口: spring会依据目标类是否实现接口来选择使用哪种代理方式(目标类:相 ...

  3. Scala-基础-函数(1)

    import junit.framework.TestCase //函数(1) class Demo5 extends TestCase { def testDemo(){ println(" ...

  4. WordPress主题reBorn最新破解版发布

    今天上班的时候,没事浏览网页! 突然之间发现了这么一个标题,顿时让我产生了兴趣. 标题:WordPress主题reBorn最新破解版发布 不知道什么原因,现在原网址打不开了,可能是作者怕骚扰吧. 其实 ...

  5. Python代码搜索并下载酷狗音乐

    运行环境: Python3.5+Pycharm 实例代码: import requests,re keyword = input("请输入想要听的歌曲:") url = " ...

  6. Jmeter接口测试---webservices

    Jmeter与LR相比来说,测试webservices接口要简单很多. 下面说下具体的操作流程: 1.创建一个线程组 2.创建一个soap/xml请求 3.填写要进行测试webservice的请求内容 ...

  7. 安装ipython notebook及基本命令(快捷键)

    转载自:http://121.42.47.99/yuenshome/wordpress/?p=2622 目前基本上是Pycharm和ipython notebook结合起来做东西,ipython no ...

  8. CNN结构:可用于时序预测复合的DNN结构-AcGANs、误差编码网络 ENN

    前言:模式识别问题 模式函数是一个从问题定义域到模式值域的一个单射. 从简单的贝叶斯方法,到只能支持二分类的原始支持向量机,到十几个类的分类上最好用的随机森林方法,到可以支持ImageNet上海量18 ...

  9. jquery onclick 问题

    var str = ''; for(var i = 0;i<data.list.length;i++){ str += "<tr><td>" + (i ...

  10. Django - 自定义simple_tag

    使用现有函数: 通过对传入的参数,后面跟一个管道符号+python函数,来完成对传入参数的修改. 返回值 自定义simple_tag: 具体操作步骤如下: 1.在某个app下,创建目录template ...