带你读《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 消息中间件 分布式计算
完美避坑!记一次Elasticsearch集群迁移架构实战
Elastic自身设计了集群分片的负载平衡机制,当有新数据节点加入集群或者离开集群,集群会自动平衡分片的负载分布。
|
数据安全/隐私保护
大量建置账号
假设我的五个朋友账号分别是 vbirduser{1,2,3,4,5},且这五个朋友未来想要共享一个目录,因此应该要加入同一个群组,假设这个群组为 vbirdgroup,且这五个账号的密码均为 password 。
780 0
|
1天前
|
云安全 安全 网络安全
|
1天前
|
JavaScript 安全 前端开发
Nodejs Brotli decoder 代码执行漏洞 (CVE-2026-111497)10629
Node.js发布安全更新修复Brotli解码器高危RCE漏洞(CVE-2026-111497),建议受影响版本用户立即升级。
1462 0
|
7天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
1214 24
|
3天前
|
存储 人工智能 自然语言处理
阿里云千问办公官网登录入口:qwenwork.cn网页版免下载,注册送2000积分、登录每日再送100积分
千问办公(QwenWork)是阿里巴巴推出的一站式AI办公平台,定位"不止于对话,更注重交付"。它基于千问大模型,具备任务拆解与多步骤自动执行能力,用户一句话即可完成PPT生成、数据分析、网页搭建、视频剪辑、信息调研等复杂任务,覆盖网页端、桌面端及钉钉生态。网页版免下载,访问qwenwork.cn注册即得2000积分,每日登录再送100积分。个人版免费起用,另有付费版与企业版可选。
|
12天前
|
存储 人工智能 安全
千问办公官网入口网页版登录:qwenwork.cn 注册送2000积分、登录送100积分
阿里云千问办公(QwenWork)是AI智能工作平台,支持一句话生成PPT、表格、网页、视频及数据分析。个人免费版送2000积分+每日登录赠100分,含1GB存储、5个发布页;企业版198元/席/月起。阿里千问办公QwenWork官网:https://t.aliyun.com/U/0VCTGt 阿里AI工作平台,一句话完成数据分析、PPT 生成、视频剪辑、网页搭建等复杂任务
|
7天前
|
人工智能 开发者
Qoder CN 大使计划正式开启|无限创造,等你一起
全年免费积分、优先内测、活动支持与更多共创机会,邀请用 Qoder 把想法变成现实的你。
599 6
|
8天前
|
安全 Linux 芯片
【万字长文】Ollama下载、安装、配置、使用保姆级教程(2026最新图解)
Ollama 是一款免费开源的本地大模型运行工具,支持 DeepSeek、Qwen 等主流模型,一条命令即可下载运行。2026 最新版 v0.35.1 官方安装包(1.47GB)已提供国内直连下载,纯本地、离线可用、无广告、无隐私泄露风险。
760 1
|
1月前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
10080 33

热门文章

最新文章