OpenStack生产云平台运维、升级与故障排查

OpenStack把计算、网络、存储、身份、镜像和编排组合成私有云。一次虚拟机创建会跨越Keystone、Nova、Neutron、Glance、Placement、消息队列、数据库和存储后端。生产排障必须沿请求ID和状态机定位,不能只重启某个服务。

一、核心服务

  • Keystone:身份与Token;
  • Nova:计算与实例生命周期;
  • Neutron:网络、端口、路由和安全组;
  • Glance:镜像;
  • Cinder:块存储;
  • Placement:资源库存与分配;
  • Horizon:控制台;
  • RabbitMQ:服务间消息;
  • MariaDB/Galera:控制面数据库;
  • Octavia:负载均衡;
  • Swift/Ceph:对象或统一存储后端。

二、控制面故障域

生产通常至少三个控制节点,分别保证:

  • API负载均衡;
  • 数据库多数派;
  • RabbitMQ仲裁;
  • Keystone和缓存;
  • 各服务Scheduler/Conductor;
  • 时间和DNS。

三节点不代表能随意同时维护两个节点。数据库、消息队列和服务选主有各自多数派要求。

三、统一请求追踪

OpenStack日志通常包含Request ID。排障时从CLI/API响应获取ID,在Nova、Neutron、Cinder等日志中串联。

openstack --debug server create ...
grep -R '<request-id>' /var/log/nova /var/log/neutron

统一时钟是关联日志的前提。所有节点使用可靠NTP/Chrony。

四、虚拟机创建链路

Keystone认证
  ↓
Nova API创建Build Request
  ↓
Placement选择资源
  ↓
Scheduler选择计算节点
  ↓
Conductor与Compute执行
  ↓
Glance取镜像
  ↓
Neutron创建端口
  ↓
Cinder挂载卷(可选)

实例卡在BUILD/ERROR时按状态、Fault、调度日志和计算日志逐段定位。

五、调度失败

常见 NoValidHost:

  • vCPU、内存或磁盘不足;
  • Placement库存不同步;
  • Aggregate/AZ不匹配;
  • Trait或资源类缺失;
  • NUMA、HugePage、CPU Pinning条件无法满足;
  • PCI/SR-IOV资源不足;
  • 计算服务Disabled/Down。
openstack compute service list
openstack hypervisor list
openstack resource provider list
openstack allocation candidate list --resource VCPU=2 --resource MEMORY_MB=4096

不要通过删除Placement Allocation来“快速修复”,先确认实例和资源真实状态。

六、Nova计算节点

监控:

  • nova-compute心跳;
  • Libvirt/QEMU;
  • CPU/NUMA/内存超分;
  • 本地临时盘;
  • 实例状态与Hypervisor实际状态;
  • 迁移任务;
  • Console;
  • 网络和存储连接。

计算节点维护先Disable调度,再迁移或疏散实例,确认清空后维护。

七、实例疏散

Evacuate用于计算节点故障后在其他节点重建实例。前提包括共享存储或可重建根盘、目标容量和网络可用。

执行前确认原节点确实不可恢复并隔离,避免同一实例双开。疏散后检查磁盘一致性、端口、卷挂载和应用状态。

八、Neutron网络

排障路径:

虚拟机网卡
→ TAP/veth
→ Linux Bridge/OVS/OVN
→ 隧道或Provider网络
→ 物理网卡
→ 交换机

检查端口状态、Binding、Security Group、DHCP、Metadata、Router、Namespace、OVS/OVN流表、隧道和物理VLAN。

九、DHCP与Metadata

虚拟机无地址时检查:

  • Neutron端口和MAC;
  • DHCP Agent或OVN DHCP;
  • Network Namespace;
  • dnsmasq;
  • 安全组和交换流表;
  • MTU;
  • 云初始化日志。

获取不到Metadata会导致SSH Key、主机名和Cloud-init失败,但网络本身可能已经可用。

十、安全组

安全组规则最终转化为iptables、OVS或OVN ACL。控制面显示规则存在不代表数据面已安装。

排障同时查看:

  • 端口绑定;
  • 远端组成员;
  • 数据面规则;
  • Conntrack;
  • 状态回程;
  • 主机内防火墙。

十一、Cinder块存储

卷创建或挂载失败可能位于API、Scheduler、Volume Service、后端存储、iSCSI/RBD/NVMe-oF或计算节点Connector。

openstack volume service list
openstack volume show <volume-id>
openstack server show <server-id>

不要随意在数据库修改卷状态。先确认后端是否存在、是否已映射、是否被主机使用,避免双重挂载或数据损坏。

