ES集群的基本概念

Cluster

代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的

Shards主分片

代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改,这里和索引分片的算法有关,因为是通过取模算法去判断分到哪,如果改变了 就无法正常查询之前的索引。

replicas分片副本

代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。

Recovery

代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

ES为什么要实现集群

ES集群中索引可能由多个分片构成,并且每个分片可以拥有多个副本。通过将一个单独的索引分为多个分片,我们可以处理不能在一个单一的服务器上面运行的大型索引,简单的说就是索引的大小过大,导致效率问题。不能运行的原因可能是内存也可能是存储。由于每个分片可以有多个副本,通过将副本分配到多个服务器,可以提高查询的负载能力。同时提高容错性和高可用性

ES集群核心原理分析

分片存储规则

1、每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储(需要注意的是es7.0默认索引分片数调整为1了

)。每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards.

注意:索引的主分片primary shards定义好后,后面不能做修改。  

2、为了实现高可用数据的高可用,主分片可以有对应的备分片replics shards,replic shards分片承载了负责容错、以及请求的负载均衡.

注意: 每一个主分片为了实现高可用,都会有自己对应的备分片,他们之间的关系可以是一对多,主分片对应的备分片不能存放同一台服务器上(单台ES没有备用分片的)。主分片primary shards可以和其他replics shards存放在同一个node节点上。

在往主分片服务器存放数据时候,会对应实时同步到备用分片服务器,但是查询时候,所有(主、备)都进行查询:

Node1 :P1+P2+R3组成了完整的数据

实例演示:

下面是一个已经搭建好的集群.版本为ES7.6.0

创建一个索引

PUT /testindex

查询该索引

GET /testindex

7以下的版本这里会是5和1  这里是7.6.0版本所以是1 1

number_of_shards 相当于主分片数量 代表将索引分成几个分片 5就代表索引会分成5个分片

number_of_replicas 这里相当于是副分片的总数,和上面不同的是这里的1代表所有的副分片组成一份副本的意思.比如有5个主分片,

这里就是5个副分片组成1分总副分片,如果这里是2 代表会有10个副分片组成2份总的副分片.

修改分片数

分片数一般通过修改elasticsearch.yml文件中配置默认值

这里我们修改副分片数量为2

PUT testindex/_settings
{"index" : {"number_of_replicas" : 2}
}

然后查询索引分片信息

GET /testindex/_search_shards

可以看到上图 testindex索引主分片有1个 副分片变为2个 (这里只是针对testindex来说,如果建立其他的索引分片初始还是会变成默认值)

我们接下来尝试修改主分片数量

PUT testindex/_settings
{"index" : {"number_of_shards" : 3}
}

报错,证明索引创建后无法修改分片数

创建索引时指定分片数量

要修改分片数只能在索引创建的时候进行修改

PUT test
{"settings" : {"index" : {"number_of_shards" : 3,"number_of_replicas" : 2}}
}

GET /test/_settings  创建并修改成功

执行 GET /test/_search_shards

可以发现 shards信息中一共有3个主索引 6个副索引

这里我简化了shards节点数据 画图表示

抽象成下图

每个节点上都有一份完整的数据 即使其他两个节点宕机也不会影响查询

数据路由 

当客户端发起创建document的时候,es需要确定这个document放在该index哪个shard上。这个过程就是数据路由。

路由算法:shard = hash(routing) % number_of_primary_shards

这里的routing指的就是document的id

如果number_of_primary_shards在查询的时候取余发生的变化,无法获取到该数据

已知主分片数量为3,

路由算法: shard = hash(routing) % 主分片数量3

分片位置 p1 =  1% 3 , p2 =2%3 , p0=3%3

使用

GET test/_search_shards?routing=1

可以查看具体数据路由到哪个分片上面

如上 id为1的文档会路由到2号分片上

