news 2026/10/18 5:23:00

OpenStack 部署记录(七):多节点部署——环境准备与应答文件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenStack 部署记录(七):多节点部署——环境准备与应答文件

从 All-in-One 到 1 控 2 计:角色拆分不难,难的是让三台机器“步调一致”——时间、解析、网络、源,一样都不能各自为政

一、部署概述

项目值
目标拓扑1 台 controller + 2 台 compute
controller10.10.10.160(同时承担网络节点角色,建议 ≥ 8G 内存 / 50G 磁盘)
compute1 / compute210.10.10.161 / 10.10.10.162(建议 ≥ 4G 内存)
系统CentOS 7.9.2009(Train 必须 CentOS 7;Ussuri 起用 CentOS 8)
内网 yumhttp://10.10.10.10/centos/7.9.2009/
耗时约 40~90 分钟

上篇回顾:(六)运维脚本:健康检查与巡检——单机环境已运维熟练,本篇开始扩展拓扑。

先说结论打消顾虑:**多节点和单机用的是同一个 Packstack,区别只是把应答文件里三个角色的 Host 写成三台不同的机器。**真正的工作量在部署之前——让三台机器的“地基”完全一致。单机手册里的所有坑在多节点全部适用,且新增三类问题:节点间通信、时间一致性、SSH 分发。

二、拓扑与角色划分

图表代码

部署后:多节点

controller 10.10.10.160
Keystone/Glance/Nova调度/Neutron/OVN/br-ex

compute1 10.10.10.161
nova-compute

compute2 10.10.10.162
nova-compute

部署前:单机 All-in-One

10.10.10.160
controller+compute+network+storage

角色职责本例所在机器
controller全部控制面服务 + 数据库 + MQ + 认证10.10.10.160
networkOVN 北向/南向、外部网桥 br-ex10.10.10.160(与 controller 同机)
compute跑实例10.10.10.161 / .162
storageCinder 卷10.10.10.160(体验环境从简)

把 network 单独放一台就是经典“三角色”拓扑(控制/计算/网络各司其职),实验环境没必要,同机即可。

三、基础环境(【每一台】节点都执行)

3.1 主机名与 hosts(三台内容完全一样)

bash

hostnamectl set-hostname controller # 10.10.10.160 上
hostnamectl set-hostname compute1 # 10.10.10.161 上
hostnamectl set-hostname compute2 # 10.10.10.162 上
cat >> /etc/hosts <<'EOF'
10.10.10.160 controller
10.10.10.161 compute1
10.10.10.162 compute2
EOF

应该看到:任意一台机器ping controller、ping compute1、ping compute2都通。

单机时 hosts 写错只是 Keystone 端点解析失败;多节点时,控制面组件之间全靠主机名互相找对方,hosts 不通则部署必失败——且报错位置分散在各个服务的连接阶段,比单机难定位得多。务必逐台验证。

3.2 关防火墙 + SELinux + NetworkManager

bash

systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
# ★ 多节点比单机更容易中招:NetworkManager 和 network 服务打架
systemctl stop NetworkManager && systemctl disable NetworkManager
systemctl restart network

应该看到:systemctl is-active network输出 active,三台机器 IP 都没丢。

为什么 NetworkManager 在多节点更危险:controller 上的 OVN、br-ex 网桥对网卡的接管状态非常敏感,NetworkManager 偶发抢管网卡,会造成间歇性的节点间通信故障——时好时坏的问题最难排查,所以必须 disable 而不只是 stop。

3.3 时间同步:三台指向同一个源

bash

yum install -y chrony
# /etc/chrony.conf 中所有 server 行统一改为:
# server 10.10.10.10 iburst
systemctl restart chronyd && systemctl enable chronyd
chronyc sources
date

应该看到:三台机器都出现^*同步源,且date输出一致(秒级内)。

时间一致性是多节点部署的故障率第一名。单机时时间漂了只影响自己;多节点时 controller 签发的 Token 要被 compute 上的服务消费,compute 时钟落后就会把“新 Token”判为“未生效/已过期”,表现是 compute 服务反复掉线、日志里一片 401。三台机器必须指向同一个NTP 源(而不是各自上网同步)。

3.4 yum 源与 packstack(每一台都要装)

bash

# yum 源配置与单机相同(第(二)篇第 1.4 节整段复制),三台都做
yum install -y centos-release-openstack-train
yum install -y openstack-packstack
rpm -q openstack-packstack

应该看到:每台机器都有openstack-packstack-15.1.0...输出。

★ 常见误区:以为只有 controller 需要 packstack。Packstack 部署时会 SSH 到每台机器执行安装,compute 节点同样要能解析 OpenStack 软件包。

四、SSH 免密(controller → 各 compute)

bash

ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
ssh-copy-id root@10.10.10.161
ssh-copy-id root@10.10.10.162

应该看到:ssh root@10.10.10.161 hostname不输密码直接返回 compute1。

