markdown复制## 1. CentOS Stream 9离线部署OpenStack Caracal高可用集群实战
最近在客户现场完成了一个小型OpenStack私有云平台的离线部署,采用2024.1 Caracal稳定版。这个版本虽然已被标记为"unmaintained",但经过实测稳定性非常好,特别适合需要长期运行的生产环境。下面分享完整部署过程和关键配置技巧。
> 重要提示:生产环境部署前务必做好网络规划和资源评估,本文配置针对30节点以下规模优化,大型集群需要调整参数。
### 1.1 集群架构设计
#### 1.1.1 节点角色分配
采用分层部署方案,将服务按功能划分到不同节点组:
- **存储节点(3台)**:
- Ceph集群(mon/mgr/osd)
- 核心中间件:MariaDB Galera集群、RabbitMQ集群、Memcached
- 硬件建议:每节点至少2块SSD做OSD,64GB+内存
- **控制节点(2台)**:
- 高可用组件:Keepalived + HAProxy
- 核心API服务:Keystone/Glance/Placement
- 网络与计算API:Neutron/Nova/Cinder API
- 硬件建议:16核CPU/64GB内存/双万兆网卡
- **计算节点(2台)**:
- Nova-compute + Neutron-agent
- 硬件建议:根据虚拟机密度配置,建议开启CPU超线程
#### 1.1.2 网络规划
```mermaid
graph TD
A[控制节点] -->|管理网| B(11.1.1.0/24)
A -->|Provider网| C(业务网络)
A -->|存储网| D(10.10.10.0/24)
E[计算节点] -->|管理网| B
E -->|Provider网| C
E -->|存储网| D
F[存储节点] -->|Public网| D
F -->|Cluster网| G(192.168.100.0/24)
关键网络配置要点:
所有节点执行:
bash复制# 设置主机名
hostnamectl set-hostname stor01
# 配置hosts解析
cat >> /etc/hosts <<EOF
11.1.1.8 stor01
11.1.1.9 stor02
11.1.1.10 stor03
11.1.1.11 controller01
11.1.1.12 controller02
11.1.1.13 compute01
11.1.1.14 compute02
EOF
# 时间同步配置
vim /etc/chrony.conf
# 添加:
pool ntp.aliyun.com iburst
allow 11.1.1.0/24
systemctl enable --now chronyd
chronyc sources -v
在可联网的构建机上准备离线源:
bash复制# 启用必要源
dnf config-manager --set-enabled crb
dnf install -y epel-release
dnf install -y centos-release-openstack-caracal
# 下载全量包
mkdir -p /opt/openstack-pkgs
dnf download --resolve --alldeps --downloaddir=/opt/openstack-pkgs \
$(dnf repoquery --disablerepo=* --enablerepo=crb,epel,centos-openstack-caracal -q)
传输到离线环境后:
bash复制# 创建本地repo
createrepo /opt/openstack-pkgs
cat > /etc/yum.repos.d/local.repo <<EOF
[local]
name=Local OpenStack Repo
baseurl=file:///opt/openstack-pkgs
enabled=1
gpgcheck=0
EOF
# 安装基础工具
dnf install -y python3-openstackclient jq vim
在stor01-03上部署Ceph Quincy版:
bash复制# 安装cephadm
dnf install -y cephadm
# 初始化集群
cephadm bootstrap --mon-ip 11.1.1.8
# 添加节点
ceph orch host add stor02 11.1.1.9
ceph orch host add stor03 11.1.1.10
# 创建OSD(每节点2块SSD)
ceph orch daemon add osd stor01:/dev/sdb
ceph orch daemon add osd stor01:/dev/sdc
# 其他节点同理...
# 创建glance使用的pool
ceph osd pool create images 128 128
ceph osd pool application enable images rbd
配置MariaDB Galera多主集群:
bash复制# 所有存储节点安装
dnf install -y mariadb-server-galera
# 配置文件示例(stor01):
cat > /etc/my.cnf.d/galera.cnf <<EOF
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=11.1.1.8
# Galera配置
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="openstack_galera"
wsrep_cluster_address="gcomm://11.1.1.8,11.1.1.9,11.1.1.10"
wsrep_node_name="stor01"
wsrep_node_address="11.1.1.8"
wsrep_sst_method=rsync
EOF
# 启动第一个节点
galera_new_cluster
# 其他节点加入
systemctl start mariadb
RabbitMQ集群配置要点:
bash复制# 所有存储节点安装
dnf install -y rabbitmq-server-3.13.7
# 关键配置:
echo "RABBITMQ_NODE_IP_ADDRESS=11.1.1.8" >> /etc/rabbitmq/rabbitmq-env.conf
echo "密码" > /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
# 节点2/3加入集群:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@stor01
rabbitmqctl start_app
controller01/02上配置:
bash复制cat > /etc/keepalived/keepalived.conf <<EOF
global_defs {
router_id controller01
}
vrrp_script check_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER # 备节点改为BACKUP
interface eth0
virtual_router_id 51
priority 100 # 备节点改为90
advert_int 1
authentication {
auth_type PASS
auth_pass 密码
}
virtual_ipaddress {
11.1.1.250/24
}
track_script {
check_haproxy
}
}
EOF
关键服务代理配置示例:
bash复制frontend mariadb
bind 11.1.1.250:3306
mode tcp
default_backend galera_servers
backend galera_servers
mode tcp
balance source
option tcp-check
server stor01 11.1.1.8:3306 check inter 2000
server stor02 11.1.1.9:3306 check inter 2000
server stor03 11.1.1.10:3306 check inter 2000
bash复制# 数据库初始化
mysql -e "CREATE DATABASE keystone;"
mysql -e "GRANT ALL ON keystone.* TO 'keystone'@'11.1.1.%' IDENTIFIED BY '密码';"
# 配置文件关键参数:
[database]
connection = mysql+pymysql://keystone:密码@11.1.1.250/keystone
[token]
provider = fernet
# 初始化fernet密钥
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
对接Ceph的配置要点:
ini复制[glance_store]
stores = rbd
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_chunk_size = 8
多cell架构配置关键点:
bash复制# 创建cell0和cell1
nova-manage cell_v2 map_cell0
nova-manage cell_v2 create_cell --name cell1 \
--database_connection mysql+pymysql://nova:密码@11.1.1.250/nova_cell1
bash复制# 查看服务日志
journalctl -u openstack-nova-api -f
# 检查数据库连接
mysql -h 11.1.1.250 -u keystone -p -e "SHOW STATUS LIKE 'wsrep%';"
# 验证消息队列
rabbitmqctl list_queues -p nova
当虚拟机获取不到IP时:
Ceph优化:
ini复制[osd]
osd_memory_target = 4GB # 根据内存调整
bluestore_cache_size_hdd = 1GB
MariaDB优化:
ini复制innodb_buffer_pool_size = 12G # 建议分配50-70%内存
innodb_flush_log_at_trx_commit = 2
Nova调度优化:
bash复制nova-manage cell_v2 discover_hosts
这个部署方案经过实际生产验证,在中小规模环境下运行稳定。关键是要做好前期规划和资源隔离,特别是网络和存储部分。如果遇到问题,建议先检查基础服务(数据库、消息队列)状态,再排查具体OpenStack服务日志。