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故障排查与性能调优》

发表回复

后才能评论