Ansible怎么部署高可用OpenStack平台?

文章导读
使用 OpenStack Ansible(OSA)项目是部署高可用架构的标准路径之一,适合需要私有云且希望基础设施即代码的团队,但需注意它对网络和存储规划有较高要求。
📋 目录
  1. 前置环境准备
  2. 核心配置详解
  3. 执行部署命令
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

使用 OpenStack Ansible(OSA)项目是部署高可用架构的标准路径之一,适合需要私有云且希望基础设施即代码的团队,但需注意它对网络和存储规划有较高要求。

先说结论:Ansible 本身只是编排工具,实现高可用核心在于采用官方认可的 OpenStack Ansible 项目并正确配置集群组件。

  • 适合:拥有至少 3 个控制节点、希望统一配置管理的运维团队
  • 先准备:规划好管理网络、存储网络及虚拟 IP(VIP),确保时间同步及 SSH 免密
  • 验收:通过手动停止单个控制节点服务,验证业务是否中断

前置环境准备

部署前必须完成基础环境检查,否则后续 Playbook 执行极易中断。

1. 配置 SSH 免密登录
Ansible 依赖 SSH 连接所有节点。在部署节点生成密钥并分发至所有目标主机(包括自身):

# 生成密钥(一路回车)
ssh-keygen -t rsa

# 分发密钥到所有控制节点和计算节点
ssh-copy-id root@<control_node_1>
ssh-copy-id root@<control_node_2>
ssh-copy-id root@<control_node_3>

2. 网络连通性检查
确保所有节点间管理网络互通,且无防火墙拦截关键端口(如 22, 3306, 5672):

# 从部署节点 ping 所有目标节点
ping -c 4 <control_node_1>
ping -c 4 <control_node_2>

3. 获取代码并激活环境
克隆 OSA 仓库并建立 Python 虚拟环境,这是执行命令的前提:

Ansible怎么部署高可用OpenStack平台?
# 克隆仓库(注意分支对应 OpenStack 版本)
git clone https://opendev.org/openstack/openstack-ansible.git
cd openstack-ansible

# 安装依赖并激活虚拟环境
source scripts/bootstrap-ansible.sh
source openstack-ansible-venv/bin/activate

核心配置详解

1. 规划 inventory 主机清单
高可用体现在控制节点组至少包含 3 个节点。编辑 etc/ansible/hosts 或动态 inventory 源,确保 control_hosts 组配置如下:

[control_hosts]
192.168.1.101
192.168.1.102
192.168.1.103

[compute_hosts]
192.168.1.104
192.168.1.105

2. 配置高可用变量
etc/openstack_deploy/user_variables.yml 中定义虚拟 IP。这是外部访问 API 的入口,必须配置为浮动地址,绑定在 Keepalived 上:

# 定义外部 API 访问的虚拟 IP
haproxy_keepalived_external_virtual_ip: 192.168.1.200

# 确保启用 Keepalived
haproxy_keepalived_enabled: true

执行部署命令

OpenStack Ansible 没有单条命令即可完成高可用部署,核心是通过运行一系列 Playbook 来完成。确保在激活虚拟环境后执行:

# 准备主机环境(安装依赖、配置内核参数等)
openstack-ansible playbooks/setup-hosts.yml

# 引导基础设施服务(数据库、消息队列等)
openstack-ansible playbooks/setup-infrastructure.yml

# 引导 OpenStack 核心服务
openstack-ansible playbooks/setup-openstack.yml

具体命令需根据实际安装的版本目录结构调整,执行前请确保已加载正确的 Python 虚拟环境。

怎么验证是否生效

1. 检查集群状态
登录数据库容器或主机,检查 Galera 集群成员数量是否为预期控制节点数。使用 RabbitMQ 命令查看队列镜像状态。

# 示例:检查 OpenStack 服务状态
openstack compute service list
openstack network agent list

2. 故障切换测试
随机选择一个控制节点,停止其上的 HAProxy 或 Keepalived 服务。观察虚拟 IP 是否漂移到其他节点,同时尝试创建一台虚拟机,确认 API 请求是否成功响应。

Ansible怎么部署高可用OpenStack平台?

3. 日志检查
查看 /var/log/haproxy.log 或容器日志,确认没有持续的后端连接错误。

常见坑

1. 时间同步问题
分布式集群对时间极其敏感,如果节点间时间偏差过大,数据库集群将无法启动或导致数据不一致。务必在所有节点配置 NTP 或 Chrony。

2. 网络 MTU 设置
如果使用了 VXLAN 等 overlay 网络,物理网络 MTU 需要预留封装开销。若未调整,可能导致虚拟机网络不通或丢包,排查难度大。

3. 磁盘分区规划
日志、容器镜像和数据库数据建议分开挂载。如果根分区过小,容器日志写满会导致整个节点失控,进而触发高可用切换,造成震荡。

4. 版本匹配
OpenStack 组件版本耦合度高,Ansible 角色版本必须与目标 OpenStack 版本对应。混用不同版本的文档可能导致配置参数失效。

参考来源

  • OpenStack Ansible Documentation, "OpenStack Ansible", docs.openstack.org/openstack-ansible
  • OpenStack Installation Guide, "High Availability", docs.openstack.org