跳转至

高可用、升级与排障

高可用不是一个开关

生产 OpenNebula 至少有五个需要分别设计的故障域:

层次 故障影响 保护方式示例
Front-end 控制面 无法新建、迁移或管理 VM 3/5 节点 Raft、浮动入口、共享内容
数据库 资源状态丢失或控制面不可用 数据库 HA、备份、一致性恢复流程
KVM Host 该节点上的 VM 中断 VM HA、容量预留、故障后重启
存储 VM 磁盘不可用或数据丢失 多副本/共享存储 HA、备份、容灾
网络 VM 或管理面失联 双链路、交换机冗余、网关 HA、路径监控

只配置 Front-end Raft,并不能自动获得 VM、存储和网络高可用。

Front-end Raft HA

官方建议使用 3 或 5 个 Front-end 节点,以奇数成员维持多数派。集群选出 Leader,写操作由 Leader 处理并复制日志;Leader 失效后,剩余节点重新选举。

生产设计还需要:

  • 一致的软件与服务配置。
  • 相同类型且可用的数据库连接。
  • 共享的服务凭据和规定目录。
  • 指向当前 Leader 或健康节点的浮动 IP/负载均衡入口。
  • 共享 Datastore 在所有 Front-end 上一致挂载。
  • 对 Raft 成员、Leader、数据库和入口做独立监控。
onezone show <ZONE_ID>

没有 Leader 时重点检查各 Front-end 的 /var/log/one/oned.log、节点间连通性、时钟和多数派状态。不要在网络分区时随意强制多个节点成为 Leader。

Host 维护与 VM HA

宿主机计划维护时:

  1. 停止向该 Host 调度新 VM。
  2. 确认目标节点有足够 CPU、内存和兼容的网络/存储。
  3. 按业务要求执行热迁移、关机迁移或停机。
  4. 检查迁移后业务,而不只检查 VM 状态。
  5. 完成维护后先恢复监控和小批量调度,再全面投入。

宿主机突发故障时,VM HA 可以尝试在其他节点重新启动,但前提是磁盘仍可访问、网络一致并且集群有剩余容量。它不是无中断热切换,应用仍需处理重启和连接中断。

备份范围

至少包含:

  • OpenNebula 数据库,使用受支持的 onedb/数据库备份流程。
  • /etc/one 配置及自行维护的服务、代理和证书配置。
  • /var/lib/one 中需要恢复的凭据、状态或共享内容。
  • Image/System Datastore 中的镜像和 VM 数据。
  • 客户机内数据库和应用数据的一致性备份。
  • 自动化代码、模板定义、网络与存储映射文档。

只有数据库备份不能恢复 VM 磁盘;只有存储快照也不能可靠恢复控制面对象关系。恢复演练必须覆盖二者的一致性。

升级流程

  1. 阅读目标版本升级指南、支持矩阵和已知问题。
  2. 在测试环境复制关键配置、模板和代表性工作负载。
  3. 完成数据库、配置和关键 VM 备份并验证可读。
  4. 使用 onecfg 检查和迁移配置差异,使用 onedb 完成数据库检查/升级。
  5. 按官方顺序升级 Front-end 和 Host 组件。
  6. 验证 Web、CLI、API、调度、监控、镜像、网络和迁移。
  7. 保留明确的停止点和回退条件,不在未验证时连续跨多个大版本。

版本升级不能只替换软件包。旧配置文件直接覆盖新版本默认配置,可能遗漏新增参数;反过来只用新配置也会丢失现有驱动和认证设置。

日常巡检

onehost list
onevm list
onevm top
onedatastore list
onevnet list
oneimage list
onezone show <ZONE_ID>

重点观察:

  • Host 状态、CPU/内存超分和不可调度节点。
  • 长时间处于 PENDINGPROLOGBOOTEPILOGFAILURE 的 VM。
  • Datastore 容量、inode、延迟和增长速度。
  • VNet 地址池余量和异常占用。
  • oned、调度器、FireEdge、数据库和监控采集是否正常。
  • /var/log/one 增长、重复错误和任务积压。

按 VM 状态排障

PENDING:调度失败

检查配额、Cluster 绑定、Host 容量、Datastore、VNet 地址池、SCHED_REQUIREMENTS 和 Rank 表达式。

PROLOG:磁盘准备失败

检查数据存储容量、挂载、权限、传输驱动、DNS/SSH、临时目录和大镜像传输超时。

BOOT:宿主机启动失败

检查 libvirt、KVM 模块、CPU/机器类型、磁盘路径、网络桥、设备直通和生成的 Domain XML。

RUNNING 但业务不通

平台状态只说明虚拟机进程存在。继续检查客户机启动日志、网卡配置、路由、DNS、防火墙、应用端口、时间和数据盘挂载。

Host ERROR

先区分管理网络/SSH 故障、监控探针故障、libvirt 故障和宿主机真实宕机。不要只看到 ERROR 就强制在其他节点启动 VM,必须确认原 VM 不再写入共享磁盘,避免双启动。

日志定位

ls -lh /var/log/one/
journalctl -u opennebula
journalctl -u opennebula-scheduler
journalctl -u opennebula-fireedge

实际服务名随版本和安装方式可能不同,应以当前系统单元为准。排障时记录 VM ID、Host ID、时间点和操作动作,再关联 oned、调度器、驱动和 Host 日志。

官方参考:Front-end HA监控系统升级指南