OpenStack高可用架构详解:从设计到部署
OpenStack高可用架构详解:从设计到部署
一、高可用概述
1.1 为什么需要高可用
在生产环境中,单点故障是不可接受的。高可用架构确保:
- 99.9% 正常运行时间(允许每月43分钟停机)
- 99.99% 正常运行时间(允许每年52分钟停机)
- 零数据丢失(RPO = 0)
- 快速故障恢复(RTO < 5分钟)
1.2 高可用层次
| 层级 | 保护范围 | 实现方式 |
|---|---|---|
| 应用层 | OpenStack服务 | 多副本部署 |
| 数据库层 | MySQL/MariaDB | Galera集群 |
| 消息队列 | RabbitMQ | 集群部署 |
| 网络层 | API网关 | HAProxy + Keepalived |
| 存储层 | Cinder/Swift | 多副本复制 |
二、Galera数据库集群
2.1 Galera集群架构
┌─────────────────────────────────────┐
│ Application Layer │
└──────────────┬──────────────────────┘
│
┌───────┴───────┐
│ HAProxy │
│ (读写分离) │
└───────┬───────┘
│
┌───────────┼───────────┐
│ │ │
┌──┴──┐ ┌──┴──┐ ┌──┴──┐
│ DB1 │ │ DB2 │ │ DB3 │
│(主) │◄──►│(从) │◄──►│(从) │
└─────┘ └─────┘ └─────┘
2.2 Galera安装配置
# 所有Controller节点执行
sudo apt-get install -y galera-3 mysql-wsrep-server
# 创建配置文件
cat > /etc/mysql/mariadb.conf.d/99-galera.cnf << 'EOF'
[mysqld]
# 基础配置
binlog_format = ROW
default-storage-engine = InnoDB
innodb_autoinc_lock_mode = 2
# Galera配置
wsrep_on = ON
wsrep_provider = /usr/lib/galera/libgalera_smm.so
wsrep_cluster_name = "openstack-galera"
wsrep_cluster_address = "gcomm://controller1,controller2,controller3"
# 节点配置
wsrep_node_name = "controller1"
wsrep_node_address = "10.0.0.11"
# 复制配置
wsrep_slave_threads = 4
wsrep_certify_nonPK = 1
wsrep_max_ws_rows = 0
wsrep_max_ws_size = 2G
wsrep_debug = 0
wsrep_convert_LOCK_to_trx = 0
wsrep_retry_autocommit = 1
# 自动增长配置
auto_increment_increment = 3
auto_increment_offset = 1
EOF
2.3 初始化集群
# 在第一个节点初始化集群
galera_new_cluster
# 在其他节点启动MySQL
systemctl start mysql
# 验证集群状态
mysql -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
mysql -e "SHOW STATUS LIKE 'wsrep_cluster_status';"
mysql -e "SHOW STATUS LIKE 'wsrep_connected';"
三、RabbitMQ集群
3.1 RabbitMQ集群架构
┌─────────────────────────────────────┐
│ Application Layer │
└──────────────┬──────────────────────┘
│
┌───────┴───────┐
│ HAProxy │
│ (负载均衡) │
└───────┬───────┘
│
┌───────────┼───────────┐
│ │ │
┌──┴──┐ ┌──┴──┐ ┌──┴──┐
│ RMQ1 │ │ RMQ2 │ │ RMQ3 │
│(磁盘)│◄──►│(磁盘)│◄──►│(磁盘)│
└─────┘ └─────┘ └─────┘
3.2 RabbitMQ集群配置
# 安装RabbitMQ
sudo apt-get install -y rabbitmq-server
# 配置集群
# /etc/rabbitmq/rabbitmq.conf
cluster_formation.peer_discovery_backend = classic_official_peers
cluster_formation.classic_official_peers.1 = rabbit@controller1
cluster_formation.classic_official_peers.2 = rabbit@controller2
cluster_formation.classic_official_peers.3 = rabbit@controller3
# 配置镜像队列
ha-mode = all
ha-sync-mode = automatic
# 设置权限
rabbitmqctl add_user openstack rabbitmq_pass
rabbitmqctl set_permissions -p / openstack ".*" ".*" ".*"
3.3 验证集群
# 检查集群状态
rabbitmqctl cluster_status
# 查看队列
rabbitmqctl list_queues
# 配置HA策略
rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'
四、Pacemaker + Corosync
4.1 Pacemaker架构
┌─────────────────────────────────────────┐
│ Pacemaker Cluster Manager │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Corosync │ │
│ │ (成员通信、投票、心跳) │ │
│ └─────────────────────────────────┘ │
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │Node 1 │ │Node 2 │ │
│ │(Active) │ │(Standby)│ │
│ └─────────┘ └─────────┘ │
└─────────────────────────────────────────┘
4.2 Pacemaker安装配置
# 安装Pacemaker
sudo apt-get install -y pacemaker pcs
# 配置集群
# 设置hacluster密码
echo "hacluster:your_password" | sudo chpasswd
# 启动服务
sudo systemctl enable pcsd
sudo systemctl start pcsd
# 认证节点
pcs cluster auth controller1 controller2 controller3
# 创建集群
pcs cluster setup --name openstack-cluster controller1 controller2 controller3
# 启动集群
pcs cluster start --all
pcs cluster enable --all
# 验证集群状态
pcs status
pcs cluster status
4.3 配置资源
# 创建VIP资源
pcs resource create vip ocf:heartbeat:IPaddr2 \
ip=10.0.0.100 \
cidr_netmask=24 \
op monitor interval=30s
# 创建HAProxy资源
pcs resource create haproxy systemd:haproxy \
op monitor interval=10s
# 创建约束
pcs constraint colocation add vip haproxy
pcs constraint order vip then haproxy
# 查看资源配置
pcs resource show
pcs constraint show
五、HAProxy配置
5.1 HAProxy前端配置
# /etc/haproxy/haproxy.cfg
# 全局配置
global
log 127.0.0.1 local0
chroot /var/lib/haproxy
stats socket /var/run/haproxy.sock mode 600 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
maxconn 4000
# 默认配置
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
timeout check 5000ms
# Keystone前端
frontend keystone-public
bind *:5000
mode http
default_backend keystone-public-backend
option forwardfor
# Keystone后端
backend keystone-public-backend
balance roundrobin
option httpchk GET /identity
server controller1 10.0.0.11:5000 check inter 2000 rise 2 fall 5
server controller2 10.0.0.12:5000 check inter 2000 rise 2 fall 5
server controller3 10.0.0.13:5000 check inter 2000 rise 2 fall 5
# Nova API前端
frontend nova-api
bind *:8774
mode http
default_backend nova-api-backend
# Nova API后端
backend nova-api-backend
balance roundrobin
option httpchk GET /healthcheck
server controller1 10.0.0.11:8774 check inter 2000 rise 2 fall 5
server controller2 10.0.0.12:8774 check inter 2000 rise 2 fall 5
5.2 健康检查配置
# 添加健康检查页面
frontend health-check
bind *:8080
mode http
option httpchk GET /healthcheck
http-check expect status 200
default_backend all-nodes
backend all-nodes
mode http
server controller1 10.0.0.11:8080 check
server controller2 10.0.0.12:8080 check
server controller3 10.0.0.13:8080 check
六、高可用验证
6.1 集群健康检查
# 检查Pacemaker状态
pcs status
# 检查资源状态
pcs resource show
# 检查节点状态
pcs node list
# 检查约束
pcs constraint show
# 检查Corosync状态
corosync-cmapctl | grep members
# 检查RabbitMQ集群
rabbitmqctl cluster_status
# 检查Galera集群
mysql -e "SHOW STATUS LIKE 'wsrep%';"
6.2 故障转移测试
# 1. 测试VIP failover
pcs resource move vip
pcs status | grep vip
# 2. 测试节点故障
pcs cluster stop controller1
pcs status
# 3. 测试服务故障
systemctl stop haproxy
pcs status | grep haproxy
# 4. 测试数据库故障
systemctl stop mysql
mysql -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
6.3 性能测试
# API响应时间测试
time curl http://10.0.0.100:5000
# 并发连接测试
ab -n 1000 -c 100 http://10.0.0.100:5000/
# 故障恢复时间测试
# 使用time命令测量VIP切换时间
七、最佳实践
7.1 硬件规划
| 组件 | CPU | 内存 | 磁盘 | 网络 |
|---|---|---|---|---|
| Controller | 8核 | 32GB | 200GB SSD | 2x 1Gbps |
| Compute | 16核 | 64GB | 1TB NVMe | 2x 10Gbps |
| Storage | 8核 | 16GB | 10TB HDD | 2x 10Gbps |
7.2 网络规划
管理网络: 10.0.0.0/24
隧道网络: 10.0.1.0/24
存储网络: 10.0.2.0/24
外部网络: 203.0.113.0/24
7.3 监控告警
# 监控集群状态
# 设置告警规则:
# - 节点离线告警
# - 资源停止告警
# - VIP切换告警
# - 数据库复制延迟告警
# - 消息队列积压告警
八、总结
本文详细介绍了OpenStack高可用架构的设计和部署。
核心要点:
下篇预告: 《OpenStack故障排查与性能调优》
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







