日常运维操作

环境速查

环境速查

项目

值

本地目录

/opt/skyformai(软链接目录,host-setup生成)

共享目录

/opt/skyformai_shared(全集群共享)

配置目录

/opt/skyformai/etc(cb.yaml、hosts、queue.yaml…)

日志

/opt/skyformai/log/<daemon>.<host>.log

服务

systemd 服务名 aip

ccluster        # 集群概览,直接给出 MASTER_HOST
chosts          # 主机状态
chosts -c       # 已 hclose 的主机
chosts -l node1 # 某主机详情:maxslots、nprocs、STATUS
cjobs -m node1  # 某主机上的作业

移除计算节点(示例:node1)

警告

改 cluster.hosts 需重启全集群 cbls,会造成数分钟中断,请在维护窗口操作。

1. 先关闭调度,再处理作业

csadmin hclose -C "节点下线维护" node1
cjobs -m node1

等作业跑完,或强制清空:ckill -m node1(杀不掉加 -r)。

备注

hclose 只阻止派新作业,不影响已运行的。先关再查,避免中间又派进新作业。

2. 备份并改配置(master,共享目录只改一次)

cd /opt/skyformai/etc
cp -a cb.yaml cb.yaml.bak.$(date +%Y%m%d)
cp -a hosts   hosts.bak.$(date +%Y%m%d)

编辑 cb.yaml,删掉 node1 出现的所有位置:cluster.hosts、queues[].hosts、hostgroups[].members、limits[].hosts。

sed -i '/\bnode1\b/d' /opt/skyformai/etc/hosts    # AIP 内部 IP↔主机名解析表

警告

/opt/skyformai/etc/queue.yaml、hg.yaml 等动态文件会覆盖 cb.yaml,务必 grep -rn node1 /opt/skyformai/etc/ 全扫一遍,否则主机重启后还会回来。

3. 校验配置

cadmin ckconfig && csadmin ckconfig

有 fatal error 先修,否则 reconfig 会被拒绝。

4. 停 node1 上的服务(node1 本机)

systemctl stop aip && systemctl disable aip

5. 删环境变量(node1 本机)

rm -f /etc/profile.d/aip.*

6. 删本地软链接(node1 本机)⚠️ 高危

先确认 /opt/skyformai 不是共享挂载点:

df -h /opt/skyformai
find /opt/skyformai -maxdepth 1 -type l -exec ls -ld {} \;   # 逐个确认
find /opt/skyformai -maxdepth 1 -type l -delete

危险

rm 结尾不能带 /,带尾斜杠会顺链接删掉共享存储上的真实文件,等于摧毁集群。

7. 重启集群服务(master)

cadmin reconfig
csadmin schedrestart

8. 验证

chosts -S          # 主机总数应比原来少 1
chosts -l node1    # 应报 invalid host
cping              # 其余主机可达
tail -n 50 /opt/skyformai/log/cbsched.<master>.log

新增计算节点(示例:node2)

备注

前置条件:静态 IP、集群内网防火墙关闭、登录用户的 UID/GID 与集群一致、依赖包已装。

发行版依赖包安装命令

发行版

依赖包安装命令

EL7(如 CentOS 7)

yum -y install libcurl libyaml psmisc net-tools

EL8 及以上(如 Rocky Linux 8、RHEL 8/9)

dnf install -y libcurl libyaml psmisc net-tools libnsl

Ubuntu(Debian 系)

apt install dmidecode numactl psmisc

1. 挂共享目录(node2 本机)

mkdir -p /opt/skyformai_shared
mount <存储>:/share/skyformai_shared /opt/skyformai_shared   # 路径与集群其他主机一致
hostname -s      # 短主机名,必须与下面配置里的名字完全一致

2. 加入主机名解析(master,共享目录只改一行)

echo "192.168.20.103 node2" >> /opt/skyformai/etc/hosts    # 主管理节点必须在该文件第一行

3. 加入 cb.yaml(master)

在 cluster: → hosts: 下新增:

- name: node2

备注

