简介这份《Openstack安装部署手册》面向云计算运维人员、OpenStack初学者及需要搭建私有云环境的技术人员以Havana版本为蓝本系统梳理从环境准备到核心组件落地的完整部署路径。内容涵盖网卡配置、主机名修改、MySQL数据库安装等前置步骤并逐一讲解Keystone认证服务、Glance镜像服务、Nova计算服务、Swift对象存储、Cinder块存储与Neutron网络服务的安装与配置要点同时涉及Messaging Server通信、授权令牌定义、密钥与证书配置、用户租客与roles划分、API endpoint创建等关键环节。资源包内共1个docx文档约519KB目录结构清晰按环境、组件结构、安装步骤、认证服务等模块分层组织便于按需查阅与对照实践。目前已有369人学习下载适合希望快速掌握OpenStack部署流程、理解各组件协作关系并完成基础环境搭建的读者参考使用。1. 单节点 Havana 部署一台 6GB 内存的机器怎么把 OpenStack 跑起来很多人第一次接触 OpenStack 安装部署卡住的地方不是命令记不住而是不清楚一台机器到底能不能同时扛下控制节点和计算节点。这份 Havana 版本的手册给了一个很实在的答案可以但有前提。它的目标环境是一台物理机主机名 Controller单网卡IP 192.168.205.1771 核 CPU、6GB 内存、1TB 硬盘操作系统 RedHat 6.3。在这个配置上它把 Keystone、Glance、Nova、Nova Network、Dashboard 全部塞进同一台机器同时额外装 nova-compute 和 nova-network 来提供计算与网络能力。这份手册适合两类人一类是需要在离线或半离线环境里快速搭一套能跑通创建虚拟机全流程的验证环境另一类是想理解 OpenStack 各组件之间认证、数据库、消息队列是怎么串起来的。它不追求高可用也不涉及 Neutron、Cinder、Swift 这些后续版本才成为主流的组件但正因为组件少、依赖浅反而适合拿来把 Keystone 的 token 机制、Glance 的镜像注册、Nova 的 endpoint 定义这些核心链路一次走通。下面按手册的实际顺序把每一步拆开讲清楚。2. 环境准备与基础依赖网卡、主机名、MySQL 和消息队列2.1 网卡与主机名的固定套路Havana 时代所有组件之间通信用的是主机名而不是 IP所以/etc/hosts必须先把 controller 解析到本机地址否则后面 Keystone 的 endpoint 注册会全部失败。手册里网卡配置用的是静态 IP关掉 NetworkManager这一点在 RedHat 6.3 上尤其重要因为 NetworkManager 和 network 服务同时开启时重启网卡会出现 IP 丢失的情况。# 配置网卡注意 ONBOOT 必须为 yes vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICEeth0 TYPEEthernet BOOTPROTOstatic IPADDR192.168.205.177 NETMASK255.255.255.0 DEFROUTEyes ONBOOTyes # 关闭 NetworkManager启用 network service NetworkManager stop chkconfig NetworkManager off service network start chkconfig network on主机名修改分两个文件/etc/sysconfig/network里的 HOSTNAME 决定系统启动后显示的名字/etc/hosts决定解析。两处必须一致否则keystone user-list这类命令会报连接超时。vi /etc/sysconfig/network HOSTNAMEcontroller vi /etc/hosts 127.0.0.1 localhost 192.168.205.177 controller参数说明IPADDR 换成你实际环境的地址但一旦确定后面所有配置文件里的 controller 都指向这个地址。NETMASK 和网关按实际网络填手册里没有写 GATEWAY如果机器需要访问外网 yum 源必须补上 GATEWAY 和 DNS1。2.2 MySQL 安装与绑定地址OpenStack 的 Keystone、Glance、Nova 各自需要独立的数据库但都跑在同一个 MySQL 实例上。手册里把 MySQL 的 bind-address 改成 192.168.205.177而不是默认的 127.0.0.1原因是组件通过主机名 controller 连接数据库如果只监听回环地址解析到 192.168.205.177 时会连不上。yum install mysql mysql-server MySQL-python vi /etc/my.cnf [mysqld] bind-address 192.168.205.177 service mysqld start chkconfig mysqld on mysql_install_db mysql_secure_installation这里有个容易忽略的点mysql_install_db只在初次安装时执行如果先启动了 mysqld 再执行会提示数据库已存在。mysql_secure_installation用来删除匿名用户、禁止 root 远程登录生产环境必须做实验环境可以跳过但建议走一遍。2.3 安装 OpenStack 包与 Messaging ServerHavana 的 yum 源依赖两个 rpm 包rdo-release-havana-6 和 epel-release-6-8。装完这两个包/etc/yum.repos.d/下会自动生成 openstack-havana 和 epel 的源配置。手册特别提醒外网环境不稳定安装失败后要清理失败的包再重试否则残留的半安装状态会让后续组件启动时报出各种找不到模块的错误。yum install openstack-utils yum install openstack-selinux yum upgrade reboot yum install qpid-cpp-server memcached vi /etc/qpidd.conf authno service qpidd start chkconfig qpidd onqpid 是 Havana 默认的消息队列authno表示关闭认证实验环境可以这样生产环境需要配置 SASL。memcached 用来缓存 Keystone 的 token不启动的话 Keystone 能跑但性能会差很多。装完这些基础依赖才进入真正的组件安装阶段。3. Keystone 认证服务token、租户、用户和 endpoint 的创建顺序3.1 数据库连接与 ADMIN_TOKEN 的生成Keystone 是整个 OpenStack 的入口所有组件都要先通过它认证。安装完 keystone 包后第一件事是配置数据库连接然后用openstack-db初始化库表。这个命令会自动创建 keystone 数据库和对应的用户密码就是 --password 后面跟的值。yum install openstack-keystone python-keystoneclient openstack-config --set /etc/keystone/keystone.conf \ sql connection mysql://keystone:KEYSTONE_DBPASScontroller/keystone openstack-db --init --service keystone --password KEYSTONE_DBPASSADMIN_TOKEN 是一个临时的高权限令牌在 Keystone 还没有创建任何用户之前用它来执行管理命令。手册用 openssl 随机生成一串十六进制数然后写入配置文件。ADMIN_TOKEN$(openssl rand -hex 10) echo $ADMIN_TOKEN openstack-config --set /etc/keystone/keystone.conf DEFAULT \ admin_token $ADMIN_TOKEN参数说明KEYSTONE_DBPASS 换成你自己的密码后面 Glance、Nova 的数据库密码不要和这个重复。ADMIN_TOKEN 生成后要记下来后面导出环境变量时要用。keystone-manage pki_setup用来生成签名证书Havana 的 token 是 PKI 格式不执行这一步 Keystone 启动会报证书缺失。keystone-manage pki_setup --keystone-user keystone --keystone-group keystone chown -R keystone:keystone /etc/keystone/* /var/log/keystone/keystone.log service openstack-keystone start chkconfig openstack-keystone on3.2 租户、用户、角色的创建与常见报错Keystone 启动后先用 ADMIN_TOKEN 导出环境变量然后创建 admin 和 service 两个租户。手册里提到创建租户时可能报错重启 keystone 能解决这个现象在 Havana 上确实常见原因是数据库连接池初始化慢第一次请求超时。export OS_SERVICE_TOKENADMIN_TOKEN export OS_SERVICE_ENDPOINThttp://controller:35357/v2.0 keystone tenant-create --nameadmin --descriptionAdmin Tenant keystone tenant-create --nameservice --descriptionService Tenant keystone user-create --nameadmin --passADMIN_PASS \ --emailadminexample.com keystone user-role-add --useradmin --tenantadmin --roleadmin创建完用户后需要把 admin 用户和 admin 租户、admin 角色绑定。然后创建 service 租户下的 glance、nova 用户这些用户用来让各组件之间互相认证。手册里 glance 和 nova 的用户都创建在 service 租户下角色给 admin这是 Havana 的惯例。keystone service-create --namekeystone --typeidentity \ --descriptionKeystone Identity Service keystone endpoint-create \ --service-id7711a2a72fb34caea36782f7cd669e03 \ --publicurlhttp://controller:5000/v2.0 \ --internalurlhttp://controller:5000/v2.0 \ --adminurlhttp://controller:35357/v2.0endpoint 的三个 URL 分别对应外部访问、内部组件访问和管理访问。实验环境里 public 和 internal 可以一样admin 用 35357 端口。service-id 是上一条命令返回的 id必须替换成实际值。创建完这些用keystone user-list验证能列出 admin 用户就说明认证链路通了。4. Glance 镜像服务从数据库初始化到镜像上传的完整链路4.1 Glance 的数据库与 Keystone 对接Glance 负责虚拟机镜像的存储和检索它需要自己的数据库也需要在 Keystone 里注册为服务。安装完 glance 包后先配数据库连接再初始化库表。yum install openstack-glance openstack-config --set /etc/glance/glance-api.conf \ DEFAULT sql_connection mysql://glance:PASSWORDcontroller/glance openstack-config --set /etc/glance/glance-registry.conf \ DEFAULT sql_connection mysql://glance:PASSWORDcontroller/glance openstack-db --init --service glance --password PASSWORD然后在 Keystone 里创建 glance 用户并把它加到 service 租户的 admin 角色。keystone user-create --nameglance --passPASSWORD \ --emailglanceexample.com keystone user-role-add --userglance --tenantservice --roleadmin接下来配置 glance-api 和 glance-registry 的认证信息。Havana 用 paste 部署方式需要把 keystone 的认证中间件配进去。openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \ auth_uri http://controller:5000 openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \ auth_host controller openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \ admin_tenant_name service openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \ admin_user glance openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \ admin_password PASSWORD openstack-config --set /etc/glance/glance-api.conf paste_deploy \ flavor keystoneglance-registry 的配置和 glance-api 类似把文件路径换成 glance-registry.conf 即可。然后复制 paste 配置文件并添加 authtoken 段。cp /usr/share/glance/glance-api-dist-paste.ini /etc/glance/glance-api-paste.ini cp /usr/share/glance/glance-registry-dist-paste.ini /etc/glance/glance-registry-paste.ini # 在两个文件的末尾添加 [filter:authtoken] paste.filter_factorykeystoneclient.middleware.auth_token:filter_factory auth_hostcontroller admin_userglance admin_tenant_nameservice admin_passwordPASSWORD参数说明admin_password 必须和创建 glance 用户时设的密码一致。auth_host 用 controller 而不是 IP因为证书签名里绑的是主机名。配完后在 Keystone 里注册 glance 服务和 endpoint。keystone service-create --nameglance --typeimage \ --descriptionGlance Image Service keystone endpoint-create \ --service-idglance-service-id \ --publicurlhttp://controller:9292 \ --internalurlhttp://controller:9292 \ --adminurlhttp://controller:92924.2 启动 Glance 并验证启动 glance-api 和 glance-registry 两个服务然后 source 之前创建的 admin 环境变量文件执行glance image-list。如果返回空列表且没有报错说明 Glance 已经能通过 Keystone 认证并访问数据库。service openstack-glance-api start service openstack-glance-registry start chkconfig openstack-glance-api on chkconfig openstack-glance-registry on source /root/keystonerc_admin glance image-list常见问题是 glance-registry 启动后立刻退出日志在/var/log/glance/registry.log多半是数据库连接字符串里的密码错了或者 MySQL 的 bind-address 没改导致连不上。另一个坑是 paste 文件里的 authtoken 段没有加在正确的位置必须加在[pipeline:glance-api]之前否则认证中间件不生效。5. Nova 计算服务与网络单节点下 compute 和 network 的配置差异5.1 Nova 数据库、用户和 endpointNova 是计算服务负责虚拟机的生命周期管理。在单节点环境里controller 同时要跑 nova-api、nova-scheduler、nova-conductor、nova-compute 和 nova-network。先配数据库和 Keystone 用户。yum install openstack-nova openstack-config --set /etc/nova/nova.conf \ DEFAULT sql_connection mysql://nova:PASSWORDcontroller/nova openstack-db --init --service nova --password PASSWORD keystone user-create --namenova --passPASSWORD \ --emailnovaexample.com keystone user-role-add --usernova --tenantservice --roleadmin然后在 nova.conf 里配置认证信息和 Glance 类似但多了一个auth_strategykeystone的开关。openstack-config --set /etc/nova/nova.conf DEFAULT \ auth_strategy keystone openstack-config --set /etc/nova/nova.conf keystone_authtoken \ auth_uri http://controller:5000 openstack-config --set /etc/nova/nova.conf keystone_authtoken \ auth_host controller openstack-config --set /etc/nova/nova.conf keystone_authtoken \ admin_tenant_name service openstack-config --set /etc/nova/nova.conf keystone_authtoken \ admin_user nova openstack-config --set /etc/nova/nova.conf keystone_authtoken \ admin_password PASSWORD注册 nova 服务和 endpoint注意 Nova 有多个 endpointcompute 和 network 的端口不同。keystone service-create --namenova --typecompute \ --descriptionNova Compute Service keystone endpoint-create \ --service-idnova-service-id \ --publicurlhttp://controller:8774/v2/%\(tenant_id\)s \ --internalurlhttp://controller:8774/v2/%\(tenant_id\)s \ --adminurlhttp://controller:8774/v2/%\(tenant_id\)sURL 里的%\(tenant_id\)s是 Havana 的写法表示租户 ID 占位符不能省略。创建完启动 nova 的各个服务。service openstack-nova-api start service openstack-nova-scheduler start service openstack-nova-conductor start service openstack-nova-compute start service openstack-nova-network start chkconfig openstack-nova-api on chkconfig openstack-nova-scheduler on chkconfig openstack-nova-conductor on chkconfig openstack-nova-compute on chkconfig openstack-nova-network on5.2 Nova Network 的 VLAN 与安全规则单节点环境下 nova-network 用 FlatDHCP 或 VLAN 模式。手册里创建了一个 VLAN并开放了安全规则。安全规则不开放的话虚拟机起来后 ping 不通也 ssh 不进去。nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0 nova secgroup-add-rule default tcp 22 22 0.0.0.0/0参数说明icmp 的 -1 -1 表示所有 ICMP 类型和代码tcp 22 22 表示只开放 SSH 端口。0.0.0.0/0 表示允许所有来源实验环境可以这样生产环境要收紧。验证 Nova 服务是否正常用nova service-list查看各服务的 state 和 status全部为 up 和 enabled 才算正常。source /root/keystonerc_admin nova service-list nova-manage service list如果 nova-compute 显示 down检查/var/log/nova/compute.log常见原因是 qpid 没启动或者 nova.conf 里的 rabbit/qpid 配置不对。Havana 默认用 qpid配置项是rpc_backendnova.rpc.impl_qpid如果漏了这行compute 服务会启动但无法和 api 通信。6. Dashboard 与镜像制作从 Web 界面到可启动虚拟机镜像6.1 Dashboard 的缓存与 local_settings 配置Dashboard 是 Web 管理界面安装完 openstack-dashboard 包后需要修改 local_settings 里的缓存后端和 Keystone 地址。Havana 默认用 memcached如果 memcached 没启动登录页面会报错。yum install openstack-dashboard vi /etc/openstack-dashboard/local_settings CACHES { default: { BACKEND: django.core.cache.backends.memcached.MemcachedCache, LOCATION: 127.0.0.1:11211, } } OPENSTACK_HOST controller修改完重启 httpd 服务然后用 admin 用户登录http://controller/dashboard。如果能登录并看到概览页面说明 Keystone、Nova、Glance 的 API 都正常。登录报 500 错误的话看/var/log/httpd/error_log多半是 local_settings 里的 ALLOWED_HOSTS 没配。6.2 制作可启动的 qcow2 镜像并上传手册最后一部分讲怎么用 virt-manager 创建虚拟机然后把它转成 Glance 能用的镜像。这个过程有几个关键点虚拟机磁盘格式选 qcow2安装完系统后要清理网络规则和 SSH 主机密钥否则用这个镜像创建的虚拟机会有冲突。# 在 virt-manager 里创建虚拟机安装完系统后关机 # 清理镜像 virt-sysprep -a /var/lib/libvirt/images/centos6.qcow2 # 上传到 Glance glance image-create --namecentos6 \ --disk-formatqcow2 \ --container-formatbare \ --file/var/lib/libvirt/images/centos6.qcow2 \ --is-publicTrue参数说明disk-format 必须是 qcow2container-format 用 bare。is-publicTrue 表示所有租户可见。上传完用glance image-list确认状态是 active。然后创建 flavor 和虚拟机。nova flavor-create m1.small 1 2048 20 1 nova boot --flavor m1.small \ --image centos6 \ --key-name mykey \ --security-groups default \ test-vmflavor-create 的参数依次是名称、ID、内存 MB、磁盘 GB、vCPU 数。创建完用nova list查看虚拟机状态从 BUILD 变成 ACTIVE 就说明启动成功。如果一直卡在 BUILD看/var/log/nova/compute.log常见原因是镜像格式不对或者 nova-network 的网桥没配好。7. 几个 Havana 部署里绕不开的坑7.1 租户创建报错但重启后正常现象执行keystone tenant-create时返回 500 错误提示数据库连接失败。原因Keystone 启动时数据库连接池还没完全初始化第一次请求会超时。解决重启 openstack-keystone 服务再执行一次命令。如果重启后仍然报错检查/etc/keystone/keystone.conf里的 sql connection 字符串密码里如果有特殊字符需要转义。7.2 Glance 上传镜像后状态一直是 queued现象glance image-create成功返回但glance image-list里状态是 queued不是 active。原因glance-registry 没有正常运行或者数据库里没有正确写入镜像位置。解决检查 glance-registry 服务状态看/var/log/glance/registry.log。如果是数据库问题重新执行openstack-db --init --service glance注意这会清空已有镜像记录。7.3 Nova 虚拟机启动后无法 SSH现象nova list显示 ACTIVE但 ping 不通也 ssh 不上。原因安全组规则没开放或者 nova-network 的 DHCP 没分配 IP。解决先用nova secgroup-add-rule开放 icmp 和 tcp 22然后nova console-log test-vm查看虚拟机内部日志确认网卡是否拿到 IP。如果没拿到检查/etc/nova/nova.conf里的network_manager和flat_interface配置。7.4 Dashboard 登录后报 500 错误现象输入用户名密码后页面报 Internal Server Error。原因local_settings 里的 Keystone 地址配错或者 memcached 没启动。解决确认OPENSTACK_HOST controller然后service memcached status检查缓存服务。如果 memcached 正常看/var/log/httpd/error_log里的具体异常多半是 Django 的 ALLOWED_HOSTS 需要加上 controller。7.5 qpid 连接数过多导致服务假死现象运行一段时间后nova-api 或 glance-api 无响应日志里出现 qpid 连接超时。原因Havana 的 qpid 默认连接数有限多个服务同时连接会耗尽。解决修改/etc/qpidd.conf增加max-connections参数然后重启 qpid 和所有 OpenStack 服务。实验环境可以改用 rabbitmq但 Havana 默认包对 rabbitmq 的支持需要额外配置。8. 从镜像制作到 flavor 调优一个能复用的验证习惯手册里制作镜像的步骤看起来简单但实际用 virt-manager 装完系统后有几个配置必须改否则做出来的镜像只能启动一次。第一是/etc/udev/rules.d/70-persistent-net.rules这个文件记录了网卡 MAC 和 eth0 的绑定关系不删掉的话新虚拟机起来网卡会变成 eth1。第二是/etc/ssh/ssh_host_*不清理的话所有用这个镜像创建的虚拟机 SSH 主机密钥都一样连接时会报冲突。第三是/root/.ssh/authorized_keys如果装系统时放了公钥要清掉否则新虚拟机带着旧公钥。我一般会写一个清理脚本在关机前跑一遍。#!/bin/bash # 清理镜像前的准备工作 rm -f /etc/udev/rules.d/70-persistent-net.rules rm -f /etc/ssh/ssh_host_* rm -f /root/.ssh/authorized_keys echo /etc/machine-id echo /var/lib/dbus/machine-id history -c参数说明machine-id 和 dbus machine-id 清空后新虚拟机会重新生成避免 DHCP 分配 IP 时冲突。history -c 清掉命令历史减小镜像体积也避免泄露信息。跑完脚本关机再用virt-sysprep做一次标准化然后上传到 Glance。flavor 的创建也有讲究。手册里只给了nova flavor-create的基本用法但实际调优时内存和磁盘的比例要匹配。比如 m1.small 给 2048MB 内存和 20GB 磁盘如果镜像本身只有 10GB磁盘给 20GB 会浪费存储但给太小又会导致虚拟机启动时扩容失败。我一般会先glance image-show看镜像的 virtual_size然后 flavor 的磁盘比它大 2GB 左右。验证镜像能不能正常启动不要只看nova list的状态。我习惯用nova console-log看启动日志确认 cloud-init 或者网络配置有没有报错。如果日志里出现No route to host或者Failed to start LSB: Bring up/down networking说明镜像里的网卡配置和 nova-network 的网桥不匹配需要重新制作镜像。从那以后我每次做完镜像都会先用这个镜像起一台测试机确认能 ping 通、能 ssh、能重启再上传到 Glance 给其他人用。这个习惯帮我省掉了无数次“镜像上传后别人用不了”的返工。希望帮到你。本文还有配套的精品资源点击获取
