文章目录

  • 一、扩容机制
  • 二、空集群
  • 三、集群健康
  • 四、分片(shard)
  • 五、水平扩容
  • 六、故障处理

一、扩容机制

Elasticsearch的主旨是随时可用和按需扩容,扩容可以分为以下两种:

  • 纵向扩容(垂直扩容):更换性能更强大的服务器。
  • 横向扩容(水平扩容):增加服务器的数量。

理论上来讲,纵向扩容是有极限的,真正的扩容能力是来自于水平扩容,即为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中,数据的备份也分散在各个节点,在硬件故障时可以有效防止数据丢失。

二、空集群

启动了一个单独的节点,里面不包含任何的数据和索引,集群状态如下图:

一个运行中的 Elasticsearch 实例称为一个 节点,集群是由一个或者多个拥有相同 cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分配所有的数据。
当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。 而主节点并不涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。 任何节点都可以成为主节点,当只有一个节点时,那么它同时也成为了主节点。
我们可以将请求发送到 集群中的任何节点 ,包括主节点。 每个节点都知道任意文档所处的位置,并且能够将查询请求转发到相应的存储节点。 无论我们将请求发送到哪个节点,它都能从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。

三、集群健康

Elasticsearch 的集群监控信息中包含了许多的统计数据,其中最为重要的一项就是集群健康 , 它在 status 字段中展示为 green 、 yellow 或者 red 。可以通过下面的方式获取集群健康状况:

GET /_cluster/health

返回结果:

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

status 字段表示当前集群在总体上是否工作正常。它的三种颜色含义如下:

  • green:所有的主分片和副本分片都正常运行。
  • yellow:所有的主分片都正常运行,但不是所有的副本分片都正常运行。
  • red:有主分片没能正常运行。

四、分片(shard)

添加数据时需要用到索引 , 索引实际上是指向一个或者多个物理分片的逻辑命名空间 。一个分片是一个底层的工作单元 ,它仅保存了全部数据中的一部分。一个分片是一个 Lucene 的实例,它本身就是一个完整的搜索引擎。 文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。
Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。 当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。
一个分片可以是主分片或者副本分片,索引内任意一个文档都归属于一个主分片,副本分片只是主分片的拷贝,所以主分片的数目决定着索引能够保存的最大数据量。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。
在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改 :

//分配3个主分片和一份副本(每个主分片拥有一个副本分片)
PUT /users
{"settings" : {"number_of_shards" : 3,"number_of_replicas" : 1}
}

修改副本分片按照如下方式:

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

拥有一个索引的单节点集群,索引有3个主分片,如下图所示:

如果我们现在查看集群健康,集群的健康状况仍为 yellow ,表示全部 主分片都正常运行(集群可以正常服务所有请求),但是副本分片没有全部处在正常状态。 这是因为目前是单节点导致索引的3个副本分片未分配(unassigned )—— 它们都没有被分配到任何节点。 在同一个节点上既保存原始数据又保存副本是没有意义的,因为一旦失去了那个节点,我们也将丢失该节点上的所有副本数据。再启动一个节点即可防止数据丢失,在上图的基础上添加一个节点如下图(所有主分片和副本分片都已被分配):

当第二个节点加入到集群后,3个 副本分片 将会分配到这个节点上——每个主分片对应一个副本分片。这意味着当集群内任何一个节点出现问题时,我们的数据都完好无损。

所有新近被索引的文档都将会保存在主分片上,然后被并行的复制到对应的副本分片上,这就保证了我们既可以从主分片又可以从副本分片上获得文档。

cluster-health 现在展示的状态为 green ,这表示所有6个分片(包括3个主分片和3个副本分片)都在正常运行。

五、水平扩容

上一小节表示的集群状况:有两个节点,集群内部只有一个索引,索引的主分片为3,每个主分片有一个副本分片。此时我们再增加一个节点,集群可能看起来如下图所示:

因为新增了一个节点,此时主节点将会迁移分片,保证每个节点上的分片数量均衡。现在每个节点上都拥有2个分片,而不是之前的3个。 这表示每个节点的硬件资源(CPU, RAM, I/O)将被更少的分片所共享,每个分片的性能将会得到提升。

分片是一个功能完整的搜索引擎,它拥有使用一个节点上的所有资源的能力。 我们这个拥有6个分片(3个主分片和3个副本分片)的索引可以最大扩容到6个节点,每个节点上存在一个分片,并且每个分片拥有所在节点的全部资源。

读操作(搜索和返回数据)可以同时被主分片或副本分片处理,所以当拥有越多的副本分片时,也将拥有越高的吞吐量。虽然主分片的数量在索引创建的时候已经指定,但是副本分片的数量是可以动态修改的(上一小节已经说过如何修改),这意味着我们可以通过增加/减少副本分片的方式来按需伸缩集群。

