高可用、升级与排障¶
高可用不是一个开关¶
生产 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、数据库和入口做独立监控。
没有 Leader 时重点检查各 Front-end 的 /var/log/one/oned.log、节点间连通性、时钟和多数派状态。不要在网络分区时随意强制多个节点成为 Leader。
Host 维护与 VM HA¶
宿主机计划维护时:
- 停止向该 Host 调度新 VM。
- 确认目标节点有足够 CPU、内存和兼容的网络/存储。
- 按业务要求执行热迁移、关机迁移或停机。
- 检查迁移后业务,而不只检查 VM 状态。
- 完成维护后先恢复监控和小批量调度,再全面投入。
宿主机突发故障时,VM HA 可以尝试在其他节点重新启动,但前提是磁盘仍可访问、网络一致并且集群有剩余容量。它不是无中断热切换,应用仍需处理重启和连接中断。
备份范围¶
至少包含:
- OpenNebula 数据库,使用受支持的
onedb/数据库备份流程。 /etc/one配置及自行维护的服务、代理和证书配置。/var/lib/one中需要恢复的凭据、状态或共享内容。- Image/System Datastore 中的镜像和 VM 数据。
- 客户机内数据库和应用数据的一致性备份。
- 自动化代码、模板定义、网络与存储映射文档。
只有数据库备份不能恢复 VM 磁盘;只有存储快照也不能可靠恢复控制面对象关系。恢复演练必须覆盖二者的一致性。
升级流程¶
- 阅读目标版本升级指南、支持矩阵和已知问题。
- 在测试环境复制关键配置、模板和代表性工作负载。
- 完成数据库、配置和关键 VM 备份并验证可读。
- 使用
onecfg检查和迁移配置差异,使用onedb完成数据库检查/升级。 - 按官方顺序升级 Front-end 和 Host 组件。
- 验证 Web、CLI、API、调度、监控、镜像、网络和迁移。
- 保留明确的停止点和回退条件,不在未验证时连续跨多个大版本。
版本升级不能只替换软件包。旧配置文件直接覆盖新版本默认配置,可能遗漏新增参数;反过来只用新配置也会丢失现有驱动和认证设置。
日常巡检¶
onehost list
onevm list
onevm top
onedatastore list
onevnet list
oneimage list
onezone show <ZONE_ID>
重点观察:
- Host 状态、CPU/内存超分和不可调度节点。
- 长时间处于
PENDING、PROLOG、BOOT、EPILOG或FAILURE的 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、监控系统、升级指南。