带你读《Elastic Stack 实战手册》之46:——3.5.5.Shard allocation (1)

简介: 带你读《Elastic Stack 实战手册》之46:——3.5.5.Shard allocation (1)


3.5.5.Shard allocation


创作人:毛夏军

审稿人:刘帅

 

什么是分片分配 (shard allocation)

 

分片分配 (shard allocation),是指在索引创建、副本增减、节点增减、分片重平衡等,将索引分片落实到实际的物理节点的过程,分片分配可以分为,集群级分配和索引级分配两种,集群级分配常见的包括

 

l 要求热索引的分片不要去往低配机器,

l 商品、订单索引的分片不要分配到同一个节点等。

 

将分片分布到不同的节点,一方面是为了提高系统的可用性,如当集群中一台机器宕机,使得该节点上的分片不可用时,分布在其他机器上的分片,能通过重新选举继续工作 (但是仍要保证同一分片的主从副本不全在宕机节点上) ;

 

另一方面是为了提高系统的容量和读写性能,如通过增加节点横向扩容,将集群中部分分片

Rebalance 到新节点,既可以利用新节点的存储容量,提升索引存储容量,迁移过来的分片,可以利用新节点增加的算力提供服务。

 

总结一下分片分配过程,有两个基本要素:

 

l 分片:来自集群内的全部索引,包括主分片和副本分片

l 节点:组成集群的各个 Elasticsearch 进程,能够通过一定的标识来识别个体或划分成组

 

那么,集群内的各节点是如何被识别和标记的呢?

 

节点属性 (node attributes)


节点属性 (node attributes),包括内置属性和自定义属性两种。

 

Elasticsearch 会将常见用于区分不同机器的标记,如主机名 (_host)、IP 地址 (_ip)、节点

名称 (_name) 等作为内置属性,供分片分配时区分节点的标记使用,具体包括:

 

l _name:节点名称,即在 elasticsearch.yml 中定义的 node.name 属性

l _host_ip、_publish_ip、_ip:节点的 IP 地址,一般情况下使用 _ip 即可,具体含义可以查阅官方帮助文档

l _host:主机名

l _id:集群为节点自动分配的唯一标识符,手动调控时使用较少

l _tier:节点的数据角色,比如存储冷热数据的 data_cold、data_hot 等,可以在 elasticsearch.yml 中指定 node.roles 属性

 

内置属性可以用来区分不同节点,但是对于将节点划分成组来说不是很便利,比如我们希望将索引分配到高配节点。如果使用内置属性,比如 _ip 的话,需要在索引设置 index.routing.allocation.include._ip 中,指定多个机器的 IP 地址,在集群增删高配节点的情况下,需要同时调整对应索引的分片分配设置,显得不太便捷。

 

我们很自然的希望除了内置属性之外,还可以根据机器配置的高低、是否同属于一个网段等情况来标记节点,方便我们将不同类型的节点划分为一个个组,继而将索引的分配配置到节点组,这样在集群增删节点时,只要节点配置了对应的组,集群就会根据对应组的节点变化自动的将分片重新调整,而不需要我们再手动的同步每一个索引的分配设置。

 

自定义节点属性解决的便是这个问题,我们可以通过:

 

l 在 elasticsearch.yml 中新增配置项,如 node.attr.zone=zone1

l 或在启动命令中增加变量,如bin/elasticsearch -Enode.attr.zone=zone1

 

来为节点增加自定义属性。

 

小结


分布式架构为我们带来了众多容量、性能和可用性方面的优势,但是相应的也提高了保障难度,

因为分片在集群自动分配的情况下不一定能达到我们期望的"平衡"状态,需要我们对分片分配机制有较高的掌握程度来调控集群内分片的分配状况,比如主从副本不分布在同一物理节点、解决节点数据倾斜导致新分片集中于某几台负载较低节点的热点问题等。

 

调控分片分配

 

Elasticsearch 集群中 master 节点的一项重要功能,就是决定分片如何以最佳的方式,均衡分布到集群内的各个节点上。除了自动分配之外,我们也可以从粗粒度的集群维度和细粒度的索引维度,手动调控分片在各节点的分配。

 