注意:提高性能的前提是增加副本分片的同时也需要增加更多的服务器节点,这样才能保证每个分片可获取的硬件资源得到提升。

六、故障处理


集群必须拥有一个主节点来保证正常工作,如上图所示,主节点NODE 1挂掉之后发生的第一件事情就是选取新的主节点,假如此时NODE 2被选为新的主节点,由于NODE 1上的两个主分片拥有副本分片,所以新的主节点NODE 2立即将这些分片在 Node 2 和 Node 3 上对应的副本分片提升为主分片,此时集群就又可以正常工作了。如果后来的某个时间点NODE 1恢复了,那么主节点将再次进行分片的重新分配工作,保证每个节点上拥有均衡的数据,并且如果NODE 1仍然拥有着之前的分片,那么将尝试去重用它们,同时仅从主分片复制发生了修改的数据文件。

Elasticsearch集群原理相关推荐

  1. Elasticsearch集群原理、安装和基本使用

    Elasticsearch(ES)是一个基于Lucene构件的开源.分布式.RESTful接口全文搜索引擎.ES还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的 ...

  2. ElasticSearch集群

    5. ElasticSearch集群 5.1 ElasticSearch集群原理 集群内的原理 | Elasticsearch: 权威指南 | Elastic elasticsearch 是天生支持集 ...

  3. ElasticSearch集群架构原理

    一.  Elasticsearch架构原理 1.Elasticsearch的节点类型 在Elasticsearch主要分成两类节点,一类是Master(主节点),一类是DataNode(数据节点),还 ...

  4. elasticsearch集群介绍及数据存储过程原理

    elasticsearch集群介绍原理 Elasticsearch集群架构介绍 集群架构介绍 节点介绍 Elasticsearch集群搭建 Elasticsearch分片介绍 主分片 复制分片 Ela ...

  5. ELK教程1:ElasticSearch集群的部署

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 在分布式系统中,应用数量众多,应用调用链复杂,常常使用ELK作为日志收集.分析和展示的组件.本 ...

  6. 完美避坑!记一次Elasticsearch集群迁移架构实战

    作者介绍 李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch,对Elastic-Stack开发.架构.运维等方面有深入体验,实践 ...

  7. 剖析Elasticsearch集群系列第二篇 分布式的三个C、translog和Lucene段

    http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part02?utm_source=infoq&utm ...

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

    http://www.infoq.com/cn/articles/analysis-of-elasticsearch-cluster-part01?utm_source=infoq&utm_c ...

  9. 从400+节点ElasticSearch集群的运维中,我们总结了这些经验

    墨墨导读:国外一家舆情监控公司Meltwater每天处理的数据非常庞大--在高峰期需要索引大约300多万社论文章,和近1亿条社交帖子数据.其中社论数据长期保存以供检索(可回溯到2009年),社交帖子数 ...

最新文章

  1. [转载] 马化腾-“杀人的网络,互联网的大是大非问题”专访腾讯董事会主席兼CEO马化腾...
  2. 典型案例 3:十分钟搭建弹性可扩展的 Web API
  3. java ssm 系统的搭建_SSM框架下的javaweb学生管理系统--搭建系统结构
  4. 如何选用NAS、OSS和EBS
  5. TiKV 正式从 CNCF 毕业,成为云原生时代构建分布式系统的基石
  6. 拓端tecdat|R语言在RCT中调整基线时对错误指定的稳健性
  7. 集合数组集合ArrayList
  8. linux空磁盘划分,Linux 磁盘划分
  9. 如何配置微信公众号卡密回复?
  10. SAP 查询分析器的实现的3种方法
  11. 计算机联机玩游戏的操作方法,3种建立局域网的方式,不用网也可以联机玩游戏-局域网设置...
  12. System32/SysWow64
  13. 眼花缭乱的家电市场,我们到底需要一台什么样的电视?
  14. 如何申请一个微信订阅号
  15. Rxswift学习之(一)函数响应式编程思想
  16. webStrom2018 版 下载 安装,license server破解 IntelliJ IDEA
  17. 华为视频终端默认的Web页面用户名和密码是多少
  18. 小虫电商,你永远学不会!
  19. 迅为iMX6ULL开发板-创建 ap 热点
  20. php给图片添加文字水印

热门文章

  1. thinkadmin中日期的使用
  2. 深入浅出监控神器Prometheus
  3. 用m ip衡量的计算机性能指标是,ip网络技术要求网络性能参数与指标.pdf.pdf
  4. 在企业访客管理中引入人脸识别系统有哪些应用?
  5. Android初学之十二:Broadcast
  6. 视频教程-【吴刚大讲堂】电商品牌文案设计方法-电子商务
  7. 基于翻译模型(Trans系列)的知识表示学习
  8. 获取星期--蔡勒公式
  9. PTA L1-039 python实现
  10. CSS控制print打印样式