若原配置已用范围写法(如 node[0001-0100])覆盖新主机名,此步可跳过。

4. 校验配置

cadmin ckconfig && csadmin ckconfig

有 fatal error 先修,否则 reconfig 会被拒绝。

5. 运行 host-setup(node2 本机,必须 root)

/share/skyformai_shared/host-setup

做三件事:建 /opt/skyformai 软链接、启用并启动 systemd 服务 aip、设置 /etc/profile.d 环境变量。

6. 重启集群服务(master)

cadmin reconfig
csadmin schedrestart

7. 验证

chosts -S          # 主机总数应比原来多 1
chosts -l node2    # STATUS 应为 ok
cping              # 其余主机可达
tail -n 50 /opt/skyformai/log/cbsched.<master>.log

队列增删改

队列定义示例(/opt/skyformai/etc/cb.yaml)

queues:
- name: medium
  description: 通用计算队列
  priority: 3
  fairshare: "[default, 1]"
  hosts: compute            # EDA 计算主机组
  usermaxslots: 2
  runlimit: 1440            # 24 小时

- name: gpu
  description: GPU 计算为主的应用
  priority: 3
  hosts: gcompute           # 使用 GPU 主机组
  resspec: rusage[gpu=0.25] # 按作业槽平均分配 GPU

- name: high
  description: 高优先级队列,可抢占普通作业所占的资源
  priority: 10              # 优先级只要高于 medium 队列即可
  users: user03 user04      # 只有这两个用户可以使用这个队列
  exclusive: yes

常用队列参数

常用队列参数

参数

含义

hosts

该队列可用主机/主机组;all不限

users

允许使用该队列的用户/用户组;all不限

priority

队列优先级,数字越大越优先

fairshare

公平分享策略,[default, N]表示每用户等同 N 份份额

usermaxslots

每用户最多占用的作业槽数

runlimit

作业运行时长上限(分),超时作业被杀掉

slotreservetime

大作业/独占作业的作业槽预留分钟数

exclusive

yes表示独占作业,只调度到无作业运行的主机

操作步骤

  1. 备份:cp -a cb.yaml cb.yaml.bak.$(date +%Y%m%d)

  2. 改配置:在 queues: 段新增/删除/修改队列及其上述参数。

  3. 校验:cadmin ckconfig && csadmin ckconfig。

  4. 生效:cadmin reconfig + csadmin schedrestart。


更换 / 移除 master 节点(示例:mgt01 → mgt02)

备注

master 由 cb.yaml 的 master_list 决定;未显式配置时,cluster.hosts 段的前 3 台主机自动成为 Master 候选(主机总数 < 3 时所有主机都是候选)。另外 /opt/skyformai/etc/hosts 文件中主管理节点必须放在头部。

查当前 master

ccluster                                       # 输出 MASTER_HOST
lsid
grep -n master_list /opt/skyformai/etc/cb.yaml # 未定义 → 按 hosts 段前 3 台算

备份并改配置(master,共享目录只改一次)

cd /opt/skyformai/etc
cp -a cb.yaml cb.yaml.bak.$(date +%Y%m%d)
cp -a hosts   hosts.bak.$(date +%Y%m%d)

把 mgt02 提到 master_list 第一位(原本没这个参数就新增到 cluster: 段下):

cluster:
  master_list: mgt02 mgt01      # 空格分隔,第一位优先

同时把 /opt/skyformai/etc/hosts 里的 mgt02 那一行挪到文件头部。

校验

cadmin ckconfig && csadmin ckconfig

让新 master 接管(在 mgt01 上停服务)

systemctl stop aip          # 或只停 cbls:cadmin lsshutdown mgt01

危险

这一步会短暂中断调度。候选列表里还有活着的主机时,调度器会自动在下一个候选上启动,不用手动干预。

确认接管

lsid        # MASTER_HOST 应为 mgt02
ccluster
tail -n 50 /opt/skyformai/log/cbls.mgt02.log

重启集群服务(新 master 上)

cadmin reconfig
csadmin schedrestart