Elasticsearch分片原理相关推荐

  1. 2021年大数据ELK(十一):Elasticsearch架构原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch架构原理 一.Elasticsearch的节点类型 ...

  2. Elasticsearch工作原理

    一.关于搜索引擎 各位知道,搜索程序一般由索引链及搜索组件组成. 索引链功能的实现需要按照几个独立的步骤依次完成:检索原始内容.根据原始内容来创建对应的文档.对创建的文档进行索引. 搜索组件用于接收用 ...

  3. ELK系列(十五)、Elasticsearch核心原理一篇全搞定

    目录 Lucene 介绍 核心术语 如何理解倒排索引? 检索方式 分段存储 段合并策略 Elasticsearch 核心概念 节点类型 集群状态 3C和脑裂 1.共识性(Consensus) 2.并发 ...

  4. elasticsearch 运行原理

    elasticsearch 运行原理: Lucene 把每次生成的倒排索引,叫做一个段(segment).然后另外使用一个 commit 文件,记录索引内所有的 segment.而生成 segment ...

  5. 【Elasticsearch】检查您的 Elasticsearch 分片

    1.概述 翻译:https://www.dennyzhang.com/es_shard 人们可能会用很少的分片来启动他们的弹性搜索集群.甚至以某种方式从 1 开始. 小心!当您的数据变得更大时,您可能 ...

  6. Elasticsearch 分片管理解析

    一个 shard 本质上就是一个 Lucene 索引,也是 Elasticsearch 分布式化 Lucene 的关键抽象,是 Elasticsearch 管理 Lucene 文件的最小单位. 所以, ...

  7. ElasticSearch高可用集群环境搭建和分片原理

    1.ES是如何实现分布式高并发全文检索 2.简单介绍ES分片Shards分片技术 3.为什么ES主分片对应的备分片不在同一台节点存放 4.索引的主分片定义好后为什么不能做修改 5.ES如何实现高可用容 ...

  8. 图解ElasticSearch 搜索原理

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:https://www.cnblogs.com/ri ...

  9. elasticsearch 分片_Elasticsearch教程:动手实践

    本教程可帮助您开始使用Elasticsearch. 您将学习如何创建和删除索引,如何将数据加载到索引以及如何执行基本查询. > Visualizing data in Kibana, image ...

最新文章

  1. Spring Data JPA
  2. 一根火柴可以将一瓶大可乐吊起来吗?
  3. 更小的模型,迈向更快更环保的NLP
  4. 中国水银矿石行业市场供需与战略研究报告
  5. failed to accept an incoming connection: connection from 192.168.1.114 rejected, allowed hosts: 1
  6. html中使用过渡不显示,CSS3过渡不适用于显示属性
  7. LaTeX的安装教程(Texlive 2020 + TeX studio)
  8. pcb板生产的工艺流程有哪些?
  9. Bettertouchtool Mac破解版(触摸板增强神器)
  10. 般若波罗蜜多心经(观音心经)注解
  11. 什么是属性,字段,变量,方法
  12. 第十六周项目3函数指针调用函数 吃饭睡觉打豆豆
  13. RAM 与 ROM, CPU 与 GPU ,显卡与显存 区别以及关系等
  14. 塞规公差带图_塞规和卡规公差表
  15. 共模电感磁芯材质你知道哪几种
  16. 一文让你吃透!图解 pandas 透视表、交叉表!
  17. 火车硬座车厢座位分布表
  18. Unity AssetBundle介绍
  19. 算法_数学问题_Question8_猜牌术(java实现)
  20. R语言学习笔记——向量

热门文章

  1. C++11:使用 auto/decltype/result_of使代码可读易维护
  2. JZ2440恢复出产设置
  3. 使用gn创建HelloWorld工程
  4. Centos7下Mysql 安装及简单配置
  5. 计算机网络,ping连接同一个WiFi的电脑,回复无法访问目标主机,但是数据包已接收(防火墙已关)
  6. django进阶11 聚合查询 Q
  7. MySQl建库建表及增删改查
  8. layiim php图片上传,孤狼采集器利用PHP上传图片方式说明
  9. [转帖]深度解析区块链POW和POS的区别
  10. Go语言学习1-基础入门