不配免密也行——部署过程中 Packstack 会逐台要求输入 root 密码——但配免密有两个好处:部署无需人守;失败重跑时不会被密码提示打断节奏。顺手验证一下方向反了行不行(有些操作会从 compute 回连):

bash

ssh root@10.10.10.161 "ssh root@controller hostname" # 能返回 controller 即双向 OK

五、应答文件(【仅 controller】执行)

5.1 生成与修改

bash

packstack --gen-answer-file=/root/answers.txt
# ★ 核心就三行:把角色分给不同的机器
sed -i 's/^CONFIG_CONTROLLER_HOST=.*/CONFIG_CONTROLLER_HOST=10.10.10.160/' /root/answers.txt
sed -i 's/^CONFIG_COMPUTE_HOSTS=.*/CONFIG_COMPUTE_HOSTS=10.10.10.161,10.10.10.162/' /root/answers.txt
sed -i 's/^CONFIG_NETWORK_HOSTS=.*/CONFIG_NETWORK_HOSTS=10.10.10.160/' /root/answers.txt
# 常用附加项
sed -i 's/^CONFIG_KEYSTONE_ADMIN_PW=.*/CONFIG_KEYSTONE_ADMIN_PW=Admin@123/' /root/answers.txt
sed -i 's/^CONFIG_NTP_SERVERS=.*/CONFIG_NTP_SERVERS=10.10.10.10/' /root/answers.txt
sed -i 's/^CONFIG_PROVISION_IMAGE_URL=.*/CONFIG_PROVISION_IMAGE_URL=<不会302的镜像URL>/' /root/answers.txt
# 组件取舍与单机一致(第(三)篇 4.2 节),可选组件建议同样关掉

5.2 三个关键参数的含义

参数说明本例
CONFIG_CONTROLLER_HOST控制节点 IP,单个10.10.10.160
CONFIG_COMPUTE_HOSTS计算节点 IP,逗号分隔多台;以后扩容改这行补跑一次即可10.10.10.161,10.10.10.162
CONFIG_NETWORK_HOSTS网络节点 IP;与 controller 同机为简配,单独一台即经典三角色10.10.10.160

与单机对照(第(三)篇 4.1 节):单机是四行 Host 全指向本机;多节点只是把 COMPUTE 从“本机”改成了“两台外部机器”。部署工具没有变,变的只有拓扑描述。

5.3 镜像 URL 特别提醒

CONFIG_PROVISION_IMAGE_URL必须指向不会 302 重定向的地址——单机踩过的 273 字节坑(第(五)篇),在多节点会以同样的方式复现,而且两台 compute 都可能“种下”坏镜像,排查工作量翻倍。内网没有镜像源就把该行留默认,装完手动上传真实镜像。

五点五、深一层:外部网关 br-ex 是怎么工作的

多节点拓扑中,controller(兼网络节点)上有一个特殊设备 br-ex,浮动 IP 能从外网访问到实例,全靠它:

text

外网物理交换机
│
ens33(物理网卡,无 IP 或仅管理 IP)
│
br-ex(OVS 网桥,外部网关 172.24.4.1 挂在这里)
│
router1 的外网接口 → DNAT/SNAT → 租户网络

几个关键点:

  1. 物理网卡与 br-ex 的关系:packstack 部署时会自动把物理网卡桥接进 br-ex。如果部署后浮动 IP 从外部 ping 不通,第一件事就是ovs-vsctl show查 br-ex 下有没有挂物理网卡
  2. 外部网段与物理网一致性问题:flat 网络的 172.24.4.0/24 要么是真实可达的网段,要么需要在测试机上加路由;从外部测浮动 IP 时,你的电脑必须能路由到这个网段
  3. 多节点下的变化:单机时 br-ex 和实例在同一台机器,一切天然可达;多节点时实例分布在 compute 上,浮动 IP 流量要跨机器回 controller 的 br-ex,geneve 隧道(6081/udp)承载这段流量——这也是第(二)篇强调放行 6081 的原因

验证 br-ex 状态的命令集:

bash

ovs-vsctl show # 网桥与物理网卡挂接关系
ip addr show br-ex # 外部网关 172.24.4.1 是否挂上
ovs-ofctl dump-flows br-ex | head # 流表(进阶)

实测经验:多节点排障时,“浮动 IP 不通”的问题链是 安全组 → 路由器网关 → br-ex 挂接 → 隧道连通性,从上往下查,九成在前两步就解决了。

六、用脚本把「三台一致」自动化(可选进阶)

逐台手敲 8 条命令容易漏,把基础环境写成一键脚本,scp 到每台执行:

bash

#!/bin/bash
# node-init.sh —— 多节点基础环境一键初始化(在各节点以 root 执行)
# 用法:./node-init.sh <角色:controller|compute1|compute2>
ROLE=$1
hostnamectl set-hostname $ROLE
cat >> /etc/hosts <<'EOF'
10.10.10.160 controller
10.10.10.161 compute1
10.10.10.162 compute2
EOF
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
systemctl stop NetworkManager && systemctl disable NetworkManager
systemctl restart network
sed -i 's/^server.*/server 10.10.10.10 iburst/' /etc/chrony.conf
systemctl restart chronyd && systemctl enable chronyd
yum install -y centos-release-openstack-train openstack-packstack
rpm -q openstack-packstack && echo "=== $ROLE 初始化完成 ==="