处理旧 master

  • 降级为普通管理节点:留在 master_list 里当备份候选即可;

  • 彻底移除:先从 master_list 和 cluster.hosts 里删掉,再按第 2 节「移除计算节点」8 步走。

警告

master_list 至少留 2 台候选。只剩 1 台时 master 故障就无冗余,整个集群停摆。


增加 / 删除集群管理员

三种”管理员”别搞混

三种管理员的配置位置

配置位置

含义

cluster.administrators

集群管理员列表,至少 1 个,第一位是主管理员

queues[].administrators

队列管理员:可操作本队列内任何用户的作业

ugroups[].administrator

用户组管理员:可查看本组成员的作业,每个群组只能指定 1 名

cluster:
  administrators:      # 部分官方示例写作 administrator:(单数)
  - cadmin             # ← 第一位 = 主管理员
  - root
  - user01

增加管理员

  1. 前提:该用户名必须在所有主机上都存在且 UID/GID 一致,否则跨机执行会失败。

  2. 编辑 cb.yaml,在 administrators 下加一行。

  3. 校验并生效:

cadmin ckconfig && csadmin ckconfig
cadmin reconfig
csadmin schedrestart
  1. 验证:用该用户执行 csadmin hclose 这类特权子命令应当成功。

删除管理员

  1. 编辑 cb.yaml,从 administrators 列表删掉该用户 —— 至少保留 1 个。

  2. 如果删的是第一位(主管理员),必须把 /opt/skyformai/work 的属主改成新的第一个管理员:

chown -R <新主管理员> /opt/skyformai/work

危险

work/data 的 owner 必须是 administrators 里的第一个用户。只改配置不改属主,调度器会因权限问题起不来。

  1. 校验生效:cadmin ckconfig && csadmin ckconfig → cadmin reconfig + csadmin schedrestart

  2. 验证:用该用户执行 csadmin reconfig 应被拒绝。


作业管理常用命令

提交(csub)

csub ./job.sh                                  # 最简提交,自动选队列
csub -q medium -n 8 ./job.sh                   # 指定队列 + 8 个作业槽
csub -m node02 "sleep 60"                      # 只在 node02 上跑(-m 主机组同理)
csub -J check -o out.log -e err.log ./job.sh   # 指定作业名、输出/错误文件
csub -W 2:00 ./job.sh                          # 运行时限 2 小时
csub -M 8G ./job.sh                            # 内存限:-M 默认 KB,结尾 M/G 为 MB/GB
csub -w "done(1234)" ./job.sh                  # 依赖:1234 完成后才跑
csub -J "arr[1-10]%3" ./job.sh                 # 作业阵列 1~10,最多同时跑 3 个
csub -I                                        # 交互式作业
csub -H ./job.sh                               # 提交为挂起态(PSUSP),需 cresume 释放

备注

不指定 -q 时按 CB_DEFAULTQUEUE → cb.yaml 的 default_queues 挑队列;不指定 -n 时只请求 1 个槽。

作业内可用的环境变量

常用环境变量

变量

含义

CB_JOBID

作业 ID

CB_JOBNAME

作业名(csub -J)

CB_QUEUE

所在队列

CB_SUB_HOST

提交主机

CB_SUBCWD

提交时的工作目录

CB_MCPU_HOSTS

分配的主机及每机槽数

CB_MAX_NUM_PROCESSORS

申请的最大处理器数

CB_JOBINDEX

阵列元素下标(阵列作业用)

查看(cjobs / chist)

cjobs                    # 默认:自己未完成的作业
cjobs -w                 # 宽格式,字段不截断
cjobs -l 101             # 详情:等待/暂停原因、资源限制、执行目录
cjobs -a                 # 含最近完成的作业(默认保留 CLEAN_PERIOD,约 4000 秒)
cjobs -p                 # 排队作业 + 未调度原因          ← 排查 PEND 首选
cjobs -p -l              # 同上,并给出具体主机名
cjobs -r / cjobs -s      # 只看运行中的 / 只看暂停的
cjobs -u all             # 所有用户的作业(受 cb.yaml 的 user_view_alljobs 限制)
cjobs -q medium          # 某队列的作业
cjobs -m node02          # 执行主机为 node02 的作业
chist -l 101             # 已滚出 cjobs 窗口的历史作业
cjobs -o "jobid stat exec_host finish_time"   # 自定义输出字段,便于脚本解析

