文档目录

适用场景

  • 产品:ZCF
  • 组件:Cloud
  • 版本:4.3.x、3.8.x
  • 部署形态:双管理节点
  • 触发条件:需要通过升级 sanlock 组件,优化 vgchange 卡住和存储故障后锁未自动释放问题。

问题现象

  • 环境存在 vgchange 卡住。
  • 存储故障后锁未自动释放。
  • 需要通过升级底层 sanlock 和配套锁服务缓解问题。

判断方法

  1. 升级前确认物理机和存储 ping 间隔已拉长。
  2. 清理锁进程后,检查 sanlock / lvmlockd 进程是否退出。
  3. 升级后检查 sanlock 版本是否为 3.8.x,并确认 vgs 返回正常。

原因说明

本次变更的根本目的是修复 SharedBlock 场景下 vgchange 卡住和锁未自动释放问题,因此修复核心不是业务侧操作,而是对底层 sanlock 组件进行逐台升级,并在升级前后严格控制锁进程状态和自动重连行为。

解决方案

  1. 执行前准备
  • 风险等级:高
  • 先关闭云主机全局高可用。
  • 先把物理机和存储 ping 间隔调整到 24h (86400s)。
  • 必须逐台升级,不要并发处理多台物理机。
  1. 处理步骤
  2. 关闭云主机全局高可用。
  • 预期结果:避免运维期间误触发 HA。
  1. 在全局配置中把物理机和存储 ping 间隔调到 86400 秒。
  • 预期结果:避免物理机自动重连覆盖升级操作。
  1. 强制结束锁进程并验证:
   pkill -9 sanlock && pkill -9 lvmlockd
   ps -ef | grep -E "sanlock|lvmlockd"
  • 预期结果:旧的锁进程被清理,环境可进入升级状态。
  1. 上传 sanlock rpm 包到目标物理机。
  • 预期结果:升级包准备就绪。
  1. 单台升级 sanlock:
   yum install ./sanlock*.rpm
  • 预期结果:当前节点安装新版本组件。
  1. 检查版本:
   rpm -qa | grep sanlock
  • 预期结果:版本为 3.8.x。
  1. 启动并检查服务:
   systemctl start sanlock.service
   systemctl start lvm2-lvmlockd
   systemctl status sanlock.service
   systemctl status lvm2-lvmlockd
  • 预期结果:锁服务恢复正常。
  1. 重连物理机,并检查:
   vgs
  • 预期结果:vgs 返回正常,不再卡住。
  1. 单台确认无误后,再依次升级其他物理机。
  2. 全部完成后恢复 ping 间隔配置。
  3. 做全量检查:
  • vgs
  • pvs
  • 进程检查:
     ps -ef | grep -E 'lvchange|lvcreate|lvrename|lvresize|lvextend|lvremove|lvs|vgs|pvs|vgchange'
  • 服务检查:
     systemctl status sanlock.service
     systemctl status lvm2-lvmlockd
  • 预期结果:所有物理机、锁服务和 LVM 相关进程都恢复正常。
  1. 确保各资源正常后,开启云主机全局高可用。
  • 预期结果:升级流程收口完成。

验证方法

  • 检查 sanlock 版本已为 3.8.x。
  • 检查 vgs / pvs 均正常返回。
  • 检查 sanlock 和 lvm2-lvmlockd 服务状态正常。
  • 检查主机重连和业务资源状态正常。

风险与回滚

  • 风险:sanlock 属底层锁组件升级,会直接影响 SharedBlock 业务连续性。
  • 风险:若升级前不关闭高可用或不拉长 ping 间隔,可能被自动重连打断。
  • 风险等级:高。
  • 回滚步骤:
  1. 关闭高可用。
  2. 再次清理锁进程。
  3. 执行:
     yum downgrade sanlock-3.8.3-1.el7.x86_64 sanlock-lib-3.8.3-1.el7.x86_64
  1. 重新启动 sanlock / lvm2-lvmlockd 并检查。
  2. 重连物理机。
  3. 资源正常后重新开启高可用。
ZStack Cloud 4.3.x ShareBlock sanlock 升级:处理 vgchange 卡住和锁未释放 | 技术方案 · KB | ZStack 资源中心