8.2 分片路由、副本与再平衡


文档摘要

8.2 分片路由、副本与再平衡 本节摘要:分片分配器决定每个分片住在哪个节点:新索引建分片、节点增减触发再平衡、磁盘水位划出居住红线。本节讲分配决策的四个因素、再平衡的触发时机、搬迁的代价模型,以及"控制搬家"的三个参数(分片总数、过滤规则、平衡因子)。第 1 章那张静态分片地图,这一节让它动起来。 分片的搬家日志 分配器想什么 一个分片该住哪个节点,分配器(allocator)按加权评分做决定,核心考虑四件事:磁盘水位(低水位八十五、高水位九成、洪水位九十五,百分比可调)——超低水位的节点不再接收新分片,超高水位的节点开始往外搬;分片数均衡——各节点的分片数(按磁盘容量加权)尽量拉平;副本隔离——副本不能与自己的主分片同节点;

8.2 分片路由、副本与再平衡

本节摘要:分片分配器决定每个分片住在哪个节点:新索引建分片、节点增减触发再平衡、磁盘水位划出居住红线。本节讲分配决策的四个因素、再平衡的触发时机、搬迁的代价模型,以及"控制搬家"的三个参数(分片总数、过滤规则、平衡因子)。第 1 章那张静态分片地图,这一节让它动起来。

分片的搬家日志

分配器想什么

一个分片该住哪个节点,分配器(allocator)按加权评分做决定,核心考虑四件事:磁盘水位(低水位八十五、高水位九成、洪水位九十五,百分比可调)——超低水位的节点不再接收新分片,超高水位的节点开始往外搬;分片数均衡——各节点的分片数(按磁盘容量加权)尽量拉平;副本隔离——副本不能与自己的主分片同节点;过滤规则——冷热分层、专用节点上的属性匹配(比如 SSD 节点只放热索引)。

GET _cat/allocation?v # 节点维度的分片数 磁盘用量 水位一目了然 GET _cluster/settings?include_defaults=true # allocation 相关的现行参数 全在这里

再平衡什么时候发生

三种事件惊动分配器:新索引创建(一批主副本要安家)、节点增减(节点掉线副本要补、新节点加入要匀)、手动干预(手动移动分片、改设置)。再平衡的目标是均衡,但均衡不是免费的——搬迁要走网络复制整个分片,顺带吃掉两端节点的 IO。所以有专门的"意识"参数让搬迁克制:集群层面的分片总数上限、单节点同索引分片数上限,都在防"为了均衡而均衡"。

搬家时间线

搬家时间线

手动控制搬家

限速与并发是高峰期的护栏:

PUT _cluster/settings { "persistent": { "cluster.routing.allocation.cluster_concurrent_rebalance": 2, "cluster.routing.allocation.node_initial_primaries_recoveries": 4, "indices.recovery.max_bytes_per_sec": "40mb" } }

三条参数分别管:同时再平衡的分片数、节点初始主分片恢复数、恢复带宽上限。搬迁期间业务照常读写(目标分片建好后原子切换归属),但 IO 竞争是实打实的——大搬迁放在低峰,是运维常识不是教条。

节点下线前还有个体面动作:先把该节点的分片匀走再停机(分配过滤把该节点排除),避免停机瞬间集群抖动与副本补齐风暴。

PUT _cluster/settings { "transient": { "cluster.routing.allocation.exclude._name": "node-3" } }

一次扩容的完整过程

背景:日志集群三节点,磁盘用到七成八,写入高峰查询延迟抬升三成,决定扩一个节点。操作:新节点上线(同版本、同配置,加入集群名);分配器自动把六个分片匀过去,期间把恢复带宽限到四十兆每秒,避免挤压晚高峰查询;搬迁两小时完成。结果:四节点各六块分片,磁盘水位回落到六成,查询延迟回到基线。解读:扩容的本质是把分片摊薄到更多磁盘与核上——前提是分片数足够摊(第 1 章的分片规划在此兑现);若当初只建一个主分片,加节点帮不上忙。变式:临时救急不扩容时,把冷索引副本降零、或把冷索引进生命周期管理搬到低配存储,同样能腾水位。

⚠️ 常见坑:分片规划过大过碎——一万个小分片让主节点的元数据管理与分配决策变慢,集群状态同步开销剧增。单分片十几到几十 GB、总分数百以内,是多数场景的舒适区;小索引用少分片,别一律默认三。

💡 关键直觉:分片数是"并行的门票":节点数多于主分片数时,多出来的节点只能陪跑副本。规划分片时先想清楚最多会扩到几个节点。

考核与自测

考核知识点清单

考核点 达标标准
分配四因素 说出磁盘水位、均衡、副本隔离、过滤规则的含义
水位三线 背出八十五、九十、九十五三档水位线的触发行为
再平衡三触发 建索引、节点增减、手动干预各自引起什么搬迁
搬迁代价 说出源读、网络传、目标建的三段成本模型
护栏参数 写出并发与带宽限制的设置请求并说明生效时机
下线流程 说明先匀盘再停机的顺序与理由

动手验证:亲眼看一次匀盘

双节点集群里再起第三个节点,反复执行分片目录观察搬迁全程:

GET _cat/shards?v&s=index,shard # 每两秒执行一次 观察分片从 INITIALIZING 走到绿 # 新节点的分片行从无到有 老节点行数逐步减少

状态列的变化序列就是再平衡的可视化:某分片显示搬迁中时,新旧两处并存,目标端建好并校验完才切换归属、拆掉旧摊位——"业务无感"四个字从此有机理层面的注脚。看懂这一轮,第 1 章那张静态地图就动起来了。

易错点补充

  • 扩容前忘了检查分片数:主分片数是并行门票,一个主分片的索引加再多节点也只有一片在干活。
  • 大搬迁放在业务高峰:限速参数能缓解 IO 竞争,但低峰执行才是把影响降到最低的正解。
  • 分片规划一刀切:按数据量定分片数,小索引一片、大索引适度多片,默认值不是万能键。
  • 把副本追赶误当数据丢失:主分片写成功、副本仍在传输时读到旧数据属正常现象,确认追平看分片恢复接口而不是反复查询。
  • 搬迁期间重启源节点:正在传输的分片从头再来,搬迁时长翻倍;要动节点先等搬迁队列清空。
  • 把磁盘告警线当唯一水位依据:分片数、堆内存、连接数同样会让分配器罢工,四件套一起看才不漏判。

搬家日志归档

  • 分配器四因素:磁盘水位、均衡、副本隔离、过滤规则;三条水位线八十五、九十、九十五。
  • 再平衡三触发:建索引、节点增减、手动干预;搬迁代价是源读、网络传、目标建。
  • 高峰护栏:并发与带宽可调,低峰大搬迁,下线先匀盘。
  • 分片数是并行门票,过大过碎都伤集群;十数 GB 一片、总数可控是舒适区。

分片的"住址"讲完了,下一节钻进时间维度:refresh、translog 与段合并的幕后动画。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U