1. OpenStack Train 部署前的关键准备

第一次部署OpenStack时,我在时区配置上栽过跟头。时区设置错误导致日志时间全部错乱,排查问题时差点让我崩溃。所以现在每次部署前,我都会反复确认所有节点的时区设置为Asia/Shanghai。

1.1 硬件规划与节点划分

生产环境中建议至少准备三台物理服务器:

  • 控制节点 :16核CPU/32GB内存/200GB系统盘+100GB数据盘
  • 计算节点 :根据虚拟机密度配置,建议32核CPU起/64GB内存/系统盘+高速SSD存储
  • 存储节点 :大容量硬盘阵列,建议使用RAID 10保障数据安全

特别注意:所有节点需要配置时钟同步(NTP),时间不同步会导致认证服务异常。我在实际项目中遇到过Keystone认证失败的问题,最后发现是计算节点时间比控制节点快了3分钟。

1.2 操作系统配置要点

以CentOS 7为例,这些配置直接影响后续服务部署:

# 关闭SELinux(避免权限问题)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 关闭防火墙(OpenStack各组件间需要大量端口通信)
systemctl stop firewalld
systemctl disable firewalld

# 配置静态IP(示例)
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 <<EOF
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPADDR=10.0.19.133
PREFIX=24
GATEWAY=10.0.19.254
DNS1=8.8.8.8
EOF

1.3 软件源与依赖安装

Train版本对软件版本有严格要求,必须使用官方指定源:

# 添加OpenStack Train源
yum install centos-release-openstack-train -y

# 安装基础工具
yum install -y python-openstackclient openstack-selinux

# 解决常见依赖冲突(特别是qpid-proton版本问题)
yum install -y python2-qpid-proton-0.26.0-2.el7.x86_64

2. 核心服务部署实战

2.1 Keystone认证服务

Keystone就像OpenStack的"身份证系统",所有服务都要在这里注册。部署时最容易出错的是Fernet令牌配置:

# 初始化密钥库(务必备份这三个目录)
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

# 引导服务时注意URL必须包含/v3
keystone-manage bootstrap --bootstrap-password Mss123456 \
  --bootstrap-admin-url http://controller:5000/v3/ \
  --bootstrap-internal-url http://controller:5000/v3/ \
  --bootstrap-public-url http://controller:5000/v3/ \
  --bootstrap-region-id RegionOne

验证服务是否正常:

openstack --os-auth-url http://controller:5000/v3 \
  --os-project-domain-name Default --os-user-domain-name Default \
  --os-project-name admin --os-username admin token issue

2.2 Glance镜像服务

上传镜像时遇到过磁盘格式识别错误的问题,后来发现必须明确指定格式:

glance image-create --name "CentOS-7" \
  --file CentOS-7-x86_64-GenericCloud.qcow2 \
  --disk-format qcow2 --container-format bare \
  --visibility=public

生产环境建议配置多后端存储,将频繁访问的系统镜像放在SSD存储,大容量镜像放在普通硬盘。

2.3 Nova计算服务

计算节点部署后务必检查虚拟化支持:

egrep -c '(vmx|svm)' /proc/cpuinfo  # 返回值应≥1

如果返回0,需要在/etc/nova/nova.conf中强制指定虚拟化类型:

[libvirt]
virt_type = qemu  # 对于没有硬件虚拟化的环境

3. 网络与存储配置

3.1 Neutron网络服务

网络规划是OpenStack最复杂的部分之一。我的经验是:

  • Provider网络 :用于连接外部网络(如互联网)
  • Self-service网络 :租户内部网络,通过VXLAN实现隔离

关键配置示例:

[ml2]
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population

[ml2_type_vxlan]
vni_ranges = 1:1000

3.2 Cinder块存储

生产环境一定要配置多路径存储,我吃过单点故障的亏:

# 创建LVM卷组
pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb

# 配置多路径(如果使用SAN存储)
yum install -y device-mapper-multipath
mpathconf --enable --with_multipathd y

4. 运维与问题排查

4.1 服务状态检查

这套命令组合能快速定位问题:

# 检查所有服务状态
openstack compute service list
openstack network agent list

# 查看具体服务日志
journalctl -u nova-api -f  # 实时查看Nova API日志

4.2 常见故障处理

问题1 :虚拟机启动失败,报"No valid host was found"

  • 检查计算节点资源是否充足
  • 确认调度器日志/var/log/nova/nova-scheduler.log

问题2 :网络连通性异常

  • 检查Linux网桥:brctl show
  • 验证安全组规则:openstack security group rule list

问题3 :镜像上传失败

  • 检查Glance存储目录权限
  • 确认磁盘空间:df -h /var/lib/glance

5. 生产环境优化建议

经过多个项目实践,这些优化措施效果显著:

  1. 数据库优化 :为MariaDB配置innodb_buffer_pool_size(建议物理内存的70%)
  2. 消息队列 :RabbitMQ开启镜像队列防止消息丢失
  3. 日志管理 :统一接入ELK栈,方便问题追踪
  4. 监控告警 :Prometheus+Granfana监控关键指标

最后提醒:部署完成后立即备份/etc目录和数据库,我在一次误操作后靠这个习惯挽回了整个集群。

更多推荐