Elasticsearch分片原理

news/2024/11/17 12:51:51/

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号分片上

 

 

 

 


http://www.ppmy.cn/news/744449.html

相关文章

小时候看的动画片

1.铁臂阿童木手冢大师的名作。说真的我对这部动画印象不多,大概因为当时还太小吧。事实上我在10岁以前是不看动画的,因为看不懂(呵呵)。当时曾经在一些少儿杂志上看到漫画的连载,印象就是——看不懂!虽然看不懂,但却一直觉得有一种淡淡的哀伤的感觉。一直到现在,这仍是…

mycat 常用分片规则使用详解

前言 在上一篇,详细了解了使用mycat进行数据库的垂直拆分和表的水平拆分,本篇在此基础上继续探讨mycat的常用分片规则。 什么是分片规则? 分片规则就是按照一定的规则(算法),将数据分散存储到多个物理节点上,从根本上来说,是为了解决单节点数据容量过大而引发的性能问题…

数据库分片(Database Sharding)详解

Introduction 导言 任何看到显著增长的应用程序或网站,最终都需要进行扩展,以适应流量的增加。以确保数据安全性和完整性的方式进行扩展,对于数据驱动的应用程序和网站来说十分重要。人们可能很难预测某个网站或应用程序的流行程度&#xff…

在powerpoint中默认的视图是_在PowerPoint2010中默认的视图模式是A.普通视图B.阅读视图C.幻灯片浏览视图D.备注视图...

在PowerPoint2010中默认的视图模式是A.普通视图B.阅读视图C.幻灯片浏览视图D.备注视图 更多相关问题 蔬菜植物春化中种子植物感应型的代表蔬菜是(B )等。 季节变动一般是指市场现象以年度为周期,随着自然季节的变化,每年都呈现的有规律的循环变动。( ) 88. In the Northern H…

单片机c语言访问片外存储器,教你给51单片机扩展片外RAM

原标题:教你给51单片机扩展片外RAM 上一文中扩展了单片机的程序存储器,4KB存储空间提升到64KB。其实,4K的代码空间还凑合,但是51自带的256B数据存储空间使用起来还真紧张,其中留给用户的连128B都不到,所以不…

片偏移怎么计算_计算机网络学习笔记(四)之网络层

点击蓝字关注我吧 越努力越幸运!!! 1 网络层的功能 1.1异构网络互联 网络的互联:指将两个以上的计算机网络,通过一定的方法, 用一种或多种通信处理设备(即中间设备)相互联接起来,以构成更大的网络系统。中间设备又称为中间系统或中继系统。根据中继系统所在…

嵌入式和单片机的区别在哪?

单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们自己的定义,接下来,就谈谈这两个概念的理解。 什么是单片机 首先明确概念,什么是单片机,…

Vue文件分片上传

在开发中,如果上传的文件过大,可以考虑分片上传,分片就是说将文件拆分来进行上传,将各个文件的切片传递给后台,然后后台再进行合并。这里切片可以理解为字符串的截取,那这里文件的话就是切分字节&#xff0…