从零到一:基于XCAT构建企业级计算集群实战

从零到一:基于XCAT构建企业级计算集群实战

1. XCAT集群基础认知与硬件准备

第一次接触XCAT时,我也被这个能管理上千台服务器的工具震撼到了。简单来说,它就像集群界的"瑞士军刀",从硬件发现到系统部署,从日常运维到批量作业,全都能搞定。最近帮某电商平台搭建的200节点计算集群,从裸机到交付只用了3天,靠的就是XCAT的自动化能力。

硬件规划是成功的第一步。建议准备两台千兆交换机(管理网与业务网分离)、至少1台管理节点(推荐双电源+RAID1配置)和若干计算节点。我们上次用的配置是:

  • 管理节点:Dell R740xd(64G内存/2TB SSD)
  • 计算节点:HPE DL380(128G内存/双万兆网卡)
  • 网络拓扑:管理网(192.168.3.0/24)+业务网(10.10.0.0/16)

实际操作中遇到过管理网卡驱动不兼容的问题,后来发现提前准备带igb驱动的CentOS镜像就能解决。建议先用lspci -nnk确认网卡型号,到elrepo.org下载对应驱动。

2. 管理节点深度配置指南

2.1 系统初始化实战

很多人卡在go-xcat安装这步,其实有更稳的国内镜像方案:

curl -o /tmp/go-xcat https://mirrors.aliyun.com/xcat/tools/go-xcat chmod +x /tmp/go-xcat /tmp/go-xcat install --mirror aliyun

这个命令会自动配置国内软件源,速度提升10倍不止。安装完成后一定要执行:

source /etc/profile.d/xcat.sh echo 'source /etc/profile.d/xcat.sh' >> ~/.bashrc

2.2 网络配置的坑与解法

配置网络时最容易出错的是子网掩码转换。比如255.255.254.0要写成192_168_2_0-255_255_254_0格式。我整理了个转换脚本:

#!/bin/bash mask2cidr() { nbits=0 IFS=. for dec in $1 ; do case $dec in 255) let nbits+=8;; 254) let nbits+=7;; 252) let nbits+=6;; 248) let nbits+=5;; 240) let nbits+=4;; 224) let nbits+=3;; 192) let nbits+=2;; 128) let nbits+=1;; 0);; *) echo "Error: $dec is not recognised"; exit 1 esac done echo "$nbits" } NET="192.168.2.0" MASK="255.255.254.0" echo "${NET//./_}-${MASK//./_}"

3. 核心服务调优技巧

3.1 NTP服务的隐藏机关

生产环境强烈建议配置多时间源。修改/etc/ntp.conf时加入:

server ntp1.aliyun.com iburst server ntp2.aliyun.com iburst server 127.127.1.0 fudge 127.127.1.0 stratum 12

关键参数说明:

  • iburst:启动时快速同步
  • stratum:值越大优先级越低
  • restrict:控制访问权限

测试时用ntpq -p看同步状态,reach值达到377才算稳定。曾遇到ntpd崩溃问题,后来发现是SELinux导致,用audit2allow生成策略模块就解决了。

3.2 DNS配置的进阶玩法

大型集群推荐分视图(view)配置DNS。在/etc/named.conf中添加:

view "internal" { match-clients { 192.168.3.0/24; }; zone "cluster.local" { type master; file "cluster.internal.zone"; }; };

这样内外网可以用相同域名解析到不同IP。记得用rndc reload加载配置,而不是直接重启服务。

4. 计算节点批量部署实战

4.1 镜像定制的艺术

制作黄金镜像时,这几个文件必须自定义:

  • /etc/sysconfig/network-scripts/ifcfg-ens33:禁用NetworkManager
  • /etc/ssh/sshd_config:修改UseDNS no
  • /etc/default/grub:添加console=ttyS0,115200n8

推荐使用mkdef -t node生成模板,然后:

genimage centos7.9-x86_64 packimage centos7.9-x86_64 -pkglist=/opt/xcat/pkglist/custom.txt

遇到过镜像打包失败的情况,后来发现是/tmp空间不足,加-t /mnt/tmp参数指定临时目录即可。

4.2 无人值守安装的秘籍

节点定义时这几个参数最关键:

nodeadd node[01-50] groups=compute,all chtab node=node[01-50] noderes.installnic=ens33 noderes.primarynic=ens33 nodeset compute osimage=centos7.9-x86_64-install-compute

批量操作时用-n参数避免交互确认,如:

makehosts -n makedhcp -n

5. 生产环境运维经验

5.1 故障排查三板斧

  1. 日志分析
    tail -f /var/log/xcat/xcatd.log | grep -i error
  2. 网络测试
    xdsh compute 'ping -c 3 master'
  3. 配置检查
    tabdump site | grep -E 'ntp|dns'

5.2 性能优化参数

/etc/xcat/xcatd.conf中添加:

max_connections = 500 worker_threads = $(nproc) log_level = INFO

重启服务前用xcatconfig -t测试配置有效性。

6. 安全加固方案

6.1 证书认证配置

生成CA证书:

openssl req -newkey rsa:4096 -nodes -keyout xcat.key -x509 -days 3650 -out xcat.crt

部署到所有节点:

xdcp compute xcat.crt /etc/xcat/ chtab key=sslcert site.value=/etc/xcat/xcat.crt

6.2 防火墙策略

管理节点需要开放:

firewall-cmd --permanent --add-port=3001/tcp # xcatd firewall-cmd --permanent --add-port=69/udp # tftp firewall-cmd --permanent --add-port=53/tcp # dns firewall-cmd --reload

7. 扩展功能开发

7.1 自定义插件示例

/opt/xcat/lib/perl/xCAT_plugin/下创建:

package xCAT_plugin::mycmd; sub handled_commands { return { 'mycmd' => 'node' }; } sub process_request { my $req = shift; my $nodes = $req->{node}; foreach my $n (@$nodes) { xCAT::MsgUtils->message("I", "Hello $n"); } } 1;

测试命令:

mycmd compute

7.2 API集成案例

用Python调用xCAT API:

import subprocess def get_node_status(nodes): cmd = ['xdsh', nodes, 'uptime'] proc = subprocess.Popen(cmd, stdout=subprocess.PIPE) return proc.communicate()[0].decode()

最后提醒下,大规模部署前务必在测试环境验证所有步骤。曾经有客户直接在生产环境操作,因为DHCP配置错误导致整个办公网瘫痪。建议用-t参数先试运行,确认无误再正式执行。