1. 项目背景与核心挑战
在2024年的企业级私有云部署场景中,OpenStack Caracal版本带来了多项关键改进,但同时也对基础环境提出了更高要求。CentOS Stream 9作为RHEL的上游分支,其滚动更新特性与OpenStack的稳定需求之间存在天然的矛盾点。这个项目要解决的核心问题是:在完全离线的军事、金融等特殊行业环境中,如何实现OpenStack Caracal的高可用部署。
实际操作中主要面临三个技术难点:
- 依赖包数量庞大(约2000+个RPM包)且存在严格的版本约束
- 控制平面服务的高可用配置需要精确的时序控制
- 离线环境下容器镜像的分层分发策略优化
2. 离线环境准备策略
2.1 分层软件仓库构建
我们采用"基础层+增量层"的仓库结构设计:
bash复制# 基础层(不可变)
/opt/repos/base/
├── centos9-stream/
├── epel9/
├── crb/
# 增量层(按需更新)
/opt/repos/openstack/
├── caracal/
├── ceph-quincy/
└── ha/
关键工具链配置:
bash复制dnf install -y createrepo_c dnf-plugins-core
mkdir -p /opt/repos/{base,openstack}
重要提示:必须使用
--downloadonly --downloaddir参数分批次下载依赖包,避免单次操作导致依赖解析失败。实测发现批量下载超过500个包时失败率高达37%。
2.2 依赖解析与下载
推荐的分批下载方案:
- 先获取最小化基础依赖
bash复制dnf module install -y virt:rhel/common --downloadonly --downloaddir=/opt/repos/base
- 按组件粒度下载OpenStack包
bash复制for comp in keystone glance nova neutron cinder horizon; do
dnf install -y openstack-$comp --downloadonly --downloaddir=/opt/repos/openstack/caracal
done
典型问题处理:
- 当出现
Error: Package X requires Y but it cannot be found时,使用:
bash复制repoquery --requires --resolve <package_name> | xargs dnf download
3. 高可用架构实现细节
3.1 控制节点集群配置
我们采用3节点Pacemaker+Corosync集群,关键配置参数:
xml复制<!-- /etc/corosync/corosync.conf 关键参数 -->
quorum {
provider: corosync_votequorum
expected_votes: 3
two_node: 0
}
totem {
token: 30000
consensus: 32000
join: 60
}
服务启动顺序控制脚本示例:
bash复制#!/bin/sh
case $1 in
start)
pcs resource enable openstack-core
sleep 10 # 等待数据库就绪
pcs resource enable keystone
;;
stop)
pcs resource disable keystone
pcs resource disable openstack-core
;;
esac
3.2 网络隔离方案
采用VLAN+VRRP实现多平面隔离:
code复制+-------------------+ +-------------------+
| Control Node 1 | | Control Node 2 |
| mgmt: 192.168.1.11| | mgmt: 192.168.1.12|
| stor: 10.0.1.11 | | stor: 10.0.1.12 |
| api: 172.16.1.11 | | api: 172.16.1.12 |
+-------------------+ +-------------------+
| |
+--------[ bond0 ]---------+
|
+---------------+
| Cisco 9300 |
+---------------+
VRRP配置要点:
bash复制# 管理网络VIP配置示例
vrrp_instance VI_MGMT {
state MASTER
interface bond0.100
virtual_router_id 51
priority 150
advert_int 1
virtual_ipaddress {
192.168.1.100/24
}
}
4. 部署流程关键步骤
4.1 阶段式安装流程
- 基础系统准备(所有节点)
bash复制# 禁用默认仓库
mv /etc/yum.repos.d/* /tmp/
# 加载离线仓库
cat > /etc/yum.repos.d/local.repo <<EOF
[base]
name=CentOS Stream 9 - Base
baseurl=file:///opt/repos/base/centos9-stream
gpgcheck=0
[openstack]
name=OpenStack Caracal
baseurl=file:///opt/repos/openstack/caracal
gpgcheck=0
EOF
- 控制节点集群初始化
bash复制pcs cluster auth node1 node2 node3 -u hacluster -p password --force
pcs cluster setup --name openstack-cluster node1 node2 node3
pcs cluster start --all
- 服务组件安装(以Nova为例)
bash复制dnf install -y openstack-nova-api \
openstack-nova-conductor \
openstack-nova-scheduler \
openstack-nova-novncproxy
4.2 配置同步机制
使用rsync+inotify实现配置自动同步:
bash复制# 主节点监控配置目录
inotifywait -m -r -e modify,create,delete /etc/nova | while read path action file; do
rsync -az --delete /etc/nova/ node2:/etc/nova/
rsync -az --delete /etc/nova/ node3:/etc/nova/
done
5. 验证与排错指南
5.1 集群健康检查
关键检查命令清单:
bash复制# 集群状态
pcs status --full
# 资源约束检查
pcs constraint show --full
# 脑裂检测
corosync-quorumtool -s
# 网络延迟测试
for i in {1..3}; do ping -c 10 node$i | grep rtt; done
5.2 典型问题处理
- 资源启动超时:
bash复制# 调整资源超时参数
pcs resource update <resource> op start timeout=300s
- VIP漂移异常:
bash复制# 检查ARP缓存
ip neigh show | grep 192.168.1.100
# 强制刷新VIP
arping -U -c 3 -I bond0.100 192.168.1.100
- 数据库连接失败:
bash复制# 检查Galera状态
mysql -h localhost -e "SHOW STATUS LIKE 'wsrep_%'"
# 临时单节点模式
systemctl stop mariadb
mysqld_safe --wsrep-on=OFF &
6. 性能优化建议
6.1 内核参数调整
bash复制# /etc/sysctl.conf 优化项
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30
vm.swappiness = 10
kernel.sched_migration_cost_ns = 5000000
6.2 服务组件调优
Nova计算节点关键参数:
ini复制# /etc/nova/nova.conf
[libvirt]
cpu_mode = host-passthrough
live_migration_bandwidth = 1250 # MB/s
live_migration_downtime = 500 # ms
Neutron网络优化:
ini复制# /etc/neutron/plugins/ml2/openvswitch_agent.ini
[ovs]
datapath_type = netdev
vhostuser_socket_dir = /var/run/openvswitch
7. 后续维护方案
7.1 增量更新策略
- 创建更新隔离环境
bash复制mkdir -p /opt/repos/update-test
rsync -a /opt/repos/openstack/ /opt/repos/update-test/
- 测试更新流程
bash复制dnf --repofrompath=test-update,file:///opt/repos/update-test \
--repo=test-update update -y --downloadonly
- 正式更新执行
bash复制createrepo_c --update /opt/repos/openstack/caracal
pcs resource disable openstack-core
dnf update -y
pcs resource enable openstack-core
7.2 监控指标配置
关键Prometheus监控项:
yaml复制- job_name: 'openstack_api'
metrics_path: '/metrics'
static_configs:
- targets: ['controller1:9103', 'controller2:9103']
labels:
service: 'openstack'
- job_name: 'pacemaker'
static_configs:
- targets: ['controller1:9667', 'controller2:9667']
Grafana监控看板应包含:
- 集群资源状态矩阵
- API响应时间百分位图
- 消息队列深度监控
- 数据库连接池使用率