文档目录

适用场景

  • 产品:ZCF
  • 组件:ZStack Cloud
  • 版本:4.3.x
  • 触发条件:云主机采用精简制备,在自动扩容时出现暂停,伴随主存储失联和 vgs 卡住。

问题现象

  • 云主机自动暂停,停止后无法再正常启动。
  • 主存储失联。
  • 多个或单个节点执行 vgs 卡住。
  • 问题节点存在残留 vgchange 进程。

判断方法

  1. 检查主存储是否失联。
  2. 检查所有节点或异常节点执行 vgs 是否卡住。
  3. 用以下命令检查是否存在残留进程:
   ps -ef | grep vgchange
  1. 检查 sanlock 和 lvm2-lvmlockd 状态,以及历史是否存在 aio timeout、IO error/timeout。

原因说明

本次云主机暂停并不是普通 guest 内故障,而是精简制备云主机在达到阈值水位后自动执行 lvextend 时,因 VGLK 锁异常导致扩容失败;卷写满后云主机被自动暂停。同时,历史上的 sanlock aio timeout 与大量 IO error/timeout 进一步诱发了锁状态异常,而问题节点残留的 vgchange 进程持续占用 flock,加重了锁竞争问题。

解决方案

  1. 应急恢复步骤
  2. 当云主机暂停且主存储失联时,先检查各节点 vgs 状态。
  • 预期结果:确认是否存在全局或单节点锁卡死。
  1. 若 vgs 普遍卡住,重启锁服务释放异常锁:
  • sanlock
  • lvm2-lvmlockd
  • 预期结果:主存储可重新连接,vgs 恢复返回。
  1. 若问题收敛到单节点持续异常,例如仅 32.1.x 节点卡住:
   ps -ef | grep vgchange
  • 查找残留 vgchange 进程。
  • 预期结果:定位持续占锁的残留进程。
  1. 清理残留 vgchange 进程。
  • 预期结果:解除 flock 占用,使后续 lvchange/lvextend 不再持续卡死。
  1. 若故障云主机仍无法在原节点恢复,先停止云主机并指定其他物理机启动。
  • 预期结果:优先恢复业务。
  1. 环境健康检查
  2. 检查 vgs、pvs 是否恢复正常。
  3. 检查相关进程是否已无残留:
   ps -ef | grep -E 'lvchange|lvcreate|lvrename|lvresize|lvextend|lvremove|lvs|vgs|pvs|vgchange'
  1. 检查服务状态:
   systemctl status sanlock
   systemctl status lvm2-lvmlockd
  • 预期结果:LVM 和锁服务恢复正常。

验证方法

  • 检查主存储重新连接成功。
  • 检查 vgs、pvs 返回正常。
  • 检查暂停云主机可在健康节点启动恢复。
  • 检查无残留 vgchange 等异常进程。

风险与后续治理

  • 风险:若不清理残留 vgchange 进程,仅重启服务后问题可能反复出现。
  • 风险:若 thin LV 已写满,业务暂停会直接影响数据库类工作负载。
  • 建议的根治方向:
  1. 升级 sanlock 版本,优化锁未自动释放和 vgchange 卡住问题。
  2. 升级云平台到 4.8.x.x 最新 LTS,优化 sharedblock 场景锁问题。
  3. 持续做环境健康检查。
云主机暂停故障报告 | 技术方案 · KB | ZStack 资源中心