这次我们来看一个 OpenStack 私有云平台的搭建项目。对于想学习云计算、构建内部开发测试环境或进行技术验证的团队来说,本地部署一套 OpenStack 是理解其架构和核心组件的最佳实践。本文的重点不是空谈概念,而是带你一步步完成基础服务的配置文件准备,这是整个部署过程中最关键、也最容易出错的一环。
OpenStack 是一个由众多独立服务模块组成的庞大系统,其搭建过程复杂,涉及网络规划、认证、计算、存储等多个层面。很多教程在前期环境准备上语焉不详,导致后续安装频频报错。本文将聚焦于部署前必须完成的基础文件配置,包括网络规划、主机名、域名解析、时间同步、数据库及消息队列的初始化配置等。通过清晰的步骤和可复制的配置示例,你将能建立一个稳定、标准的基础环境,为后续顺利安装各 OpenStack 服务组件扫清障碍。
本文适合有一定 Linux 系统管理基础,希望动手实践 OpenStack 部署的开发者、运维工程师或学生。我们将基于一个典型的最小化双节点(控制节点+计算节点)架构进行演示,确保每一步都有据可依,配置即所得。
1. 核心能力速览
在深入配置细节前,我们先通过下表快速了解本次 OpenStack 基础配置所涵盖的核心内容与目标环境。
| 能力项 | 说明 |
|---|---|
| 项目类型 | 开源云计算平台(IaaS)基础环境配置 |
| 核心目标 | 为 OpenStack 服务(Keystone, Nova, Neutron等)提供稳定运行的底层环境 |
| 推荐架构 | 最小化双节点:1控制节点 + 1计算节点 |
| 操作系统 | CentOS 7 / Rocky Linux 8 / Ubuntu 20.04 LTS 等主流发行版 |
| 关键配置 | 网络规划、主机名与解析、时间同步(NTP/Chrony)、数据库(MariaDB)、消息队列(RabbitMQ)、Memcached |
| 环境隔离 | 建议在物理机、VMware/KVM 虚拟机或专用服务器上操作 |
| 配置方式 | 命令行手动编辑配置文件,配合脚本化验证 |
| 最终成果 | 获得一个数据库可连接、消息队列可通信、各节点时间与网络互通的标准环境 |
2. 适用场景与使用边界
2.1 适合谁用?
- 云计算学习者:希望通过亲手搭建,深入理解 OpenStack 各组件交互原理。
- 企业内部开发/测试团队:需要一套隔离的、可定制的云环境来部署和测试应用程序。
- 运维工程师:为构建私有云或混合云平台进行技术预研和原型验证。
- 高校教学与科研:用于云计算相关课程实验或科研项目的底层平台。
2.2 能解决什么问题?
- 环境标准化问题:解决因主机名混乱、网络不通、时间不同步导致的组件间通信失败。
- 依赖服务就绪问题:确保数据库、消息队列等核心依赖在 OpenStack 服务启动前已正确安装并配置。
- 配置可追溯问题:提供清晰的配置模板和备份方法,便于排查问题和批量部署。
2.3 不适合什么场景?
- 生产环境直接套用:本文为基础配置指南,生产环境需根据实际负载、高可用、安全策略进行深度定制和加固。
- 完全无 Linux 基础的用户:需要使用者具备基本的 Linux 命令行操作、文件编辑和网络知识。
- 追求极简一键部署:OpenStack 的复杂性决定了其部署过程涉及大量手动配置,旨在理解过程而非追求全自动化。
2.4 安全与合规边界
- 网络隔离:实验环境建议使用独立的物理网络或 VLAN,避免影响现有生产网络。
- 防火墙策略:配置过程中会开放特定端口,在实验完成后或生产部署时,必须根据最小权限原则收紧防火墙规则。
- 密码管理:文中示例使用了简单密码(如
openstack),在实际部署中必须使用强密码并妥善保管。 - 权限控制:遵循最小权限原则,避免直接使用 root 用户运行所有服务,后续应创建专门的 service 用户。
3. 环境准备与前置条件
在开始编辑任何配置文件之前,必须确保底层环境满足要求。以下是一个通用的检查清单。
3.1 硬件与节点规划
我们采用最经典的双节点架构进行演示:
- 控制节点 (Controller):运行所有管理服务,如 API、调度、数据库等。建议至少 4核 CPU,8GB 内存,100GB 磁盘。
- 计算节点 (Compute):运行虚拟机实例。建议至少 2核 CPU,4GB 内存,50GB 磁盘(额外为实例镜像和存储准备空间)。
3.2 操作系统与软件版本
- 操作系统:以 CentOS 7 或 Rocky Linux 8 为例。确保系统为最小化安装,并已更新到最新稳定版。
- 网络:各节点至少有两块网卡:
- 管理网络 (Management Network):用于节点间内部通信(如数据库、消息队列)。例如,控制节点:
192.168.100.10,计算节点:192.168.100.20。 - 提供商网络 (Provider Network):用于虚拟机连接外部网络(如互联网)。通常使用物理网卡桥接或 VLAN。
- 管理网络 (Management Network):用于节点间内部通信(如数据库、消息队列)。例如,控制节点:
- 主机名:必须正确设置且能互相解析。
3.3 通用前置操作(所有节点)
在配置具体服务前,需要在所有节点上执行以下基础操作。
# 1. 关闭并禁用防火墙(实验环境,生产环境需配置策略) systemctl stop firewalld systemctl disable firewalld # 2. 关闭 SELinux(实验环境简化操作) setenforce 0 sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config # 3. 更新系统并安装基础工具 yum update -y yum install -y vim net-tools wget chrony4. 网络规划与主机配置
这是整个基础配置的基石,错误将导致后续所有服务无法互通。
4.1 配置静态 IP 与主机名
假设管理网段为192.168.100.0/24。
在控制节点 (192.168.100.10) 上操作:
# 编辑网络配置文件,以CentOS 7为例,网卡名可能为ens33, ens34等,请根据实际情况修改 vim /etc/sysconfig/network-scripts/ifcfg-ens33将内容修改为类似如下(管理网卡):
TYPE=Ethernet BOOTPROTO=static DEVICE=ens33 ONBOOT=yes IPADDR=192.168.100.10 NETMASK=255.255.255.0 GATEWAY=你的网关地址 # 如果仅内部通信可不设 DNS1=你的DNS地址# 设置主机名 hostnamectl set-hostname controller # 编辑hosts文件,添加所有节点的解析 vim /etc/hosts在/etc/hosts文件末尾添加:
192.168.100.10 controller 192.168.100.20 compute1在计算节点 (192.168.100.20) 上执行类似操作:设置主机名为compute1,并在/etc/hosts文件中添加同样的两行解析记录。
4.2 配置时间同步 (Chrony)
所有节点时间必须高度一致,否则会导致认证失败等各种诡异问题。
在控制节点上配置 Chrony 服务端:
# 1. 安装chrony(如果尚未安装) yum install -y chrony # 2. 编辑配置文件,允许计算节点同步 vim /etc/chrony.conf找到allow指令,修改或添加:
# 允许192.168.100.0/24网段的主机同步 allow 192.168.100.0/24 # 注释掉或添加可用的外部NTP服务器,如: server ntp.aliyun.com iburst# 3. 启动并设置开机自启 systemctl enable chronyd systemctl start chronyd在计算节点上配置 Chrony 客户端:
vim /etc/chrony.conf将 server 指向控制节点:
server controller iburstsystemctl enable chronyd systemctl start chronyd在所有节点验证时间同步:
chronyc sources -v输出中应看到^*标记的同步源,状态为^*。
5. 核心依赖服务安装与配置
以下操作主要在控制节点上执行,为 OpenStack 服务提供数据库和消息总线。
5.1 安装与配置 MariaDB 数据库
OpenStack 大多数服务使用数据库存储信息。
# 1. 安装 MariaDB 服务器和客户端 yum install -y mariadb mariadb-server python2-PyMySQL # 2. 创建并编辑数据库配置文件 vim /etc/my.cnf.d/openstack.cnf添加以下内容,重点是绑定地址和字符集:
[mysqld] bind-address = 192.168.100.10 default-storage-engine = innodb innodb_file_per_table = on max_connections = 4096 collation-server = utf8_general_ci character-set-server = utf8# 3. 启动数据库并设置开机自启 systemctl enable mariadb systemctl start mariadb # 4. 运行安全初始化脚本,设置root密码(如:openstack) mysql_secure_installation按照提示设置 root 密码,并移除匿名用户、禁止远程 root 登录等。
5.2 安装与配置 RabbitMQ 消息队列
OpenStack 服务通过消息队列进行异步通信。
# 1. 安装 RabbitMQ yum install -y rabbitmq-server # 2. 启动服务并设置开机自启 systemctl enable rabbitmq-server systemctl start rabbitmq-server # 3. 添加 openstack 用户并设置密码(如:openstack) rabbitmqctl add_user openstack openstack # 4. 为 openstack 用户配置读写权限 rabbitmqctl set_permissions openstack ".*" ".*" ".*"5.3 安装与配置 Memcached
Keystone(认证服务)使用 Memcached 来缓存令牌。
# 1. 安装 Memcached yum install -y memcached python-memcached # 2. 编辑配置文件,修改监听地址 vim /etc/sysconfig/memcached将OPTIONS行修改为监听控制节点的管理IP:
OPTIONS="-l 127.0.0.1,::1,192.168.100.10"# 3. 启动服务并设置开机自启 systemctl enable memcached systemctl start memcached6. 功能测试与基础环境验证
在继续安装 OpenStack 组件之前,必须验证上述基础服务是否正常工作。
6.1 验证网络互通与主机名解析
在控制节点上测试:
ping -c 4 compute1应能收到来自192.168.100.20的回复。
在计算节点上测试:
ping -c 4 controller应能收到来自192.168.100.10的回复。
6.2 验证数据库连接
在控制节点上,使用之前设置的密码登录 MariaDB:
mysql -u root -p输入密码后,应成功进入MariaDB [(none)]>提示符。执行SHOW DATABASES;查看数据库列表,然后exit;退出。
6.3 验证 RabbitMQ 状态
# 查看 RabbitMQ 用户列表,确认 openstack 用户已存在 rabbitmqctl list_users输出中应看到openstack用户。
6.4 验证 Memcached
# 使用 telnet 测试 Memcached 服务 yum install -y telnet # 如果未安装 telnet controller 11211连接成功后,输入stats并按回车,应返回一系列统计信息。输入quit退出。
6.5 验证时间同步
再次在所有节点运行:
chronyc tracking查看System time和Last offset,确保各节点时间偏差在毫秒级。
7. 准备 OpenStack 安装源与通用组件
基础服务就绪后,我们需要配置 OpenStack 的软件源,并安装一些所有服务都可能需要的客户端和公共库。
7.1 配置 OpenStack 软件仓库(以 Rocky Linux 8 和 Train 版本为例)
# 启用必要的 EPEL 和 PowerTools 仓库 dnf install -y epel-release dnf config-manager --set-enabled powertools # 安装 OpenStack Train 仓库 dnf install -y centos-release-openstack-train # 更新系统 dnf update -y7.2 安装 OpenStack 客户端及公共工具
# 安装 OpenStack 命令行客户端(后续管理必备) dnf install -y python3-openstackclient # 安装 openstack-selinux 包,用于自动管理 SELinux 策略(如果SELinux开启) dnf install -y openstack-selinux8. 常见问题与排查方法
在配置基础环境时,你可能会遇到以下典型问题。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 节点间无法 ping 通 | 1. 防火墙未关闭 2. 网卡配置错误 3. 网络设备(交换机)问题 | 1.systemctl status firewalld2. ip addr查看IP3. cat /etc/hosts检查解析 | 1. 关闭防火墙或放行ICMP 2. 核对网卡配置文件 3. 检查物理连接和VLAN |
| 主机名解析失败 | /etc/hosts文件配置错误或未配置 | ping 主机名,观察解析的IP | 确保所有节点的/etc/hosts文件内容一致且正确 |
| Chrony 时间不同步 | 1. 服务未启动 2. 防火墙阻断 123 端口 3. server 配置错误 | chronyc sources -v | 1. 重启 chronyd 2. 关闭防火墙或放行UDP 123 3. 检查配置文件 server 指向 |
| MariaDB 无法远程连接 | 1.bind-address未改为管理IP2. 用户权限不足 | 1. 检查my.cnf.d/openstack.cnf2. MySQL 内执行 SELECT Host, User FROM mysql.user; | 1. 修改bind-address2. 授权用户: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码'; FLUSH PRIVILEGES; |
| RabbitMQ 服务启动失败 | 1. 主机名解析问题 2. Erlang Cookie 问题 | systemctl status rabbitmq-server查看日志 | 1. 确保/etc/hosts正确2. 检查 /var/lib/rabbitmq/.erlang.cookie权限和内容一致性(集群场景) |
| Memcached 连接被拒绝 | 1. 服务未启动 2. 防火墙 3. 配置监听地址错误 | systemctl status memcachedss -tlnp | grep :11211 | 1. 启动服务 2. 关闭防火墙 3. 检查 /etc/sysconfig/memcached中OPTIONS参数 |
| OpenStack 客户端命令找不到 | 软件仓库未正确配置或包未安装 | dnf repolist查看仓库which openstack | 1. 确认仓库已正确安装和启用 2. 执行 dnf install python3-openstackclient |
9. 最佳实践与配置备份
完成所有基础配置后,建议遵循以下实践,为后续的 OpenStack 服务安装铺平道路。
创建配置备份:将修改过的重要配置文件进行备份。
# 例如,备份网络配置、hosts、数据库配置等 mkdir -p /root/openstack-backup/configs cp /etc/hosts /etc/sysconfig/network-scripts/ifcfg-* /etc/chrony.conf /etc/my.cnf.d/openstack.cnf /etc/sysconfig/memcached /root/openstack-backup/configs/编写验证脚本:创建一个简单的 Shell 脚本,一键验证基础服务状态。
vim /root/check_basic_env.sh#!/bin/bash echo "=== 检查网络连通性 ===" ping -c 2 compute1 echo "" echo "=== 检查时间同步 ===" chronyc sources -v | head -5 echo "" echo "=== 检查数据库服务 ===" systemctl status mariadb --no-pager | head -5 echo "" echo "=== 检查RabbitMQ服务 ===" systemctl status rabbitmq-server --no-pager | head -5 rabbitmqctl list_users | grep openstack echo "" echo "=== 检查Memcached服务 ===" systemctl status memcached --no-pager | head -5 ss -tlnp | grep :11211chmod +x /root/check_basic_env.sh记录所有密码:将设置的数据库 root 密码、RabbitMQ 用户密码等记录在安全的地方。后续安装每个 OpenStack 服务时都需要用到。
规划下一步:基础文件配置完成后,接下来通常会按顺序安装以下 OpenStack 服务:Keystone (认证) -> Glance (镜像) -> Nova (计算) -> Neutron (网络) -> Horizon (仪表板)。每个服务都需要连接到我们刚刚配置好的数据库和消息队列。
10. 总结与下一步
至此,OpenStack 搭建中最繁琐、最基础的文件配置部分已经完成。我们系统性地完成了网络规划、主机配置、时间同步,并部署了 MariaDB、RabbitMQ、Memcached 这三个核心依赖服务。你现在拥有的不是一个可以创建虚拟机的云平台,而是一个为云平台准备好的、稳固的地基。
这个地基最关键的价值在于标准化和可通信:所有节点在相同的时钟下运行,通过确定的主机名和IP地址相互寻址,并通过数据库和消息队列可靠地交换数据。后续无论安装 Keystone、Nova 还是 Neutron,它们都将以这个环境为起点进行连接和配置。
最容易踩的坑往往集中在第一步:网络和主机名解析。务必反复使用ping和cat /etc/hosts进行验证。另一个常见问题是服务启动顺序,一定要确保数据库和 RabbitMQ 在安装任何 OpenStack 服务之前就已经处于运行状态。
接下来,你可以开始安装第一个 OpenStack 服务——Keystone(认证服务)。它将使用我们配置好的 MariaDB 来存储用户和项目信息,使用 Memcached 来缓存令牌。有了今天打下的基础,后续服务的安装配置将会更加顺畅,因为大部分底层通信问题已经被提前解决。建议将本文的配置步骤和验证脚本保存好,它们不仅是本次实验的路线图,也是未来排查问题时的关键参考。