bash

# 在 controller 上分发并执行
for h in 10.10.10.160 10.10.10.161 10.10.10.162; do
scp node-init.sh root@$h:/root/
done

**脚本化的额外收益:三台机器的配置天然一致,不会出现“A 台关了防火墙、B 台忘了”这类隐蔽差异——这正是多节点故障的第一大源头。**注意 yum 源配置(第(二)篇 1.4 节的 local.repo)需要提前放入镜像模板或单独分发。

七、从 2 台到 N 台:扩容思路

Packstack 的多节点拓扑是声明式的,扩容非常直接:

  1. 新机按 node-init.sh 初始化
  2. 改应答文件:CONFIG_COMPUTE_HOSTS=161,162,163(追加新 IP)
  3. 重新执行packstack --answer-file=answers.txt(支持续装,已有节点不受影响)
  4. 验证:openstack compute service list出现新节点且 up

反过来,下线一台 compute:先迁移实例(openstack server migrate),再从 COMPUTE_HOSTS 去掉 IP 重跑。生产环境更规范的做法是用 Kolla-Ansible 的 inventory 管理,但学习阶段用 Packstack 完全够。

八、执行前检查清单(最后一道关)

bash

# 1) 三行 Host 与规划一致
grep -E '^CONFIG_(CONTROLLER|COMPUTE|NETWORK)_HOSTS?' /root/answers.txt
# 2) 三台机器互 ping 通、时间一致、packstack 就位
ssh root@10.10.10.161 'hostname && chronyc sources | head -3 && rpm -q openstack-packstack'
ssh root@10.10.10.162 'hostname && chronyc sources | head -3 && rpm -q openstack-packstack'
# 3) 双向免密 OK
ssh root@10.10.10.161 "ssh root@controller hostname"

应该看到:三行 IP 与拓扑一致;两台 compute 主机名、时间源、packstack 版本全部正确。

这份清单看似重复劳动,实际是性价比最高的一次投入:多节点部署中途失败后重跑一次就是几十分钟,而这份检查 3 分钟就能跑完。

下篇预告:(八)多节点部署执行、验证与排障——按下回车后发生了什么,以及怎么用“实例分布在不同 compute 节点”这个标志性现象确认协同成功。完结篇见。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 5:22:33

工业AI在工厂的落地实践:从质检、预测性维护到排产优化

他山之石可以攻玉&#xff0c;这句话放在工业AI上其实特别贴切。我经常跟朋友说&#xff0c;搞工业AI的这拨人&#xff0c;很多都不是传统制造业出身&#xff0c;而是从互联网、从算法圈子里被“扔”进工厂的。刚开始大家都有点懵&#xff1a;车间里的机器声、老师傅的经验、动…

作者头像 李华
网站建设 2026/10/18 5:22:23

JQuick-Excel 实战:用 VALIDATION 建立可维护的 Excel 导入校验

JQuick-Excel 实战&#xff1a;用 VALIDATION 建立可维护的 Excel 导入校验 tags: Java, Excel, JQuick-Excel, 数据导入, VALIDATION, XML DSL 更多示例: JQuick-Excel 官网示例 https://www.jquick.org/jquick-excel/#demo-formulas0005 简介 Excel 导入的难点通常不在“…

作者头像 李华
网站建设 2026/10/18 5:20:20

从构思到打磨:我的第五个网页完整开发流程解析

把"我的第五个网页"这个标题挖开来讲&#xff0c;其实挺有意思。一个人能从第一个网页写到第五个&#xff0c;说明已经度过了最初的摸索期&#xff0c;开始真正把做网页当成一件有章法的事来对待。我记得很清楚&#xff0c;自己写到第五个页面的时候&#xff0c;最大…

作者头像 李华
网站建设 2026/10/18 5:19:02

Servlet+JSP+JDBC房屋租赁系统毕设实战指南

简介&#xff1a;本资源是一套完整的Java Web毕业设计项目——基于ServletJSPJDBC开发的房屋租赁管理系统&#xff0c;专为计算机专业本科生毕设选题及Java初学者项目实战打造&#xff0c;覆盖Web开发全流程核心技能训练。压缩包为ZIP格式&#xff0c;大小13.69MB&#xff0c;包…

作者头像 李华
网站建设 2026/10/18 5:17:32

风光储氢系统协调控制与Simulink仿真建模实战

1. 这个模型到底在解决什么问题先说结论&#xff1a;这根本不是一套"能发电又能制氢"的演示品&#xff0c;而是一个面向新能源制氢场景的系统级协调控制方案。核心目标就一句话——让风光这种靠天吃饭的不稳定电力&#xff0c;喂给一个很挑食的PEM电解槽&#xff0c;…

作者头像 李华