elasticsearch7.x集群分片及水平扩容讲解(代码片段)

小毕超 小毕超     2023-03-09     238

关键词:

一、ES 中的分片

上篇文章我们讲解了ES 7.X 的集群环境搭建,本篇主要讲解下ES的分片和扩容。

上篇文章地址:https://blog.csdn.net/qq_43692950/article/details/122244793

一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有 10 亿文档数据的索引占据 1TB 的磁盘空间,而任一节点都可能没有这样大的磁盘空间。或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,每一份就称之为分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。

分片很重要,主要有两方面的原因:

  • 允许你水平分割 / 扩展你的内容容量。
  • 允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量。

至于一个分片怎样分布,它的文档怎样聚合和搜索请求,是完全由Elasticsearch 管理的,对于作为用户的你来说,这些都是透明的,无需过分关心。

注意:一个 Lucene 索引 我们在 Elasticsearch 称作 分片 。 一个
Elasticsearch 索引 是分片的集合。 当 Elasticsearch 在索引中搜索的时候, 他发送查询到每一个属于索引的分片(Lucene 索引),然后合并每个分片的结果到一个全局的结果集。

ES 中的分片可以在创建索引的时候进行指定,例如创建一个user索引:

向ES服务器发送PUT 请求:

http://192.168.40.130:9200/user

请求体内容为:


	"settings": 
		"number_of_shards": 3,
		"number_of_replicas": 1
	

表示user索引被分为了3个分片,每个分片有一个副本,就是一共有6个分片。

可以通过 elasticsearch-head这个插件方便的看到分布情况:


可以看到有6个分片了,其中加粗的为主分片。

这里还需要注意的是,分片数一旦指定后面就无法修改,副本数是可以修改的,因为分片是采用的Hash/分片数 的方式进行数据的划分的,所以在创建索引时,就要规划好分片的数量。

二、ES 副本扩容

在一个网络 / 云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch 允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。

副本分片之所以重要,有两个主要原因:

  • 提供了高可用性,即使主分片节点宕机,可以从其中一个副本节点升级为主分片继续提供服务。

  • 扩展你的搜索量/吞吐量,因为搜索可以在所有的副本上并行运行。

总之,每个索引可以被分成多个分片。一个索引也可以被复制 0 次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。默认情况下,Elasticsearch 中的每个索引被分片 1 个主分片和 1 个复制,这意味着,如果你的集群中至少
有两个节点,你的索引将会有 1 个主分片和另外 1 个复制分片(1 个完全拷贝),这样的话每个索引总共就有 2 个分片,我们需要根据索引需要确定分片个数。

上面我们创建了一个user索引,前面提到分片数一旦指定即无法修改,但副本数是可以动态改变的,下面进行ES副本的扩容操作,将每个分片的副本由1扩容到2,扩容出来应该是9个节点。

向ES服务器发送请求:

http://192.168.40.130:9200/user/_settings

请求体内容:


	"number_of_replicas": 2


查看 elasticsearch-head 中的变化:

现在已经扩容到9个节点了,但是看到扩容出的副本是灰色的,切集群环境变成了黄色,黄色表示分片依然可以正常提供服务,但是有副本集没有正常启动,这里确实有三个副本是灰的没有正常启动,但是为什么没有正常启动呢?

因为ES在每个ES节点上,不会同时分布两个相同的副本及主分片,以确保某个ES节点宕机,无法进行容灾的转移 。但这里我们一共就有两个ES节点,切分片数为3个,所以只能正常运行3 主分片 + 3副本 6个节点,但我们是3主分片且每个有2个副本,即9个节点,所以有三个副本不可用。

但是从上面就可以看出,已经扩容成功了,下面我们再扩容出一个ES节点,那不就可以让那 3 个副本有空间运行了。

三、扩容ES节点

找一台新的主机,在该主机上搭建好ES所需的环境,可以参考上篇文章的内容,修改ES 的 config/elasticsearch.yml ,写入以下内容:

#集群名称
cluster.name: cluster-es
#节点名称,每个节点的名称不能重复
node.name: node-3
#ip 地址,每个节点的地址不能重复
network.host: 192.168.40.168
#是不是有资格主节点
node.master: true
node.data: true
http.port: 9200
# head 插件需要这打开这两个配置,解决跨域问题
http.cors.allow-origin: "*"
http.cors.enabled: true
http.max_content_length: 200mb
#es7.x 之后新增的配置,初始化一个新的集群时需要此配置来选举 master
cluster.initial_master_nodes: ["node-1"]
#es7.x 之后新增的配置,节点发现
discovery.seed_hosts: ["192.168.40.130:9300","192.168.40.167:9300","192.168.40.168:9300"]
gateway.recover_after_nodes: 2
network.tcp.keep_alive: true
network.tcp.no_delay: true
transport.tcp.compress: true
#集群内同时启动的数据任务个数,默认是 2 个
cluster.routing.allocation.cluster_concurrent_rebalance: 16
#添加或删除节点及负载均衡时并发恢复的线程个数,默认 4 个
cluster.routing.allocation.node_concurrent_recoveries: 16
#初始化数据恢复时,并发恢复线程的个数,默认 4 个
cluster.routing.allocation.node_initial_primaries_recoveries: 16

主要修改的是 cluster.name 必须和原集群保持一致。node.name 要保证唯一,不要和现有集群重复。discovery.seed_hosts 就填写现有集群所有的主机ip 和自己的 ip。

下面启动 ES :

./elasticsearch -d

下面查看 elasticsearch-head

集群状态就恢复到绿色了。可以看出node-1上有第一个分片的主分片,如果将node-1 机器停掉,再看 elasticsearch-head

分片已经划分到了node-2节点上。


喜欢的小伙伴可以关注我的个人微信公众号,获取更多学习资料!

elasticsearch7.x中文分词器ik使用,及词库的动态扩展(代码片段)

一、ik中文分词器上篇文章我们学习了ES集群分片和水平扩容,前面再使用的时候应该就会发现,在做match匹配时,默认会进行分词,但当查询内容是中文时,分词效果是一个字被认定了一个词,这显然不符... 查看详情

「日记」elasticsearch7.x新功能介绍

参考技术A说明:ElasticSearch7.X很多新功能主要基于lucene8.X新特性,故对于lucene8.X新特性不赘述。在6.1中已加入这个功能,但是默认是关闭的,在7.0中开始默认开启。若有两个节点,且其中一个节点上有一个索引的主分片,另一个... 查看详情

elasticsearch7.8.0版本进阶——分布式集群(水平扩容)(代码片段)

...3001.5502二、水平扩容(win10环境集群演示)先启动Elasticsearch7.8.0集群的节点1再启动Elasticsearch7.8.0集群的节点2最后启动Elasticsearch7.8 查看详情

elasticseach

...片、clusterdiscovery、shared负载均衡,shared副本请求路由、集群扩容、shared重分配2、Elasticseach的垂直扩容与水平扩容(1)垂直扩容:采购更强大的服务器(2)水平扩容:扩容对应用程序透明3、增加或减少节点时的数据rebalance(1)保持负载... 查看详情

『mongodb』mongodb高可用部署架构——分片集群篇(sharding)(代码片段)

...3;读完这篇文章里你能收获到为什么要使用分片Mongodb分片集群有哪些特点Mongodb分片集群的完整架构Mongodb分片集群数据分布方式Mongodb分片集群的设计思路Mongodb分片集群搭建及扩容这篇文章强烈建议收藏!!!免得下... 查看详情

elasticsearch7.x进阶实战视频课上线

1、Elasticsearch7.X进阶实战大纲课程地址:Elasticsearch7.X进阶实战视频课10个大选题来源于实战业务场景的提炼、总结。Elasticsearch全貌认知Elasticsearch索引创建和搜索原理Elasticsearch集群规划及节点角色规划最佳实践Elasticsearch集群... 查看详情

