当你想批量改密码、发文件时,通常会怎么干?用 Shell 写个死循环?部署一套庞大的 Ansible?还是配置复杂的 SaltStack?
对于很多掌握高性能计算(HPC)重器 xCAT 的管理员来说,往往容易陷入一个误区:觉得 xCAT 只是用来做 PXE 自动化装机的。为了用它的并行命令功能,还得先去配 DHCP、配 TFTP、建镜像、搞数据库……这简直就是为了喝杯牛奶而养了一头牛。
如果你已经有了现成的操作系统,只想利用 xCAT 强大的并行执行能力(psh、pscp),完全可以跳过那些繁琐的装机配置,把它变成一个 轻量级、高性能的 SSH 批量管理神器。
1、下载安装 xcat
浏览器访问下载地址 https://xcat.org/files/xcat/,分别在以下两个目录中选择对应的安装包下载:


或者在 Linux 系统中直接执行下载命令:
wget http://xcat.org/files/xcat/xcat-core/2.17.x_Linux/xcat-core/xcat-core-2.17.0-linux.tar.bz2
wget http://xcat.org/files/xcat/xcat-dep/2.x_Linux/xcat-dep-2.17.0-linux.tar.bz2
2、解压 xCAT 包
tar xjvf xcat-core-*.tar.bz2
tar xjvf xcat-dep-*.tar.bz2
解压后产生 xcat-core、xcat-dep 两个目录:

3、创建本地仓库脚本
xCAT 的包里自带了创建本地源的脚本 mklocalrepo.sh。执行成功后,系统会在 /etc/yum.repos.d/ 下生成 xCAT-core.repo 和 xCAT-dep.repo 文件。
# 配置核心库:
cd xcat-core
./mklocalrepo.sh
# 配置依赖库:
cd ../xcat-dep/rh7/x86_64 # 请根据系统版本和实际路径调整
./mklocalrepo.sh
4、配置操作系统本地源
为了让 xCAT 能找到安装系统所需的包,需要挂载 ISO 并配置源:
# 创建挂载点
mkdir -p /media/cdrom
# 挂载 ISO (假设 ISO 在 /root 下)
mount -o loop /root/CentOS-7-x86_64-DVD.iso /media/cdrom
# 创建 repo 文件
cat > /etc/yum.repos.d/local-os.repo <<EOF
[Local-OS]
name=Local OS Repository
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0
EOF
5、安装 xCAT
# 清理并安装
yum clean all
yum install -y xCAT
# 加载环境变量,为了让终端能识别 xCAT 命令
source /etc/profile.d/xcat.sh
# 验证安装
lsxcatd -a
tabdump site
6、基础初始化
安装好后,xCAT 还不能直接工作,需要配置基本的网络和 DNS 指向。
(1)配置 hosts 和主机名
确保管理节点的主机名是 FQDN 格式(如 mgt01.cluster.com),并在 /etc/hosts 中配置好管理 IP。

(2)配置 site 表
告诉 xCAT 谁是老大,以及 DNS/DHCP 由谁提供:
# 替换 192.168.3.5 为你的管理节点 IP,替换 ens33 为你的网卡名称
chdef -t site domain=cluster.com \
master=192.168.3.5 \
nameservers=192.168.3.5 \
ntpservers=192.168.3.5 \
dhcpinterfaces="ens33"
(3)配置 networks 表,定义网段信息
如果只是使用 xcat 的批处理命令,不批量安装系统,此步骤可以不做:
# 清除默认配置(可选)
tabprune networks -a
# 添加新网段 (根据实际网段修改 net, mask, gateway)
chtab netname=192_168_3_0 \
networks.net=192.168.3.0 \
networks.mask=255.255.255.0 \
networks.gateway=192.168.3.2 \
networks.dhcpserver=192.168.3.5 \
networks.tftpserver=192.168.3.5 \
networks.nameservers=192.168.3.5
(4)生成 DNS 和 DHCP 配置
makedns -n
makedhcp -n
7、配置 SSH 免密登录
这是并行命令能工作的 唯一前提。你需要让管理节点免密登录到上面列表里的所有节点。
# 生成密钥(如果已经有了可以跳过)
ssh-keygen -t rsa # 一路回车即可
# 分发密钥,假设你的节点列表在 /etc/xcat/mycluster
for ip in $(cat /etc/xcat/mycluster); do
echo "正在配置 $ip 的免密..."
sshpass -p '你的节点root密码' ssh-copy-id -o StrictHostKeyChecking=no root@$ip
done
# 注意:如果没有 sshpass,你需要先安装 yum install sshpass,或者手动输入密码
8、在 xCAT 数据库里“注册”节点
# 注册节点
mkdef -t node -o rocky01 ip=192.168.3.6 groups=all
mkdef -t node -o centos02 ip=192.168.3.7 groups=all
mkdef -t node -o rocky02 ip=192.168.3.8 groups=all
# 查看已注册的节点
lsdef -t node

9、批处理命令测试
# 测试 ping rocky01 和 rocky02 的网络
pping rocky01-rocky02
# 在所有节点上执行 uptime 命令
psh all uptime
# 拷贝 hosts 文件到所有节点
pscp /etc/hosts all:/etc/

项目地址:https://github.com/xcat2/xcat-core
官网地址:https://xcat.org/
安装包下载地址:https://xcat.org/files/xcat/
文档地址:https://xcat-docs.readthedocs.io/en/stable/
xCAT 是一个强大的集群管理套件,但它不应该被束之高阁。对于很多中小规模的集群运维,或者已经通过其他方式(如手动安装、虚拟机模板)部署好系统的场景,剥离掉 xCAT 复杂的装机功能,只取其 并行执行 的精华,往往能达到“四两拨千斤”的效果。在云栈社区上,你可以找到更多关于集群管理和运维的实用技巧与讨论。
下次当你要对 100 台服务器执行同一个命令时,别再写 for 循环了,试试 xCAT 的极简模式吧!