
简介这份《Openstack安装部署手册》面向云计算运维人员、OpenStack初学者及需要搭建私有云环境的工程师以Havana版本为基准系统梳理从环境准备到核心组件落地的完整部署路径。内容涵盖网卡配置、主机名修改、MySQL数据库安装等前置步骤并逐一讲解Keystone认证服务、Glance镜像服务、Nova计算服务、Swift对象存储、Cinder块存储与Neutron网络服务的安装与配置要点同时涉及Messaging Server通信、授权令牌定义、密钥与证书配置、用户租客与roles划分、API endpoint创建等关键环节。资源包内含1个docx文档大小约519KB目录结构清晰按章节组织便于对照查阅。目前已有369人学习关注适合希望快速掌握OpenStack组件关系与部署流程、减少环境搭建试错成本的读者参考使用。1. 从一份 Openstack 安装部署手册说起Havana 版云平台到底怎么落地很多人第一次接触 Openstack都是被一份《Openstack安装部署手册.docx》带进门的。文档里写着 Havana 版本、控制节点、计算节点、网络节点看着像一份标准作业指导书真照着敲命令时却处处卡壳Keystone 起不来、Nova 连不上 RabbitMQ、Neutron 的网桥配完虚拟机就是不通。问题不在你手笨而在于 Openstack 从来不是「装几个包」那么简单它是一整套云平台的编排系统安装部署的本质是把认证、计算、存储、网络、消息队列、数据库这几条链路按正确顺序串起来。这篇笔记就围绕这份手册背后的技术栈把 Havana 时代的经典部署路径拆开讲清楚它解决的是「从零搭出一套能创建虚拟机的私有云」这件事适合手里有 3 台以上物理机或虚拟机、想真正跑通 Openstack 全流程的运维和云计算从业者。热词里常出现的 openstack云平台搭建、基于packstack安装openstack其实都是这条路上的不同走法后面会一并对比。2. Havana 版 Openstack 的组件依赖与部署顺序为什么顺序错了必翻车2.1 先认清 Havana 的六个核心组件和它们的关系Havana 是 Openstack 在 2013 年底发布的版本代号对应的是那个时期最稳定的一套架构。它的核心组件包括Keystone 负责认证和令牌发放是所有组件的前置依赖Glance 管镜像Nova 管计算实例生命周期Neutron 管网络Cinder 管块存储Horizon 提供 Web 控制台。除此之外还有两个「隐形主角」RabbitMQ 做组件间消息通信MySQL 存各服务的状态数据。这些组件的依赖关系是单向的Keystone 最先因为它要给其他所有服务发令牌MySQL 和 RabbitMQ 要在 Keystone 之前就绪因为 Keystone 自己也要存数据、也要发消息。Glance、Nova、Neutron、Cinder 之间没有严格的先后但它们都必须在 Keystone 注册完 endpoint 之后才能正常通信。Horizon 最后装因为它依赖前面所有服务的 API。我一般把部署顺序固定成系统基础环境 → MySQL → RabbitMQ → Keystone → Glance → Nova控制节点→ Neutron控制节点→ Cinder → Horizon → 计算节点 Nova → 网络节点 Neutron。这个顺序不是官方强制但按它走出问题时排查范围最小。2.2 用 Packstack 快速验证还是手工分步部署热词里「基于packstack安装openstack」出现频率很高说明很多人想先快速看到效果。Packstack 是 Red Hat 系的一个应答式安装工具一条命令就能把 all-in-one 或双节点的 Openstack 拉起来。它的优点是快缺点是黑匣子——出错了你很难知道是哪一步的配置有问题。我的建议是如果你只是想验证 Openstack 能不能跑用 Packstack 没问题但如果你要真正理解安装部署手册里的每一步必须手工分步做一遍。下面给一个 Packstack 的最小验证命令再给手工部署的关键步骤。# 在 CentOS 7 上安装 packstackHavana 时代对应 RHEL/CentOS 6/7 yum install -y centos-release-openstack-havana yum install -y openstack-packstack # 生成应答文件只装核心组件all-in-one 模式 packstack --gen-answer-fileanswer.txt # 编辑 answer.txt关键参数如下 # CONFIG_KEYSTONE_ADMIN_PW你的密码 # CONFIG_NOVA_COMPUTE_HOSTS本机IP # CONFIG_NEUTRON_INSTALLy # CONFIG_NEUTRON_L2_PLUGINopenvswitch # CONFIG_GLANCE_INSTALLy # CONFIG_CINDER_INSTALLy # 执行安装 packstack --answer-fileanswer.txt这段命令的逻辑是先装 Packstack 工具本身生成一份默认应答文件然后按需修改关键参数再执行。参数里CONFIG_KEYSTONE_ADMIN_PW是 Keystone 管理员密码后面登录 Horizon 和做 API 调用都要用CONFIG_NEUTRON_L2_PLUGIN选 openvswitch 是因为 Havana 时代 OVS 是主流Linuxbridge 虽然也能用但功能受限。执行完如果看到Successfully installed不代表万事大吉还要验证 Keystone 令牌能不能拿到、Nova 服务列表是不是全 up。手工部署的关键步骤则是先配好 hosts 解析和 SELinux 策略再装 MySQL 并建库授权然后装 RabbitMQ 并建 openstack 用户接着装 Keystone 并初始化数据库、注册 admin 用户和 service 项目最后才是 Glance、Nova 等。每一步做完都要用keystone token-get或nova service-list验证不要攒到最后一起查。2.3 控制节点、计算节点、网络节点的角色划分Havana 时代最经典的部署拓扑是三个角色分开控制节点跑 Keystone、Glance、Nova API、Neutron Server、Cinder API、Horizon、MySQL、RabbitMQ计算节点只跑 Nova Compute 和 Neutron OVS Agent网络节点跑 Neutron L3 Agent、DHCP Agent、Metadata Agent 和 OVS Agent。这种划分的好处是职责清晰坏处是网络节点容易成为瓶颈。如果只是测试环境把三个角色合并到一台机器上也能跑但生产环境不建议。判断一个节点该装什么看它需要跟哪些服务通信计算节点只需要跟控制节点的 RabbitMQ、MySQL、Keystone、Glance、Neutron 通信所以它上面不需要装数据库和消息队列。3. 手工部署 Keystone 与 Glance从建库到验证令牌的完整命令3.1 Keystone 的数据库初始化和 endpoint 注册Keystone 是 Openstack 的认证入口它自己也需要一个数据库存用户、项目、角色和令牌。手工部署时先在 MySQL 里建库授权CREATE DATABASE keystone; GRANT ALL PRIVILEGES ON keystone.* TO keystonelocalhost IDENTIFIED BY KEYSTONE_DBPASS; GRANT ALL PRIVILEGES ON keystone.* TO keystone% IDENTIFIED BY KEYSTONE_DBPASS; FLUSH PRIVILEGES;这段 SQL 做了两件事建 keystone 库然后授权本地和远程访问。KEYSTONE_DBPASS要换成你自己的密码后面配置文件里要一致。注意%是允许远程连接如果控制节点和数据库不在同一台机器上这条必须有。接着装 Keystone 包、改配置文件、同步数据库yum install -y openstack-keystone python-keystoneclient # 编辑 /etc/keystone/keystone.conf # [database] # connection mysql://keystone:KEYSTONE_DBPASS控制节点IP/keystone # [DEFAULT] # admin_token ADMIN_TOKEN # 同步数据库 su -s /bin/sh -c keystone-manage db_sync keystone # 初始化 admin 用户和角色 export OS_SERVICE_TOKENADMIN_TOKEN export OS_SERVICE_ENDPOINThttp://控制节点IP:35357/v2.0 keystone user-create --nameadmin --passADMIN_PASS --emailadminexample.com keystone role-create --nameadmin keystone tenant-create --nameadmin keystone user-role-add --useradmin --tenantadmin --roleadmin这里的admin_token是 Keystone 的超级令牌用于在还没有用户体系时做初始化操作。OS_SERVICE_TOKEN和OS_SERVICE_ENDPOINT是环境变量告诉 keystone 客户端用哪个令牌和哪个地址。初始化完 admin 用户后就可以用 admin 账号来注册其他服务的 endpoint 了。注册 Glance 的 endpoint 示例keystone service-create --nameglance --typeimage --descriptionGlance Image Service keystone endpoint-create \ --service-id$(keystone service-list | awk / image / {print $2}) \ --publicurlhttp://控制节点IP:9292 \ --internalurlhttp://控制节点IP:9292 \ --adminurlhttp://控制节点IP:9292service-create创建服务条目endpoint-create创建访问入口。publicurl 给外部用户用internalurl 给内部服务用adminurl 给管理操作用。测试环境三者可以一样生产环境建议分开。3.2 Glance 的镜像存储后端选择与上传验证Glance 管镜像它的存储后端可以是本地文件系统、Swift、Ceph 等。Havana 时代最常用的是本地文件系统简单直接。配置文件/etc/glance/glance-api.conf里关键项[DEFAULT] default_store file filesystem_store_datadir /var/lib/glance/images/ [database] connection mysql://glance:GLANCE_DBPASS控制节点IP/glance [keystone_authtoken] auth_uri http://控制节点IP:5000 auth_host 控制节点IP auth_port 35357 auth_protocol http admin_tenant_name service admin_user glance admin_password GLANCE_PASSdefault_store file表示用本地文件存镜像filesystem_store_datadir是存储路径。keystone_authtoken段是 Glance 向 Keystone 认证用的admin_tenant_name一般是 service 项目admin_user是 glance 用户。这些用户和项目要在 Keystone 里提前建好。同步数据库、启动服务、上传测试镜像su -s /bin/sh -c glance-manage db_sync glance systemctl start openstack-glance-api systemctl start openstack-glance-registry # 下载一个测试用 cirros 镜像并上传 glance image-create --namecirros --disk-formatqcow2 \ --container-formatbare --filecirros-0.3.2-x86_64-disk.img # 验证 glance image-listglance-manage db_sync建表两个 systemctl 启动 API 和 registry 服务。上传镜像时--disk-format和--container-format要跟镜像实际格式一致cirros 是 qcow2 格式、bare 容器。上传完用glance image-list看到镜像状态是 active 才算成功。如果卡在 queued多半是存储路径权限不对或 Keystone 认证失败。4. Nova 与 Neutron 联调实例起不来时先查这三条链路4.1 Nova 控制节点与计算节点的配置差异Nova 是 Openstack 的计算核心控制节点跑 API、调度器、 conductor计算节点跑 nova-compute。控制节点的/etc/nova/nova.conf关键配置[DEFAULT] auth_strategy keystone rpc_backend rabbit rabbit_host 控制节点IP rabbit_userid openstack rabbit_password RABBIT_PASS my_ip 控制节点IP [database] connection mysql://nova:NOVA_DBPASS控制节点IP/nova [keystone_authtoken] auth_uri http://控制节点IP:5000 auth_host 控制节点IP auth_port 35357 auth_protocol http admin_tenant_name service admin_user nova admin_password NOVA_PASS计算节点的 nova.conf 大部分一样但my_ip要改成计算节点自己的 IP并且要加vnc_enabled true和vncserver_listen 计算节点IP否则控制台打不开。rpc_backend rabbit表示用 RabbitMQ 做消息通信rabbit_host指向控制节点。如果 RabbitMQ 连不上Nova 服务会起不来或者起来后不响应。同步数据库、启动服务su -s /bin/sh -c nova-manage db sync nova systemctl start openstack-nova-api systemctl start openstack-nova-scheduler systemctl start openstack-nova-conductor # 计算节点上 systemctl start openstack-nova-compute # 验证 nova service-listnova service-list应该看到 nova-api、nova-scheduler、nova-conductor、nova-compute 都是 up 状态。如果有 down 的先看日志/var/log/nova/下对应的 log最常见的是 RabbitMQ 认证失败或数据库连不上。4.2 Neutron 的 OVS 网桥配置与租户网络打通Neutron 是 Havana 时代最复杂的组件网络不通是新手最大的坑。控制节点的/etc/neutron/neutron.conf和/etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini要配合改。关键配置# neutron.conf [DEFAULT] core_plugin neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2 rabbit_host 控制节点IP rabbit_userid openstack rabbit_password RABBIT_PASS [database] connection mysql://neutron:NEUTRON_DBPASS控制节点IP/neutron [keystone_authtoken] auth_uri http://控制节点IP:5000 admin_tenant_name service admin_user neutron admin_password NEUTRON_PASS# ovs_neutron_plugin.ini [ovs] tenant_network_type gre tunnel_id_ranges 1:1000 integration_bridge br-int tunnel_bridge br-tun local_ip 控制节点IP [securitygroup] firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDrivertenant_network_type gre表示租户网络用 GRE 隧道tunnel_id_ranges是隧道 ID 范围。local_ip是本节点用于隧道通信的 IP。网络节点还要配 L3 agent 和 DHCP agent计算节点只跑 OVS agent。创建租户网络和子网neutron net-create demo-net neutron subnet-create demo-net 10.0.0.0/24 --name demo-subnet --gateway 10.0.0.1 neutron router-create demo-router neutron router-interface-add demo-router demo-subnet neutron router-gateway-set demo-router external-net这几条命令创建了一个租户网络、子网、路由器并把路由器连到外部网络。external-net是提前创建好的外部网络对应物理网卡。如果虚拟机起不来但网络配置看着都对先查neutron agent-list看各 agent 是不是 alive再查 OVS 网桥ovs-vsctl show看 br-int、br-tun、br-ex 是不是都在。4.3 用 cirros 实例验证全链路前面都配好后启动一个 cirros 实例做端到端验证nova boot --flavor m1.tiny --image cirros --nic net-id$(neutron net-list | awk / demo-net / {print $2}) test-vm nova list nova console-log test-vmnova boot创建实例--flavor选规格--image选镜像--nic指定网络。创建后用nova list看状态从 BUILD 变成 ACTIVE 才算成功。如果一直 BUILD看nova console-log和/var/log/nova/nova-compute.log。能 ping 通实例 IP、能 SSH 进去说明 Keystone、Nova、Neutron、Glance 全链路通了。5. Openstack 安装部署避坑这 5 个问题让新手反复重装5.1 现象Keystone 启动报 503日志显示数据库连接失败原因通常是 keystone.conf 里的 connection 字符串格式不对或者 MySQL 用户授权没做远程访问。Havana 时代 SQLAlchemy 的连接串是mysql://user:passhost/db少一个斜杠或密码里有特殊字符都会失败。解决方法是先用mysql -u keystone -p -h 控制节点IP手动连一次确认能连上再改配置文件。如果密码里有或#要在配置文件里转义或换密码。5.2 现象Nova 服务列表里 nova-compute 是 down先看计算节点的/var/log/nova/nova-compute.log最常见的原因是 RabbitMQ 连不上或my_ip配错。RabbitMQ 连不上一般是 openstack 用户没建或权限不对用rabbitmqctl list_users和rabbitmqctl list_permissions检查。my_ip如果配成了 127.0.0.1控制节点就找不到计算节点。解决方法是改my_ip为计算节点真实 IP重启 nova-compute再在控制节点nova service-list确认。5.3 现象虚拟机创建后一直 BUILD最后变成 ERROR看nova console-log和计算节点的 nova-compute.log。常见原因有三个Glance 镜像没上传成功或格式不对Neutron 网络没配通实例拿不到 IP计算节点没装 KVM 或嵌套虚拟化没开。如果是嵌套虚拟化环境要在物理机的 KVM 里给虚拟机开nested参数。解决方法是先glance image-list确认镜像 active再neutron net-list确认网络存在最后在计算节点virsh list --all看实例有没有真正起来。5.4 现象Horizon 能登录但看不到实例或报错Horizon 的配置文件/etc/openstack-dashboard/local_settings里OPENSTACK_HOST要指向控制节点 IPOPENSTACK_KEYSTONE_URL要写http://控制节点IP:5000/v2.0。如果登录后报权限错误检查 Keystone 里 admin 用户的角色和项目绑定对不对。Havana 时代 Horizon 对浏览器版本也有要求太新的浏览器可能不兼容换 Firefox ESR 或旧版 Chrome 试试。5.5 现象重启后所有服务起不来手动启动又正常这是 SELinux 和防火墙的锅。Havana 时代很多手册让你关 SELinux 和 firewalld但生产环境不能关。正确做法是给 Openstack 相关端口加防火墙规则给 SELinux 加策略或设成 permissive 先验证。如果关了 SELinux 还是起不来检查服务是不是设了开机自启systemctl enable openstack-keystone等。重启后服务顺序也有影响MySQL 和 RabbitMQ 要先起来其他服务才能连上。6. 从 Havana 手册到现代 Openstack一套验证部署是否成功的检查清单Havana 虽然老但它把 Openstack 的核心链路暴露得最清楚。现代版本用 Kolla-Ansible、TripleO 或 Openstack-Helm 部署底层逻辑没变只是容器化和自动化了。如果你手里有一份 Havana 安装部署手册别急着逐条敲先按下面的清单验证每一步检查项命令预期结果Keystone 令牌keystone token-get返回 token 和过期时间服务列表keystone service-list看到 glance、nova、neutron、cinder 等端点列表keystone endpoint-list每个服务有 public/internal/admin 三个 URLNova 服务nova service-list所有服务 State 为 upNeutron agentneutron agent-list所有 agent Alive 为 :-)镜像glance image-list镜像 Status 为 active网络neutron net-list租户网络和外部网络都在实例nova list实例 Status 为 ACTIVE这张表我每次部署完都会跑一遍任何一项不对就停下来查不要往下走。Havana 时代最容易忽略的是 endpoint 的 adminurl很多操作失败是因为 adminurl 写成了 publicurl导致服务间调用走外部地址被防火墙拦了。最后一个技巧把部署过程写成脚本但不要写成一个大脚本。按组件拆成多个小脚本每个脚本只做一件事执行完输出验证结果。这样出问题时你知道是哪个组件挂了重跑也只需要重跑那一个。我早期图省事写了一个 all-in-one 脚本结果 Keystone 挂了导致后面全挂排查了一整天才发现是 MySQL 密码里有个特殊字符没转义。从那以后我坚持分步验证每一步都留后悔药。希望帮到你。本文还有配套的精品资源点击获取