elasticsearch7.x进阶实战视频课上线

1、Elasticsearch7.X进阶实战大纲课程地址:Elasticsearch7.X进阶实战视频课10个大选题来源于实战业务场景的提炼、总结。Elasticsearch全貌认知Elasticsearch索引创建和搜索原理Elasticsearch集群规划及节点角色规划最佳实践Elasticsearch集群... 查看详情

elasticsearch7.x进阶实战视频课上线

1、Elasticsearch7.X进阶实战大纲课程地址:Elasticsearch7.X进阶实战视频课10个大选题来源于实战业务场景的提炼、总结。Elasticsearch全貌认知Elasticsearch索引创建和搜索原理Elasticsearch集群规划及节点角色规划最佳实践Elasticsearch集群... 查看详情

elasticsearch之十集群部署及分布式内部机制

...个10T服务器可能20万。水平扩容:采购更多服务器,加入集群。大数据。新增或减少es实例时,es集群会将数据重新分配。功能:注意:es7以前primaryshard的默认数量是5,replica默认是1,默认有10个shard,5个primaryshard,5个replicashard以... 查看详情

elasticsearch7.x和elasticsearch8.x学习记录

ElasticSearch7倒排索引数据写入时,建立关键字和主键的映射,查询时–>关键字–>主键–>对应文章分片因为ES是以检索为主的产物,为了便于查询,会将数据进行分片,例如:根据性别分片,当查询女... 查看详情

docker下rediscluster分片集群搭建

1.Cluster分片集群1.1Cluster集群的结构和作用  redis哨兵模式虽然提供了redis⾼可⽤、高并发读的解决方案,但是在海量数据应用场景下,仍然存在海量数据存储问题和高并发写的问题。当只有⼀个Master对外提供服务时,如果数据... 查看详情

es分片副本设置及集群部署(代码片段)

...xff0c;因为搜索可以在所有的副本上并行运行。在运行中的集群上是可 查看详情

es分片副本设置及集群部署(代码片段)

...xff0c;因为搜索可以在所有的副本上并行运行。在运行中的集群上是可 查看详情

redis-分布式缓存

一、单机Redis的问题二、Redis分片集群1、Redis分片集群的优势2、搭建Redis分片集群3、散列插槽4、集群伸缩5、故障转移/数据迁移6、RedisTemplate访问分片集群一、单机Redis的问题1、数据丢失问题实现Redis数据持久化;2、并发能力问... 查看详情

hdfs—集群扩容及缩容

白名单:表示在白名单的主机IP地址可以,用来存储数据。配置白名单步骤如下:1)在NameNode节点的/opt/module/hadoop-3.1.4/etc/hadoop目录下分别创建whitelist和blacklist文件(1)创建白名单[lytfly@hadoop102hadoop]$vimwh... 查看详情

elasticsearch7.x聚合查询及elasticsearchresttemplate操作(代码片段)

一、创建测试索引创建索引结构,向ES服务发送PUT请求:http://127.0.0.1:9200/jh_test "settings":, "mappings": "properties": "name": "type":"text","fields&# 查看详情

elasticsearch7.x聚合查询及elasticsearchresttemplate操作(代码片段)

一、创建测试索引创建索引结构,向ES服务发送PUT请求:http://127.0.0.1:9200/jh_test "settings":, "mappings": "properties": "name": "type":"text","fields&# 查看详情

elk学习002:elasticsearch7.x的安装及配置

下载地址:https://www.elastic.co/cn/downloads/elasticsearch下载对应需要的ES。我这边是Linux的系统。另外ES支持Docker方式启动。另外,ES7.x不需要本地JDK环境支持:ES5,安装需要JDK8以上ES6.5,安装需要JDK11以上ES7.2.1,内置了JDK12 查看详情