适用场景
- 产品:
ZCF - 组件:
Cloud - 版本:
4.3.x、3.8.x - 部署形态:双管理节点
- 触发条件:需要通过升级
sanlock组件,优化vgchange卡住和存储故障后锁未自动释放问题。
问题现象
- 环境存在
vgchange卡住。 - 存储故障后锁未自动释放。
- 需要通过升级底层
sanlock和配套锁服务缓解问题。
判断方法
- 升级前确认物理机和存储
ping间隔已拉长。 - 清理锁进程后,检查
sanlock/lvmlockd进程是否退出。 - 升级后检查
sanlock版本是否为3.8.x,并确认vgs返回正常。
原因说明
本次变更的根本目的是修复 SharedBlock 场景下 vgchange 卡住和锁未自动释放问题,因此修复核心不是业务侧操作,而是对底层 sanlock 组件进行逐台升级,并在升级前后严格控制锁进程状态和自动重连行为。
解决方案
- 执行前准备
- 风险等级:高
- 先关闭云主机全局高可用。
- 先把物理机和存储
ping间隔调整到24h (86400s)。 - 必须逐台升级,不要并发处理多台物理机。
- 处理步骤
- 关闭云主机全局高可用。
- 预期结果:避免运维期间误触发 HA。
- 在全局配置中把物理机和存储
ping间隔调到86400秒。
- 预期结果:避免物理机自动重连覆盖升级操作。
- 强制结束锁进程并验证:
pkill -9 sanlock && pkill -9 lvmlockd
ps -ef | grep -E "sanlock|lvmlockd"
- 预期结果:旧的锁进程被清理,环境可进入升级状态。
- 上传
sanlockrpm 包到目标物理机。
- 预期结果:升级包准备就绪。
- 单台升级
sanlock:
yum install ./sanlock*.rpm
- 预期结果:当前节点安装新版本组件。
- 检查版本:
rpm -qa | grep sanlock
- 预期结果:版本为
3.8.x。
- 启动并检查服务:
systemctl start sanlock.service
systemctl start lvm2-lvmlockd
systemctl status sanlock.service
systemctl status lvm2-lvmlockd
- 预期结果:锁服务恢复正常。
- 重连物理机,并检查:
vgs
- 预期结果:
vgs返回正常,不再卡住。
- 单台确认无误后,再依次升级其他物理机。
- 全部完成后恢复
ping间隔配置。 - 做全量检查:
vgspvs- 进程检查:
ps -ef | grep -E 'lvchange|lvcreate|lvrename|lvresize|lvextend|lvremove|lvs|vgs|pvs|vgchange'
- 服务检查:
systemctl status sanlock.service
systemctl status lvm2-lvmlockd
- 预期结果:所有物理机、锁服务和 LVM 相关进程都恢复正常。
- 确保各资源正常后,开启云主机全局高可用。
- 预期结果:升级流程收口完成。
验证方法
- 检查
sanlock版本已为3.8.x。 - 检查
vgs/pvs均正常返回。 - 检查
sanlock和lvm2-lvmlockd服务状态正常。 - 检查主机重连和业务资源状态正常。
风险与回滚
- 风险:
sanlock属底层锁组件升级,会直接影响 SharedBlock 业务连续性。 - 风险:若升级前不关闭高可用或不拉长
ping间隔,可能被自动重连打断。 - 风险等级:高。
- 回滚步骤:
- 关闭高可用。
- 再次清理锁进程。
- 执行:
yum downgrade sanlock-3.8.3-1.el7.x86_64 sanlock-lib-3.8.3-1.el7.x86_64
- 重新启动
sanlock/lvm2-lvmlockd并检查。 - 重连物理机。
- 资源正常后重新开启高可用。