集群维度 (cluster level) 的分片分配,是将所有分片纳入一起考虑,不会单独考虑某个索引的分片分配情况。

 

举个例子:我们有两个索引,每个索引包含两个分片,将分片分配到两个节点组成的集群。


状态一:

 

同一个索引的全部分片分配到同一个节点

 

{
  "node_1": ["index_1_shard_1", "index_1_shard_2"],
  "node_2": ["index_2_shard_1", "index_2_shard_2"]
}

状态二 :

 

同索引的分片均匀分配到各节点

 

{
  "node_1": ["index_1_shard_1", "index_2_shard_2"],
   "node_2": ["index_2_shard_1", "index_1_shard_2"]
}

从集群维度,都可以被认为是"平衡"状态,但是从实际角度看,只有状态二是我们期望的平衡状态。因为如果 index_1 和 index_2 负载不均,在状态一下,很可能导致集群内节点负载不均,使得服务整体表现不能达到预期。

 

要达到我们期望的状态二,就可以使用索引维度 (index level) 的分片分配控制方法,比如通过index.routing.allocation.total_shards_per_node 参数控制每个节点的分片数量为 1 ,就可以达到我们的目的了。

 


《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.5.Shard allocation (2) https://developer.aliyun.com/article/1228684


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
SQL 缓存 分布式计算
阿里云连续五年入选Gartner®分析和商业智能平台魔力象限,中国唯一
Gartner® 正式发布《分析与商业智能平台魔力象限》报告(Magic Quadrant™ for Analytics and Business Intelligence Platforms),阿里云成为唯一入围该报告的中国厂商,被评为“挑战者”(Challengers)。这也是阿里云连续五年入选该报告。
|
存储 SQL 自然语言处理
LLM RAG系列
LLM RAG系列
450 1
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
296 2
|
9月前
|
SQL 关系型数据库 MySQL
MySQL:CTE 通用表达式
CTE(通用表表达式)为处理复杂查询提供了强大的工具。通过普通CTE,可以简化查询逻辑,提高可读性;通过递归CTE,可以优雅地处理层级结构数据。掌握CTE的使用,对于提升SQL查询能力和优化数据库操作有着重要意义。希望本文能帮助你更好地理解和使用MySQL中的CTE,提高工作效率和代码质量。
354 7
|
安全 编译器 C++
Microsoft Visual C++ Redistributable的作用主要体现以及可以删除吗?
这些是Microsoft Visual C++不同版本的Redistributable安装包,用于32位系统,确保相关应用正常运行。它们提供C++运行时环境,简化部署流程,支持第三方库及框架,并确保应用兼容性。定期更新可修复问题并引入新功能。在空间有限或需解决程序冲突时可考虑删除,但需谨慎操作以防影响应用稳定性和兼容性。删除前请确认无应用依赖,并通过控制面板安全卸载。
2777 1
Microsoft Visual C++ Redistributable的作用主要体现以及可以删除吗?
|
消息中间件 存储 Java
MQ线上消息乱序问题处理及场景详解
【11月更文挑战第22天】在现代分布式系统中,消息队列(MQ)作为核心组件,承担着异步处理、削峰填谷和系统解耦的重任。
774 1
Bad Request, Resolved [org.springframework.http.converter.HttpMessageNotReadableException,跟着视频仔细比对
Bad Request, Resolved [org.springframework.http.converter.HttpMessageNotReadableException,跟着视频仔细比对
|
缓存 JavaScript 前端开发
【前端】Vue2知识点大全!
【前端】Vue2知识点大全!
656 1
【前端】Vue2知识点大全!
|
API 索引
Elasticsearch Index Shard Allocation 索引分片分配策略
Elasticsearch Index Shard Allocation 索引分片分配策略
459 1
|
JSON 自然语言处理 开发工具
elasticsearch7.X学习笔记
elasticsearch7.X学习笔记
360 0

热门文章

最新文章