本文翻译自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. CSS垂直居中和水平居中的几种方法

    垂直居中 方法一 这个方法把div 的显示方式设置为表格,因此我们可以使用表格的 vertical-align属性. <!DOCTYPE html> <html lang=" ...

  2. 关于百度地图导航AndroidSDK的初始化问题

    使用百度地图有一段时间了,导航是一个一直困扰我的问题.今天刚发现百度地图的导航SDK并不是对Android6.0版本不兼容.而是对某一部分手机不兼容,准确的说是对X64或X86的cpu不兼容.下载百度 ...

  3. 15年第六届蓝桥杯第七题_(string)

    手链样式 小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙.他想用它们串成一圈作为手链,送给女朋友.现在小明想知道:如果考虑手链可以随意转动或翻转,一共可以有多少不同的组合样式呢? 请你提交该整数.不要填写任 ...

  4. vsCode scss安装

    点击在settings.json中编辑写入代码: { /** Easy Sass 插件 **/ "easysass.formats": [ { "format" ...

  5. Linux kernel memory-faq.txt

    ## Linux kernel memory-faq.txt What is some existing documentation on Linux memory management? Ulric ...

  6. 数列分块入门1-9 By hzwer

    声明 持续更新,因为博主也是正在学习分块的知识,我很菜的,菜的抠$jio$ 写在前面 分块是个很暴力的算法,但却比暴力优秀的多,分块算法的时间复杂度一般是根号的,他的主要思想是将一个长度是$n$的数列 ...

  7. 60.通过应用层join实现用户与博客的关联

    在构造数据模型的时候,将有关联关系的数据分割为不同的实体,类似于关系型数据库中的模型. 案例背景:博客网站,一个网站可能有多个用户,一个用户会发多篇博客,此时最好的方式是建立users和blogs两个 ...

  8. ubuntu tomcat自启动

    1 编写启动文件/etc/init.d/tomcat7 文件内容如下:

  9. MAC上postman离线安装时提示加载扩展程序出错怎么办?

    目前的postman插件如果想正常使用,必须安装Postman Interceptor插件,这样才能直接使用chrome浏览器的cookie等信息,否则postman是无法完成老版本的功能的.post ...

  10. 18年多校-1002 Balanced Sequence

    >>点击进入原题测试<< 思路:自己写没写出来,想不通该怎么排序好,看了杜神代码后补题A掉的.重新理解了一下优先队列中重载小于号的含义,这里记录一下这种排序方式. #inclu ...