ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

XCAT集群管理实战:从裸机到节点批量部署

XCAT集群管理实战:从裸机到节点批量部署 折腾过大规模集群的朋友对 XCAT 这三个字母应该不陌生。它是 Extreme Cloud Administration Toolkit 的缩写一套开源集群管理和裸机配置工具最早是 IBM 针对自家 HPC 方案搞出来的后来成了能管异构服务器的通用利器。我在日常维护实验室机群时最头疼的就是一堆新机器从拆箱到能跑作业的“最后一公里”——插电、开机、装系统、配网络、加监控一台一台手工来根本扛不住而 XCAT 就是用来解决这套问题的。它既能给别人口中的“裸金属”自动装操作系统也能管电源开关、远程控制台、固件升级还能批量下发配置和脚本。这篇东西我就把自己从零开始装 XCAT、再到让它乖乖把一台裸机变成可用节点的完整过程写清楚适合刚接手集群、不想靠人工一台台装系统的运维朋友也适合正在调研开源批量装机方案的技术选型党。1. XCAT 的核心思路先把“管机器”变成“管定义”1.1 它到底是怎么工作的XCAT 的底层逻辑其实不复杂核心就是“数据库 服务 节点定义”。安装好管理端之后所有被管理的节点都会在 XCAT 的数据库中留下一条记录记录里包含这个节点的 MAC 地址、IP 地址、固件类型、操作系统镜像、启动方式等信息。管理端通过 DHCP、TFTP、DNS、HTTP 这类基础网络服务把节点从“没系统的裸机”一步步引导起来。打个比方XCAT 之于服务器集群相当于房产中介手里的房源管理系统。它不直接盖楼但它知道每套房子的地址、户型、装修进度还能一键组织装修队进场。你要做的事是先把“房源信息”录进去剩下的引导、分发、执行XCAT 会在网络服务的配合下自动完成。这套设计最大的好处是扩展性极强。节点多了你不需要记住每台机器的具体配置只需要按“节点组”批量操作节点硬件变了也只需要改数据库里的定义不用改脚本和流程。集群运维的复杂度从“对每一台机器做动作”降成了“对一组定义做动作”。1.2 为什么我要选 XCAT 而不是其他工具现在批量装机的工具并不少PXE Kickstart、 Cobbler、 Foreman、 MaaS 都有各自的长处但 XCAT 在某些场景下特别能打。第一它和 HPC 生态结合得非常深。作业调度器、并行文件系统、InfiniBand 网络这些集群里的常见组件在 XCAT 里都有对应的配置模板和管理命令。路径比如 xcatprobe、 nodestat、 xdsh都是为大规模集群运维设计的能直接对接集群运行状态。第二它对固件和电源的管理能力很强。很多裸机配置工具只管到“装完操作系统”就收工而 XCAT 的 rpower、rflash、rbeacon 这类命令可以直接操作服务器的 BMC/IPMI 接口实现远程开机、关机、重启、查看固件版本、更新固件。这对机房无人值守的场景太关键了。第三虽然它功能重但对小型环境也很友好。我见过不少只有几台机器的实验室也在用 XCAT因为它把 DHCP、TFTP、NFS、HTTP 这些服务统一管理起来了不需要你手工拼凑一堆配置文件。安装好之后一条命令就能把某个节点组全部开机并开始装系统。好了这些话先点到为止下面直接进入实操环节。2. 安装准备硬件、系统和网络拓扑的一次性确认2.1 安装 XCAT 前必须先满足的硬件条件XCAT 管理端的硬件要求不高普通 x86_64 服务器或性能好点的虚拟机就行。我手头这台管理端是 8 核 16 线程、32GB 内存、500GB 本地磁盘实测管 200 台节点绰绰有余。系统盘空间建议至少留 50GB因为后面要用它存放操作系统镜像、kickstart 文件、节点运行日志镜像一多磁盘会涨得很快。被管理的节点则必须有支持 PXE 网卡启动的网卡和 BMC/IPMI 远程管理接口。没有 BMC 也能用 XCAT 装系统但电源管理和远程控制台功能就废了大规模场景基本不推荐。另一点容易被忽略节点网卡 PXE 固件必须支持 UEFI 或 BIOS 启动中的至少一个XCAT 两套机制都支持但配置不一样提前确认能省不少事。如果你电脑上已装了别的 DHCP 服务建议先停掉或规划好网段否则 XCAT 自带的 DHCP 服务和它冲突会让节点启动时拿到错误配置排查起来非常折腾。2.2 操作系统选型和网络规划建议XCAT 官方对 CentOS/RHEL 系和 Ubuntu/Debian 系都有支持。我自己长期用的是 CentOS 7.9 和 Rocky Linux 8 系列这俩和 XCAT 的兼容性最省心。Ubuntu 下装也顺就是个别依赖包名不同后面我会提到。网络规划是安装前最重要的一步。管理端至少需要两个网络口一个接外部业务网络一个接受管节点的 provisioning 网络。provisioning 网络建议独立划分不与其他业务流量混跑因为 PXE 引导和操作系统安装时的流量非常大混在一个广播域里容易拖垮正常业务。我常用的网段规划如下管理端 eth0192.168.1.10/24接入外部网络管理端 eth110.0.0.1/24接节点 provisioning 网络节点网段10.0.0.0/24IP 从 10.0.0.100 开始分配节点机器数量多的时候建议把 IP 分配做成按组规划比如计算节点 10.0.0.100-10.0.0.199存储节点 10.0.0.200-10.0.0.249这样后续写 ACL 和防火墙规则时非常方便。2.3 安装包从哪里拿XCAT 的安装包可以从官方 GitHub releases 页面下载也可以配置官方 yum/apt 仓库。官方仓库的地址是 xcat.org 上的仓库链接里面按操作系统版本分好了目录直接添加 repo 文件就好。我一般从头开始搭环境时会直接用官方仓库因为这样能把依赖一起解决掉省去手动下载 rpm 的麻烦。如果网络环境比较封闭也可以在一台能联网的机器上把 rpm 包下载好再拷贝到内网机器上安装。唯一要注意的是依赖关系XCAT 依赖 perl、httpd、dhcp、tftp-server、nfs-utils 等一堆包离线装的时候最好用 yum localinstall 配合本地缓存目录一次把依赖都装齐。3. 安装步骤从空系统到 XCAT 管理端3.1 配置 repo 并执行安装在 CentOS/Rocky 环境下我的做法是先装 epel-release再添加 XCAT 的 repo。repo 文件内容大概是这样cat /etc/yum.repos.d/xcat.repo EOF [xcat] namexcat baseurlhttps://xcat.org/files/xcat/repos/yum/8/xcat-core/ enabled1 gpgcheck0 EOF然后执行yum clean all yum install xcat -y装完以后XCAT 会提示你把环境变量加载到 shell 里。默认安装路径在 /opt/xcat所以要执行source /etc/profile.d/xcat.shUbuntu/Debian 下的安装稍微不同需要先下载 deB 包或配置 apt 源。命令大致是wget https://xcat.org/files/xcat/repos/apt/$(lsb_release -sc)/xcat-core/xcat-core.deb dpkg -i xcat-core.deb apt-get update apt-get install xcat安装完成后可以用以下命令验证核心命令是否可用lsxcatd tabdump site能看到输出而不是 command not found就说明装好了。3.2 初始化关键服务XCAT 安装完成后最怕的就是“以为装好了结果服务没起来”。初始化主要分三步配置网络服务、启动 xcatd 守护进程、初始化数据库。先启动 xcatdservice xcatd start chkconfig xcatd on接着配置节点网络服务的接口。XCAT 里把 provisioning 网络相关的配置放在 site 表里常用的是设置 master 地址、动态 IP 分配范围等。例如chdef -t site -o clustersite master10.0.0.1再设置 DHCP 网段范围。XCAT 默认会维护一个 dhcp 表你可以用 mkdef 或 chtab 命令往里写数据下面这个是设置节点动态分配起始和结束地址chtab dhcp.net10.0.0.0 netmask255.255.255.0 dynamicrange10.0.0.100-10.0.0.200这一步做完后需要让 XCAT 重新生成并加载 DHCP 配置makedhcp -nmakedhcp 后面带 -n 表示初始化网络生成 dhcpd.conf 并重启 dhcpd 服务。如果之后新增了节点也要重新执行 makedhcp 来刷新租约文件这个后面会再讲。数据库层面XCAT 默认使用 SQLite 作为后端装好即用基本不用额外初始化。如果环境特别大需要上 MySQL/MariaDB再用 xcatconfig 重新指向数据库不过对大多数场景 SQLite 完全够用别图新鲜给自己加戏。3.3 验证核心服务是否正常安装初始化完成后建议顺手验证一遍服务链路别等到节点装系统时才发现 TFTP 没起来。依次查看这几个服务端口ss -tlnp | grep -E :67|:69|:80|:401167DHCP69TFTP80HTTP用于下载镜像4011PXE 代理 DHCP如果这些端口没监听大概率是 /etc/xcat 下的配置文件有问题或者 makedhcp 执行失败。这时候去查 /var/log/messages 和 /var/log/xcat/xcat.log基本能定位到原因。4. 核心配置把“裸机”变成“可被管理的节点”4.1 理解 XCAT 的节点定义表和节点组XCAT 的所有被管节点都记录在 nodelist 表里。你可以理解成一张 Excel 表每行是一台机器每列是这个机器的一个属性。常见的属性包括属性名作用node节点名groups所属节点组mgt管理方式如 ipmiip节点 IPmac节点 MAC 地址bmcBMC IP 地址bmcusernameBMC 用户名bmcpasswordBMC 密码nodetype节点类型如 os, mp 等把这些信息录入数据库最方便的是用 mkdef 命令。例如定义一个叫 node01 的节点mkdef node01 groupscompute,all ip10.0.0.101 mac52:54:00:12:34:56 bmc10.0.1.101 bmcusernameadmin bmcpasswordadmin mgtipmi nodetypeos这里 mgtipmi 是关键XCAT 会通过 IPMI 协议去控制节点的电源而 bmc 地址则是独立于业务网络的带外管理地址。生产环境里BMC 地址最好单独规划一个网段和业务网络物理隔离安全性和稳定性都更好。节点组的概念也很实用。比如我有 50 台计算节点就可以统一放到 compute 组里后续执行命令、装系统都可以按组来而不用一台台指定chdef compute groupscompute,all以后对组操作就行比如rpower compute on一条命令就能把整个 compute 组全部开机。4.2 手动录入 MAC 地址 vs 自动发现机制节点 MAC 地址是 PXE 引导时识别机器的唯一依据。在环境规模不大、机器数量固定时手工录入 MAC 地址最直接。但在几十上百台新机器面前手工录入会录到手软而且容易抄错。XCAT 提供了节点自动发现机制。你只需要在交换机上为 provisioning 网络开启 DHCP snooping如果有条件的话再在 XCAT 中定义“发现节点范围”然后让新机器以 PXE 方式启动。XCAT 的 discovery 流程会抓到新机器的 MAC并自动在数据库中生成一条节点记录。我用过的简单流程是这样mknb ppc makedhcp -n然后定义发现规则。例如允许 10.0.0.0/24 网段内所有未知设备被自动加入chdef -t site -o clustersite discoverydynamicrange10.0.0.100-10.0.0.200在节点端设置为网络启动后开机XCAT 会在日志里出现类似 “Discovery: node ... is discovered” 的记录。这时再用 tabdump nodelist 查看会发现新节点已经被自动添加。自动发现虽爽但我第一次用的时候曾因为忘记给新节点分配节点的 OS 镜像导致机器陷入反复重启。后面我会提到镜像定义的问题。4.3 配置操作系统镜像让节点有系统可装节点从网络引导起来之后XCAT 需要提供一个可安装的操作系统镜像。这一步是通过 copycds 命令完成的。把操作系统安装 ISO 放入光驱或挂载到管理端然后执行copycds /path/to/CentOS-7-x86_64-Minimal-2009.isocopycds 会把 ISO 里的文件复制到 /install 目录下并在 osdistro 表里注册一个操作系统发行版记录。完成后可以查看lsdef -t osimage可以看到类似centos7.9-x86_64-minimal这样的 osimage 定义。这个 osimage 就是节点将要安装的系统模板。如果默认模板不够用——比如想自定义分区、指定软件包、注入 SSH 密钥——可以基于已有镜像复制一个新镜像定义再修改copycds centos7.9-x86_64-netinstall.iso mkimage -i centos7.9-x86_64-netinstall不过更常见的做法是直接编辑 osimage 对应的 kickstart 文件改分区、软件包和 post-install 脚本。后面章节我会给一个最小可用的 kickstart 示例。5. 节点开机与系统部署从裸机到可用节点的完整链路5.1 准备工作确认节点启动顺序和 BMC 配置在让节点开始装系统之前有两件事必须确认。第一节点的 BIOS/UEFI 启动顺序里网络启动PXE必须排在第一位或者在需要装系统时手动选择从网络启动。第二如果要用 IPMI 做电源管理必须确认 BMC 的用户名密码正确而且管理端网络能访问到 BMC 地址。BMC 连通性可以用 ipmitool 验证ipmitool -H 10.0.1.101 -U admin -P admin chassis status能返回 Power 状态就说明带外通道是通的。XCAT 还自带一个工具叫 rpower 的底层探测命令rpower node01 stat这条命令能直接返回节点电源状态如果显示On或Off就说明 IPMI 配置正确。5.2 开始安装一条命令让节点“裸奔”变“装机”做好上面两步后给节点指定要安装的 osimage然后远程开机XCAT 就会联动 DHCP、TFTP、HTTP 完成 PXE 引导并自动安装。命令是nodeset node01 osimagecentos7.9-x86_64-minimalnodeset 的作用是设置节点下次启动时的网络引导行为并生成对应的 PXE 配置文件。执行完可以用lsdef node01确认状态。接着远程开机rpower node01 on开机后节点会通过 DHCP 获取 IP并从 TFTP 加载引导文件再通过 HTTP 获取安装内核和系统包整个过程不需要人在节点跟前操作。正常情况下过几分钟到十几分钟节点就会自动装完系统并重启。5.3 监控安装进度node状态和 console 日志装系统时可以开着终端观察节点状态。XCAT 有专门命令nodels node01这个命令显示节点当前的期望状态。如果想看得更细可以用 rconsole 直接连到节点的虚拟控制台rconsole node01这时会进入类似串口终端的界面能看到节点安装过程中的详细输出。装完系统重启后按Ctrl]退出 rconsole。我个人经验是小规模环境直接 rconsole 盯一下就行大规模并发安装时盯安装日志或踢一脚 nodestat 汇总看状态更实用。5.4 安装完成后从“装机态”切回“运行态”系统安装完成并重启后节点会再次通过 PXE 启动。如果此时 XCAT 还保留着 install 状态的 PXE 配置节点可能会再次进入安装流程造成循环重装。所以装完系统后一定要把节点状态切回“无操作”或“shell”状态。XCAT 里这个动作叫nodeset重置nodeset node01 boot或者保险起见所有节点一次性重置nodeset compute bootboot状态会让节点从本地磁盘启动不会再触发 PXE 安装。这一步最容易忘我第一次操作时就因为偷懒导致一台节点反复重装了三次系统等到发现时半小时已经过去了。如果节点后续还需要通过 XCAT 做系统同步或远程执行命令则还需要在节点上安装 xcat 客户端组件。通常 osimage 的 kickstart 中已经包含了安装 xcat 客户端的逻辑装完系统后管理端就能用 xdsh 直接管理节点。6. 常用命令与日常管理掌握了这些XCAT 就上手了一半6.1 电源管理和控制台操作XCAT 日常用得最多的应该就是 rpower 和 rconsole 这对组合。rpower 负责电源控制支持的命令词很直观rpower node01 on # 开机 rpower node01 off # 关机 rpower node01 reset # 重启 rpower node01 status # 查看电源状态 rpower all stat # 查看所有节点电源状态rconsole 负责带外控制台。连上之后就像坐在节点显示器前一样能看到开机自检、BIOS 界面和操作系统启动日志。遇到操作系统崩溃、网络不通、SSH 进不去的情况rconsole 是救命通道。有个小技巧rpower 和 rconsole 都支持节点组所以排查问题时会特别快。比如某个计算任务异常导致一组节点无响应直接rpower compute reset一条命令重启整组机器省去一台台操作。6.2 批量命令执行xdsh管理大量节点时最忌讳一台台登录去执行命令。XCAT 提供了 xdsh效果相当于在目标节点组上并发执行 SSH 命令。比如查看所有计算节点的负载xdsh compute uptime把结果汇总输出并且支持 -f 参数指定同时执行的线程数。我给 100 台节点并发跑命令时设的是 32 个并发线程速度很快而且不容易压垮管理端。xdsh 还支持把本地文件分发到节点上这个功能在更新配置、下发脚本时是神兵利器xdsh compute -F /etc/hosts --target /etc/hosts不过分布式执行命令时一定要注意命令的幂等性。同一个命令重复执行两次结果应该一致否则远程批量操作会把节点搞乱。6.3 硬件信息收集和固件管理XCAT 有 rinv 命令可以批量收集节点的硬件信息比如 CPU、内存、磁盘、固件版本等rinv node01 all也可以指定某项rinv node01 serial cpu这对资产盘点特别有用。配合 rflash 还能更新固件rflash node01 /path/to/firmware.bin不过固件更新风险较高建议先在单台节点上验证成功后再批量操作别整个组一起上万一半数节点刷挂就热闹了。6.4 系统状态监控和日志快速定位XCAT 自带的监控命令能把节点状态可视化汇总nodestat compute输出里会列出节点的电源状态、当前管理状态等信息。排查问题时结合 /var/log/xcat/xcat.log 基本能覆盖大部分故障场景。日志文件的路径如果变了可以执行lsdef -t site -o clustersite | grep log来确认。7. 常见问题排查与避坑指南7.1 节点 PXE 引导失败或反复重启PXE 引导失败通常先看 DHCP 是否正常响应。在管理端执行makedhcp -q查看当前 DHCP 租约情况确认节点是否拿到了正确 IP。如果租约正常但引导还是失败检查 TFTP 服务是否监听在 provisioning 网络接口上tftp 10.0.0.1 -c get /grub2/grub.cfg如果 TFTP 正常但内核加载后报错多半是 nodeset 状态不对或者镜像不完整用lsdef node01看看 boot 状态再用nodeset node01 install重新设置为安装态。节点反复重启几乎可以断定是 PXE 安装流程没结束但节点已重启或者装完系统后没有把状态切回 boot。解决办法在安装完成后及时执行nodeset compute boot7.2 IPMI 不通导致无法电源管理rpower 报错或者执行超时可以先检测 BMC 通不通ping 10.0.1.101 ipmitool -H 10.0.1.101 -U admin -P admin mc infoBMC 不通多半是带外网段路由不通或者 BMC 配置了 VLAN 但交换机端口没放通。排除网络问题后再检查 XCAT 数据库中 bmc 字段是否填写正确lsdef node01 | grep bmcBMC 密码包含特殊字符时记得在命令里用单引号包起来不然 shell 会把密码截断。7.3 新节点无法自动发现自动发现失败最常见的原因是 provisioning 网络上没有开启 DHCP snooping或者交换机端口隔离策略阻挡了未知设备的 DHCP 请求。还有一种情况是 XCAT 的 discovery 范围没设置对。检查一下tabdump site | grep discovery如果 dynamicrange 没设先用 chtab 或 chdef 加上再重试。还有一点节点开机引导时如果之前已经装过系统PXE 优先顺序不对也会跳过发现流程手动在 BIOS 里选择一次网络启动即可。7.4 批量执行 xdsh 时部分节点报错xdsh 部分节点失败常见原因是节点上的 SSH 密钥没被正确分发。XCAT 的 osimage 在 kickstart 里通常会注入管理端的公钥但如果自定义了镜像就可能漏掉这一步。解决办法是先把管理端公钥手动追加到目标节点ssh-copy-id root10.0.0.101或者干脆重新执行一次节点的 post-install 脚本。另一个坑是节点主机名解析失败检查 /etc/hosts 是否包含完整节点清单。7.5 节点安装后没有自动执行配置脚本不少人在自定义镜像时喜欢在 kickstart 的 %post 段写一堆初始化脚本但装完发现没生效。我遇到过的原因有两种一是 %post 里的命令执行环境没有网络需要先启动网卡或指定 DNS二是 kickstart 文件语法错误导致 %post 段被整体忽略。建议写 %post 脚本时先输出一行日志到 /root/post_install.log方便确认是否执行%post exec /root/post_install.log 21 echo start post install # 你的初始化命令 %end这样出了问题rconsole 进去看下 /root/post_install.log 就能判断到底是脚本没执行还是执行到某一步报错。8. 聊聊我踩过的坑和一些经验体会8.1 管理端磁盘规划要认真做第一次搭 XCAT 时我把 / 分区只分了 40GB结果放了三个发行版的 ISO 和几十个 osimage 之后磁盘直接爆了。后来调优的时候把 /install 目录单独挂到一块 500GB 的数据盘上才算安稳。镜像文件只增不减所以磁盘规划一定要给足余量。建议管理端至少留出 200GB 的独立空间给 /install。8.2 多网卡环境下最容易选错 provisioning 接口XCAT 默认会使用第一个网卡作为 master 地址但服务器常常不止一个网口。如果 provisioning 网络跑在 eth1 上而 XCAT 默认指向 eth0节点就死活拿不到地址。解决办法是在安装后用 chdef 明确指定 master 和 nameserverschdef -t site -o clustersite master10.0.0.1 chdef -t site -o clustersite nameservers10.0.0.1然后重新 makedhcp 和 restart xcatd。8.3 节点组命名要有规范我当时随手建了好几个组什么“oldhosts”“newhosts”“temp”时间一长自己都分不清哪些机器该干什么。后来重新整理成按用途和硬件类型命名比如 compute-gpu、storage-nfs、login、fatnode一眼就知道组的含义。特别是在 xdsh 和 rpower 批量操作时组命名清晰能避免误操作。8.4 大规模安装时要注意并发抑制曾有一次我对 80 台节点同时触发安装结果管理端 CPU 满载HTTP 服务响应变慢部分节点安装超时。后来在 xcat 配置里调低了并发的节点数量同时把安装镜像放到 SSD 盘上问题解决。经验是大规模部署时分批操作比一次性梭哈更稳。rpower node01-10 on # 等 10 台装完再处理下一批XCAT 是那种“配置一次长期受益”的工具。它需要你花时间理解网络引导、DHCP、TFTP 这些基础服务但只要跑通一次后续加机器、换硬件、系统重装都会变得非常顺滑。如果你也是被一批批裸机折腾到头大的人不妨从一个小网段开始试试先让两三台节点跑起来再慢慢扩大规模这条路我走过值得。
返回列表