问题说明
提供 ZStack Cloud 云主机状态异常问题的结构化排查流程,重点覆盖 UI 显示 Unknown、Crashed、启动/停止/删除失败、平台状态与物理机底层状态不一致等场景。此类问题处理时必须优先防止脑裂,不能在未确认云主机实际运行位置前直接强制停止或修改状态。
现象
- 云平台 UI 显示云主机状态为“未知”或状态长时间不变化。
- 物理机失联或宕机后,云主机处于 Unknown 状态。
- 云主机停用、启动、删除失败,或 CLI 修改状态失败。
- 底层
virsh list --all显示云主机为crashed。 - 部分云主机业务正常,部分云主机不可用,平台状态无法准确反映实际运行状态。
适用环境
- 产品:ZCF
- 组件:Cloud
- 涉及对象:ZStack Cloud;云主机、物理机、KVM/libvirt、HA、共享存储、本地存储
- 版本:4.x-4.8.38
- 部署形态:单节点、多节点、共享存储、物理机失联或宕机场景
可能原因
该现象可能由以下一种或多种原因导致:
- 物理机失联或宕机:平台无法确认失联物理机上的云主机是否仍在运行,为防止脑裂保持 Unknown。
- 云主机未配置高可用:共享存储场景中,物理机失联后未开启 NeverStop 或高可用策略不满足,云主机不会自动恢复。
- 底层 libvirt 状态异常:云主机在底层显示
crashed、shut off或残留进程,平台状态未同步。 - 存储或网络异常:主存储失联、物理机网络异常、存储锁或主机锁未释放,导致启动或状态修改失败。
- 物理机硬件或系统故障:CPU/内存错误、内核异常、物理机假死或重启,导致其上云主机状态异常。
- 控制面或任务异常:创建、删除、启动等任务卡住,导致状态长时间处于中间态。
排查步骤
按顺序执行以下检查。每一步都应确认当前状态是否符合预期,或指出下一步处理动作。
1. 确认状态异常的类型和范围
- 检查项:确认是单台云主机异常,还是某台物理机上的所有云主机异常。
- 命令/UI 路径:
- 云平台查看云主机状态、所属物理机、最近任务、告警和 HA 策略。
- 记录云主机 UUID、物理机 UUID、主存储 UUID 和异常时间窗口。
- 预期结果:明确异常状态、影响范围、关联物理机和是否伴随物理机/主存储失联。
- 异常处理:
- 单台云主机异常优先检查底层 libvirt 状态和该云主机任务。
- 某台物理机上全部云主机 Unknown,优先排查物理机失联、宕机、网络和硬件。
2. 优先确认是否存在脑裂风险
- 检查项:确认云主机是否可能仍在某台物理机上运行。
- 命令/UI 路径:
virsh list --all | grep <vmUuid>
ps -ef | grep <vmUuid>
可在相关物理机上逐台确认;如涉及多台物理机,应按资源位置和迁移/HA 记录缩小范围。
- 预期结果:确认云主机实际运行状态和所在物理机。
- 异常处理:
- 未确认云主机不在任何物理机运行前,请勿直接执行强制停止、修改状态或指定其他物理机启动。
- 如果发现同一云主机在多台物理机运行,应按脑裂高风险事件处理,先保护业务和数据。
3. 检查物理机状态和 HA 策略
- 检查项:确认物理机是否失联、宕机、假死或已经恢复;确认云主机 HA 策略。
- 命令/UI 路径:
- 云平台查看物理机状态和 HA 策略。
- 管理节点查看物理机相关告警和状态切换日志。
- 物理机侧检查系统启动时间、硬件日志和系统日志。
- 预期结果:物理机正常连接,或可解释云主机 Unknown 的物理机失联/宕机事件。
- 异常处理:
- 共享存储场景下,未配置高可用的云主机在物理机失联后可能保持 Unknown。
- 若确认原物理机宕机且云主机未运行,可在授权后按流程修改状态为 Stopped,再指定其他物理机启动。
- 若希望后续自动恢复,应评估设置云主机高可用策略为 NeverStop。
4. 检查底层 libvirt 状态
- 检查项:确认底层
virsh状态是否与 UI 状态一致。 - 命令/UI 路径:
virsh list --all | grep <vmUuid>
virsh domstate <vmUuid>
- 预期结果:底层状态与平台状态一致,或能解释平台状态异常。
- 异常处理:
- 如果底层为
crashed,平台侧停用/启动失败,需要获取用户授权后再评估virsh destroy <vmUuid>等强制动作。 - 如果底层已经停止但平台仍 Unknown,可在确认无脑裂风险后通过 CLI 修正状态。
- 强制操作前必须保留日志、确认业务影响并获得授权。
5. 检查启动、停止、删除或状态修改失败原因
- 检查项:根据失败任务 UUID/API UUID 查看管理节点和 KVM agent 日志。
- 命令/UI 路径:
grep -a -n "<apiUuid-or-taskUuid-or-vmUuid>" /usr/local/zstack/apache-tomcat/logs/management-server.log*
grep -a -n "<apiUuid-or-taskUuid-or-vmUuid>" /var/log/zstack/zstack-kvmagent.log*
- 预期结果:能定位任务失败原因,例如锁未释放、主存储不可达、物理机不可用、libvirt 异常或权限不足。
- 异常处理:
- 如果报锁相关错误,先确认云主机是否仍在其他物理机运行,以及是否有未完成任务。
- 如果删除失败,检查主存储状态、卷状态和底层卷是否存在。
- 如果启动失败,先排查主存储、物理机资源、网络和底层 libvirt 状态。
6. 处理 Unknown 状态前的安全决策
- 检查项:确认是否具备修改状态或恢复启动的条件。
- 命令/UI 路径:
- 云平台确认云主机原始物理机、主存储、HA 策略和业务影响。
- 底层确认云主机没有运行进程。
- 预期结果:可证明云主机不会因状态修改或重新启动造成脑裂。
- 异常处理:
- 底层确认已停止后,可在授权后使用 CLI 将状态调整为 Stopped。
- 状态调整后再通过 UI 或 CLI 启动云主机,并验证系统和业务。
- 不能确认底层状态时,应先恢复物理机连接或收集更多证据。
7. 收集支持信息
- 云主机信息:UUID、名称、状态、HA 策略、所属物理机、主存储、最近任务。
- 物理机信息:连接状态、是否宕机/重启、系统启动时间、硬件事件、资源负载。
- 管理节点日志:
/usr/local/zstack/apache-tomcat/logs/management-server.log* - 计算节点日志:
/var/log/zstack/zstack-kvmagent.log* - 底层状态:
virsh list --all、virsh domstate、qemu 进程、相关 qemu 日志。 - 业务确认:云主机业务是否仍可访问,是否允许停机、强制停止或状态修正。
补充排查方法
基础排查命令
# 管理节点服务和集群基础状态
zstack-ctl status
systemctl status zstack-ha.service 2>/dev/null || true
systemctl status mariadb.service mysqld.service 2>/dev/null || true
zsha2 status 2>/dev/null || true
# 管理节点主日志和近期错误
ls -lh /usr/local/zstack/apache-tomcat/logs/management-server.log*
grep -iE 'ERROR|WARN|Exception|failed|timeout' /usr/local/zstack/apache-tomcat/logs/management-server.log | tail -n 200
# 基础资源与系统状态
df -hT
free -m
top -b -n 1 | head -n 30
journalctl -p warning --since '2 hours ago' --no-pager | tail -n 200
临时解决方案
- 先区分管理面显示异常、资源状态异常和底层业务异常;只在确认底层状态正常时,才考虑重连、刷新缓存、重试任务或重启管理服务。
- 如需重启管理节点服务,先确认 HA 状态、当前任务和业务窗口,优先单节点逐台处理,并保留
/usr/local/zstack/apache-tomcat/logs/management-server.log*。 - 涉及数据库修复、资源强制删除、主存储/镜像服务器重连等操作时,先完成数据库备份并记录回退方案。
云主机与计算节点专项检查
zstack-cli QueryVmInstance uuid=<vm-uuid>
zstack-cli QueryHost uuid=<host-uuid>
zstack-cli QueryVolume vmInstanceUuid=<vm-uuid>
virsh list --all
virsh domstate <vm-name-or-id>
virsh dumpxml <vm-name-or-id> > /tmp/vm.xml
systemctl status libvirtd zstack-kvmagent 2>/dev/null || true
grep -iE 'ERROR|Exception|failed|timeout|qmp|libvirt|domain' /var/log/zstack/zstack-kvmagent.log | tail -n 200
grep -iE '<vm-uuid>|<vm-name>' /usr/local/zstack/apache-tomcat/logs/management-server.log | tail -n 200
云主机类临时处理建议
- 云主机状态异常时先比对管理面、libvirt、QEMU 进程和业务侧状态,避免只根据 UI 状态执行停止或删除。
- 控制台黑屏优先检查 VNC/SPICE 端口、代理、浏览器、物理机 agent 和虚拟机显卡配置;业务正常时可先规避为 SSH/RDP 登录。
- 启动失败或异常关机应先保护 XML、agent 日志和管理日志;必要时先迁移/重连/刷新状态,强制操作需确认磁盘和快照链完整。
补充信息
- 排查结论需结合当前版本、服务状态、日志、集群健康、近期变更和现场影响面确认。
- 涉及数据库修改、强制删除、OSD/MON 重建、Pool 删除、服务重启或网络变更等高风险操作时,应先完成备份、审批和技术支持确认。
