问题说明
本文用于排查“模板创建的虚拟机跨集群迁移报 No host available”。在完成证据检查前,不将该现象归因于单一产品缺陷。
现象
基于模板创建的虚拟机跨集群/存储迁移时找不到目标主机,报 No host available for block live migration;使用普通镜像创建的虚拟机 可能正常。
适用环境
- 产品:ZVF ZSphere
- 版本:5.0.3(已记录案例)
- 组件:ZSphere 跨集群存储迁移、资源绑定和 Host Allocator
- 部署形态:虚拟机 从源集群迁移到只能由目标集群访问的数据存储
可能原因
确认 虚拟机 创建时带有 resourceBindings::Cluster:SOURCE_CLUSTER_UUID 系统标签。源集群主机因无法访问目标数据存储被 HostPrimaryStorageAllocatorFlow 过滤,目标集群主机又因 not bound resource 被 ResourceBindingAllocatorFlow 过滤,最终没有主机同时满足两个条件。失败发生在迁移数据面启动前,不是 SharedBlock Agent 或实际拷贝失败。
排查步骤
1. 找到把候选主机降为 0 的 allocator flow
- 检查对象:失败迁移 API/LongJob、源/目标集群和目标数据存储。
- 操作位置:在
management-server.log按 API ID 检索rejected candidate host,按 allocator flow 的执行顺序整理候选主机数量和拒绝理由。 - 预期结果:至少有一台主机同时可访问目标数据存储并满足 虚拟机 资源绑定。
- 异常处理:最后由
ResourceBindingAllocatorFlow以not bound resource把候选数降为 0 时,进入绑定标签分支;如果是容量、CPU 或存储 flow 清零,则转入对应排查。
2. 查询 虚拟机 上的集群绑定标签
- 检查对象:失败虚拟机的系统标签和创建请求。
- 操作位置:通过受支持查询查看是否存在
resourceBindings::Cluster:SOURCE_CLUSTER_UUID,并核对 UUID 是否为 虚拟机 当前源集群;同时对比模板创建 虚拟机 与普通镜像创建 虚拟机。 - 预期结果:需要跨集群迁移的 虚拟机 不应仍被绑定到源集群。
- 异常处理:标签存在且目标主机属于另一集群时,即可解释
not bound resource;不要继续排查数据拷贝或强制迁移。
3. 通过虚拟机级策略解除绑定
临时方案(Workaround)
- 适用条件:allocator 日志已经证明
ResourceBindingAllocatorFlow因源集群绑定把目标候选降为零,业务也接受解除绑定后扩大的 HA/DRS 调度范围;容量或存储 flow 清零时不适用。 - 已验证自助方案:先由业务负责人确认该 虚拟机 可以跨集群调度,再在虚拟机级打开“跨集群高可用”策略;随后重新查询,确认
resourceBindings::Cluster:*已按产品流程删除。 - 预期结果:目标集群主机不再被
ResourceBindingAllocatorFlow拒绝,同时仍能访问目标数据存储。 - 异常处理:只修改集群/全局配置但虚拟机 标签仍在时不会生效;不要直接修改数据库或手工删除系统标签,交由 ZStack 技术支持核对版本行为。
4. 迁移并复核隔离边界
- 检查对象:同一虚拟机的新迁移任务、目标主机选择和 HA/DRS 范围。
- 操作位置:先迁移一台测试或低风险 虚拟机,确认 host allocation 通过并完成数据迁移,再扩展到其余 虚拟机。
- 预期结果:迁移成功,目标主机与数据存储可达,且业务接受解除绑定后扩大的 HA/DRS 调度范围。
- 异常处理:解除标签后仍无主机可用时,重新查看新的最后失败 flow;不要默认仍是资源绑定问题。
补充信息
- 提交支持信息时,应包含准确时间窗、资源和任务 UUID、完整错误文本及相关组件日志。
- 不能从单个现场结果外推所有版本;根因未闭合或操作可能影响业务、数据时,应停止自助处理并提交本文列出的证据。