暂停 / 恢复 / 终止 / 重排队

cstop 101                # 挂起:顺序作业 SIGSTOP,并行作业 SIGTSTP
cresume 101              # 恢复挂起作业,发 SIGCONT
ckill 101                # 终止:先 SIGINT/SIGTERM 给清理机会,再 SIGKILL
ckill -r 101             # 杀不掉时强制从 AIP 摘除并释放资源
ckill -m node02 0        # 杀某主机上的全部作业(0 = 所有匹配项)
ckill -q medium 0        # 杀某队列的全部作业
crequeue 101             # 终止并回原队列重排,作业 ID 不变,从头重跑

危险

cstop / cresume / ckill / crequeue 不带参数选择器时默认只操作你最近提交的那一个作业。批量杀必须带 0,且 0 只对同时给出的 -m/-q/-u/-g/-J 过滤条件生效 —— 漏掉 0 是”以为全杀了、实际只杀了 1 个”的常见原因。

权限

  • 普通用户只能操作自己的作业;root / AIP 管理员可操作所有人的。

  • 队列管理员可操作所辖队列的作业,用户组管理员可操作组内用户的作业。


主机临时下线维护与恢复

备注

区别于「移除计算节点」:临时下线不改 cb.yaml,重启主机后作业不回来;永久移除请走「移除计算节点」6 步。

下线

csadmin hclose -C "主机维保,暂停接收新作业" node1   # 阻止派新作业
cjobs -m node1                                    # 等已运行作业跑完
systemctl stop aip                                # 停本机服务(可选,纯维保用)

恢复上线

systemctl start aip            # 起本机服务
csadmin hopen node1            # 重新打开,接收新作业
chosts -l node1                # STATUS 应为 ok

版本升级与回滚

升级

install --shared=/opt/skyformai_shared --admin=cadmin --help

备注

共享目录已有旧版本 AIP 文件时,install 会把新版本装到独立版本目录(如 /opt/skyformai_shared/10.25.0),不会修改已有配置。确认路径后再决定是否回滚。

常用选项:

install 常用选项

选项

说明

–shared=<共享目录>

指定共享安装目录(务必与集群其他主机一致,缺省 /opt/skyformai_shared)

–admin=<AIP管理员用户名>

指定集群主管理员(缺省 cadmin)

–hosts=<hosts文件路径>

提供集群所有主机 IPv4 与主机名列表(缺省读当前目录 ./hosts)

–ncpus=threads|cores

定义 ncpus 含义:threads 用 CPU 逻辑核(缺省);cores 用物理核

–distro=<旧版本/架构子目录>

指定版本/架构子目录;多版本共存、10.25.0 覆盖安装或回滚时必须显式给出(如 –distro=10.25.0aarch64)

–upgrade

升级(覆盖原有可执行文件);不会重启本机 AIP 服务

–noint/–silent

非交互/静默安装,自动化部署用

–deploylocal

二进制装到本地(>500 台集群建议),与 Shared 不支持共存。

–gui

图形服务器,安装并启动 SkyForm CRV

–crv_port=<CRV服务端口>

SkyForm CRV 的端口号(缺省 16000)

企业版 License:每颗 CPU 和 GPU 各占一个 key 单元,节点变多可能导致单元不足而无法提交作业。install 生成的 key 为 45 天有效期的企业版临时 key,永久使用需替换为正式授权 key 文件。

回滚

install --shared=/opt/skyformai_shared --distro=<旧版本/架构子目录>
# 切回旧版本目录后:
cadmin reconfig
csadmin schedrestart

备注

回滚不会保留突破 check 选项的动态修改;回滚完成后需重新配置队列 quota/fairshare 等。


常见故障排查

参考 故障处理