扩容前设置集群维护标志位并降低再平衡并发,扩容中分批添加节点或磁盘、逐步恢复权重,扩容后验证数据一致性,全程保留冗余容量。
节点存储阵列扩容时怎么避免同步中断?
节点存储阵列扩容触发同步中断,本质是数据再平衡过程抢占了业务IO的磁盘和网络资源,新磁盘加入集群后,CRUSH算法重新计算数据分布,大量对象需要在旧盘和新盘之间迁移,如果迁移流量不加限制,业务写入的同步路径会被堵死,表现为延迟飙升、连接超时甚至写入失败。
避免中断的核心思路只有一条:把数据迁移的速度压到业务能容忍的范围以内,具体手段包括设置维护标志位、降低再平衡并发、分批增加节点、阶梯式恢复权重。行业共识认为,控制再平衡并发数是避免扩容同步中断的关键操作。
先理解同步中断从哪来
分布式存储的同步写入通常要求数据写入主副本后,同步复制到从副本,扩容时,如果PG正在从旧盘向新盘回填,回填IO会占满磁盘队列,此时业务同步写入请求排队时间变长,超过客户端超时阈值就会中断。
多数情况下,同步中断不是硬件故障导致的,而是扩容操作触发的资源争用,理解这一点后,扩容方案的设计重点就是给迁移流量限速。
扩容前必须做的三项检查
- 检查集群健康状态:运行
ceph -s,确认所有PG处于active+clean状态,没有异常OSD。 - 检查容量水位:运行
ceph osd df,确认各OSD使用率未接近full阈值,使用率越接近full,扩容触发的中断风险越高。 - 检查网络和磁盘性能基线:使用
iostat和ping记录正常业务下的磁盘延迟和网络延迟,作为扩容期间的对比基准。
分布式存储阵列在线扩容步骤拆解
以Ceph分布式存储为例,在线扩容可以拆成下面六个步骤,每个步骤之间需要观察业务延迟变化,不能一口气执行到底。
第一步:设置维护标志位阻断自动再平衡
扩容开始前,先让集群进入维护状态,阻止自动触发的大规模数据迁移。
ceph osd set noout ceph osd set norebalance ceph osd set nobackfill ceph osd set noscrub ceph osd set nodeep-scrub
noout 防止OSD被标记为out后触发数据搬移,norebalance 暂停CRUSH权重变化引起的再平衡,nobackfill 暂停回填。noscrub 和 nodeep-scrub 暂停清洗任务,避免清洗IO与迁移IO叠加。
第二步:添加新节点或新磁盘
将新节点加入集群,或者在新盘上创建OSD。
ceph-volume lvm create --data /dev/sdX
创建完成后,OSD会以默认权重加入CRUSH树,此时因为已经设置了norebalance,即使CRUSH权重变化,也不会立即触发数据迁移。
第三步:阶梯式恢复权重
这是整个扩容过程中最关键的一步,新OSD加入后不能直接给满权重,否则瞬间会有大量PG映射过去,正确做法是逐步提高新OSD的权重。
ceph osd crush reweight osd.X 0.2
ceph osd unset norebalance
sleep 3600
ceph osd crush reweight osd.X 0.5
sleep 3600
ceph osd crush reweight osd.X 1.0
每调整一次权重,等待数据迁移完成并且业务延迟回到基线后,再进行下一次调整,间隔时间取决于数据量和磁盘性能,通常以小时为单位。
第四步:解除维护标志位
权重恢复到目标值并且数据再平衡完成后,解除维护标志。
ceph osd unset noout
ceph osd unset nobackfill
ceph osd unset noscrub
ceph osd unset nodeep-scrub
需要保留norebalance直到确认集群PG分布符合预期,避免后续微小权重调整引发意外迁移。
存储阵列扩容同步中断原因排查
如果扩容过程中出现了同步中断,从下面三个方向排查,多数情况下能找到原因。
再平衡并发过高
默认情况下,Ceph允许每个OSD同时进行多个回填操作,对于机械盘,回填并发过高会让磁盘寻道时间暴增,业务IO无法及时处理。
排查方法:观察 ceph osd df 中的回填速率,以及 iostat 中的磁盘利用率,如果磁盘利用率长时间接近饱和,就需要降低并发参数。
网络和磁盘带宽争抢
扩容迁移的数据要经过存储网络,如果业务写入也走同一张网卡,迁移流量会挤占同步写带宽,万兆网卡在大量回填时可能出现丢包或重传,直接导致同步中断。
排查方法:对比扩容前后网络吞吐和重传率,确认迁移流量是否达到网卡上限。
集群水位过高
当集群整体使用率接近full阈值时,数据回填的空间不足,OSD会频繁进入nearfull或full状态,写入会被拒绝,这种情况下扩容反而会加速中断。
排查方法:运行 ceph osd df,检查使用率最高的OSD是否超过安全水位,如果水位过高,应先清理数据或增加更多容量后再扩容。
在线扩容时的参数调优和命令实操
在开始迁移前,先把再平衡和恢复的并发参数调低,这是防止同步中断最直接的手段。
限制再平衡并发的关键参数
ceph tell osd. injectargs '--osd-max-backfills=1'
ceph tell osd. injectargs '--osd-recovery-max-active=1'
ceph tell osd. injectargs '--osd-recovery-op-priority=2'
osd-max-backfills 控制单个OSD同时回填的PG数量,设为1表示一次只回填一个PG。osd-recovery-max-active 控制同时活动的恢复请求数。osd-recovery-op-priority 把恢复IO优先级调低,让业务IO优先处理。
这些参数可以在线生效,不需要重启OSD,扩容结束后可以根据情况恢复默认值,但多数生产集群会保留较保守的配置。
分时段操作降低业务影响
对于业务高峰明显的场景,可以把数据迁移安排在夜间或周末,但要注意,仅靠时间窗口不够,必须配合并发限制,因为大容量盘回填可能持续数小时甚至数天,窗口期根本无法覆盖完整迁移过程。
更可靠的做法是:保持低并发迁移,让迁移在后台缓慢进行,业务IO始终优先,这样即使迁移持续几天,也不会造成明显影响。
扩容成本与地域因素怎么考虑
扩容方案不能只看技术参数,硬件成本和机房位置也会影响操作节奏。
存储阵列扩容价格一般多少影响硬件选型
存储阵列扩容价格由磁盘类型、数量、节点授权和线缆配件共同决定,企业级SATA盘单价相对较低,但顺序读写性能有限,扩容时更容易因回填占用导致业务延迟,企业级NVMe盘价格明显更高,但随机读写能力强,配合低并发迁移参数可以做到几乎无感扩容。
预算充足时,优先选择NVMe盘并增加单批容量,减少扩容批次,预算紧张时,可以选择SATA盘,但必须更严格地控制再平衡并发,并拉长权重恢复间隔,多数情况下,磁盘成本在扩容总成本中占比最大。
上海机房节点存储阵列扩容的特殊成本
海机房为例,节点存储阵列扩容除了硬件采购,还要考虑机位、电力和网络带宽成本,一线城市机房单机位电力配额有限,新增高功耗节点可能触发电力改造,网络方面,如果扩容节点跨机柜,还要评估柜顶交换机端口余量。
这些地域因素会限制单次扩容的节点数量,建议在上海机房进行扩容时,先确认机位电力和网络端口是否满足新增节点需求,再制定分批操作计划。
避免同步中断的操作优先级总结
回到核心问题,节点存储阵列扩容时怎么避免同步中断?按优先级排序,只需要记住三件事:
- 第一,扩容前设置
noout、norebalance、nobackfill,阻断自动迁移。 - 第二,扩容中把
osd-max-backfills和osd-recovery-max-active降到最低,限制回填并发。 - 第三,扩容后阶梯式恢复CRUSH权重,每步之间观察业务延迟。
只要做到这三点,绝大多数分布式存储扩容都能在不中断业务同步的前提下完成。
节点存储阵列扩容常见问题解答
节点存储阵列扩容时同步中断最常见的触发点是什么?
多数情况下是再平衡并发数设置过高,新盘加入后,大量PG同时向新盘回填,磁盘队列和网络带宽瞬间被占满,业务同步写入请求超时。
分布式存储阵列在线扩容步骤中哪一步最容易踩坑?
最容易踩坑的是添加OSD后立即恢复满权重,正确做法是阶梯式调整CRUSH权重,从0.2逐步提升到1.0,每步之间留出数小时观察窗口。
存储阵列扩容价格一般多少会影响方案选择吗?
会,价格差异直接影响硬件选型和迁移节奏,预算充足时优先选择NVMe盘并配合低并发迁移,预算有限时选择SATA盘但必须更严格地限制回填并发,硬件性能越低,迁移过程中越需要保守的参数配置。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/646375.html