十二、Glance镜像

治理:

  • 镜像来源、哈希和签名;
  • 可见范围;
  • 属性与架构;
  • 后端存储;
  • 镜像缓存;
  • 废弃和删除;
  • 漏洞扫描;
  • 大镜像下载性能。

镜像删除前检查是否仍用于自动扩容、模板和灾备。

十三、RabbitMQ

RabbitMQ异常会导致API请求接受后后台无响应。

监控:

  • 节点与仲裁;
  • 队列长度;
  • Unacked;
  • 连接和Channel;
  • 内存/磁盘水位;
  • 网络分区;
  • 消费速率;
  • 消息年龄。

不要在未知状态下同时重启全部RabbitMQ节点。

十四、数据库与Galera

关注:

  • 集群成员和Primary Component;
  • wsrep状态;
  • 流控;
  • SST/IST;
  • 慢SQL和锁;
  • 连接数;
  • 备份;
  • 数据库增长。

控制服务数据库需一致备份。跨服务恢复时要考虑资源状态关联,不能随意恢复单张表。

十五、配额与资源泄漏

用户看到“资源不足”可能是配额,也可能是Placement Allocation、Neutron Port、Cinder Attachment等残留。

排查:

  • 项目配额;
  • 实际资源;
  • 删除中/错误状态对象;
  • Placement分配;
  • 数据库与后端状态;
  • 最近失败操作。

清理孤儿资源前必须交叉验证对象ID和后端。

十六、监控体系

层次:

  • API可用性和延迟;
  • 服务进程和心跳;
  • 消息队列与数据库;
  • 资源池与配额;
  • 计算、网络、存储数据面;
  • 虚拟机创建、挂载、分配浮动IP等合成操作;
  • 业务租户体验。

只有进程监控无法发现“API正常但无法创建虚拟机”。

十七、备份范围

  • 各服务数据库;
  • /etc配置与密钥;
  • Keystone Fernet Key;
  • TLS证书;
  • RabbitMQ定义和必要状态;
  • Glance镜像;
  • Cinder/Swift/Ceph数据保护;
  • Provider网络和硬件配置;
  • Kolla/Ansible/Puppet等部署代码;
  • Secrets和Inventory。

恢复顺序要考虑身份、数据库、消息队列、API和数据面依赖。

十八、升级原则

OpenStack由多个项目组成,必须按当前发行版官方文档和部署工具规划。

升级前:

  • 阅读Release Notes与升级检查;
  • 验证源/目标版本路径;
  • 完成数据库和配置备份;
  • 集群健康;
  • 预留容量;
  • 测试环境演练;
  • 客户端/API兼容;
  • 数据库Migration时间评估。

十九、滚动升级

一般流程:

  1. 控制面和数据库前置检查;
  2. 升级控制服务;
  3. 执行数据库Expand迁移;
  4. 分批升级计算/网络/存储节点;
  5. 完成数据迁移;
  6. Contract迁移;
  7. 验证合成业务;
  8. 清理旧服务。

具体顺序依部署方式和版本而定,不能把通用流程当作命令手册。

二十、安全

  • 管理API与公网隔离;
  • Keystone最小权限和MFA;
  • Service Credential定期轮换;
  • Fernet Key正确同步和轮换;
  • TLS覆盖API和内部服务;
  • Metadata防SSRF;
  • 镜像可信;
  • 租户网络隔离;
  • 管理员操作审计;
  • Secrets不进入Git明文。

二十一、上线检查清单

  • [ ] 控制面、数据库和消息队列跨故障域;
  • [ ] Request ID可跨服务检索;
  • [ ] Placement、配额和后端资源一致性受监控;
  • [ ] Nova、Neutron、Cinder有分层Runbook;
  • [ ] 合成创建虚拟机、网络和卷测试持续运行;
  • [ ] 配置、数据库、密钥和数据后端均有备份;
  • [ ] 计算节点维护和疏散经过演练;
  • [ ] 升级路径、插件和部署工具兼容;
  • [ ] API、租户与管理身份最小权限;
  • [ ] 控制节点、计算节点、消息队列和存储故障已演练。

二十二、结语

OpenStack排障的核心是沿请求ID和资源状态机跨服务追踪。不要用重启所有控制服务替代定位,也不要直接修改数据库状态掩盖资源不一致。只有把控制面、消息队列、数据库和数据面同时纳入监控与恢复,私有云才能真正可运营。

参考资料

Copyright © yan-jian.com 2023 - 2026 · Powered by GitBook更新时间: 2026-10-29 20:20:36

results matching ""

    No results matching ""