OpenStack需按角色逐个部署Keystone、Nova、Neutron等服务,依赖数据库、消息队列、缓存等基础支撑服务;控制节点须先配置MariaDB、RabbitMQ、Memcached及主机名与hosts严格匹配;Neutron需手动创建br-ex网桥并绑定物理网卡;计算节点需启用KVM驱动并调优内核参数。

OpenStack 不是「一键安装」的软件包,它是一组协同工作的服务组件。直接用 yum install openstack 或 apt install openstack 是无效的——系统里根本不存在这个包。你真正要做的,是按角色(控制节点 / 计算节点)逐个部署 Keystone、Nova、Neutron 等服务,并确保它们之间能通过 API、数据库和消息队列正确通信。
控制节点必须先装好基础支撑服务
没数据库、没消息队列、没缓存,Keystone 启都启不了,Nova 更没法注册服务。别跳过这步,否则后面全是 Connection refused 或 ServiceUnavailable 错误。
-
mariadb-server:所有服务共用一个数据库实例,建库授权时注意用户名密码统一(比如openstack用户 + 统一密码),别在user_variables.yml和 SQL 命令里写错 -
rabbitmq-server:启动后必须运行rabbitmqctl add_user openstack RABBIT_PASS和rabbitmqctl set_permissions openstack ".*" ".*" ".*",缺权限会导致nova-conductor一直报AMQP connection failed -
memcached:Keystone 的 token 缓存依赖它,CentOS 上记得开服务:systemctl enable --now memcached,Ubuntu 要确认/etc/memcached.conf中-l 127.0.0.1没被注释掉
主机名和 /etc/hosts 必须严格匹配且不可省略
很多服务启动时会调用 socket.gethostname(),再反查 /etc/hosts 得到 IP。如果主机名是 controller.local,但 /etc/hosts 里只写了 192.168.10.10 controller,neutron-server 就会连不上自己的 metadata_agent,报 Failed to bind port。
- 用
hostnamectl set-hostname controller设置主机名(不要带域名后缀) -
/etc/hosts中必须有形如192.168.10.10 controller的纯 IP+短主机名条目,不能只有 FQDN - 执行
ping -c1 $(hostname)必须成功返回,否则所有服务初始化阶段都会失败
Neutron 网络配置最容易卡在 br-ex 和物理网卡绑定上
neutron_external_network_bridge 在配置文件里设成 br-ex,不代表它就自动存在。你得手动创建这个网桥,并把一块物理网卡(比如 ens33)的 IP 剥离、挂到桥上——否则外部网络流量进不来,虚拟机无法获取浮动 IP。
- 先停网卡:
ip link set ens33 down - 删原 IP:
ip addr flush dev ens33 - 建桥并加端口:
brctl addbr br-ex && brctl addif br-ex ens33 - 给桥配 IP:
ip addr add 192.168.30.10/24 dev br-ex && ip link set br-ex up - 检查:
brctl show看ens33是否在br-ex下;ip route看默认路由是否走br-ex
计算节点的 libvirt 驱动必须显式启用 KVM
即使 egrep '(vmx|svm)' /proc/cpuinfo 有输出,nova-compute 默认仍可能 fallback 到 qemu 模式,导致虚拟机启动极慢或直接失败。错误日志里会出现 libvirtError: internal error: process exited while connecting to monitor。
- 编辑
/etc/nova/nova.conf,确认以下三行存在且未被注释: virt_type = kvmcompute_driver = libvirt.LibvirtDriverenabled_virt_drivers = kvm- 重启服务前,运行
lsmod | grep kvm确保kvm_intel或kvm_amd已加载
真实部署中,最常被忽略的是时间同步和内核参数。所有节点必须跑 chronyd 且 systemctl status chronyd 显示 Active: active (running);vm.swappiness=1 和 transparent_hugepage=never 这两项不调,Nova 创建实例时大概率因内存分配失败而卡住。

















