Skip to content

installation guide‐Rocky Linux 9

huerni edited this page Oct 24, 2024 · 1 revision

1. 环境准备

1.1 添加 EPEL 软件源

dnf install -y yum-utils epel-release
dnf config-manager --set-enabled crb
dnf update -y

# 建议重启以应用更新后的内核
reboot

1.2 启用时间同步

dnf install -y chrony
systemctl restart systemd-timedated
timedatectl set-timezone Asia/Shanghai
timedatectl set-ntp true

1.3 关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

若集群不允许关闭防火墙,则考虑开放 10010、10011、10012、873 端口。

firewall-cmd --add-port=10012/tcp --permanent --zone=public
firewall-cmd --add-port=10011/tcp --permanent --zone=public
firewall-cmd --add-port=10010/tcp --permanent --zone=public
firewall-cmd --add-port=873/tcp --permanent --zone=public
firewall-cmd --reload

注意:若有多个节点,需在每个节点上执行此步骤,否则无法进行节点间的通信。

1.4 切换 CGroup 版本

Rocky 9 默认使用 CGroup v2。CraneSched 目前只支持 CGroup v1,需按照以下步骤切换版本:

# 设置内核启动参数,更改 CGroup 版本。
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="systemd.unified_cgroup_hierarchy=0 systemd.legacy_systemd_cgroup_controller"
# 重启系统生效
reboot
# 验证版本
mount | grep cgroup

注意:所有计算节点(运行 Craned 的节点)均需要切换 CGroup 版本。 如果使用 CGroup V2,需要注意 root cgroup 下的子 cgroup 有无对相关资源的操作权限,

# 检查子cgroup是否有相关资源的权限,如输出 cpu io memory 等
cat /sys/fs/cgroup/cgroup.subtree_control
# 设置子组的权限
echo '+cpuset +cpu +io +memory +pids' > /sys/fs/cgroup/cgroup.subtree_control

2. 安装工具链

2.1 版本要求

工具链版本需符合以下要求:

  • cmake版本 >= 3.24
  • 如果安装clang,版本 >= 17
  • 如果安装g++,版本 >= 13

2.2 安装构建工具

dnf install -y \
    gcc-toolset-13 \
    cmake \
    patch \
    flex \
    bison \
    ninja-build \
    bpftool \ 
    epel-release
    bcc \
    bcc-tools \
    elfutils-libelf-devel \
    zlib-devel
echo 'source /opt/rh/gcc-toolset-13/enable' >> /etc/profile.d/extra.sh 

3. 安装项目依赖

# 安装项目相关依赖包
dnf install -y \
    libstdc++-devel \
    libstdc++-static \
    openssl-devel \
    curl-devel \
    pam-devel \
    zlib-devel \
    libaio-devel \
    systemd-devel

# 下载并编译安装 libcgroup
curl -L https://github.com/libcgroup/libcgroup/releases/download/v3.1.0/libcgroup-3.1.0.tar.gz -o /tmp/libcgroup.tar.gz 
tar -C /tmp -xzf /tmp/libcgroup.tar.gz
cd /tmp/libcgroup-3.1.0
./configure --prefix=/usr/local
make -j$(nproc)
make install
rm -rf /tmp/libcgroup-3.1.0 /tmp/libcgroup.tar.gz
echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH' >> /etc/profile.d/extra.sh

# 下载并编译安装 libbpf
wget https://github.com/libbpf/libbpf/archive/refs/tags/v1.4.6.zip
unzip v1.4.6.zip
cd libbpf-1.4.6/src

# 编译并安装
make
make install

# 挂载 bpf 文件系统
mount -t bpf bpf /sys/fs/bpf
#挂载 bpf 调试文件
mount -t debugfs none /sys/kernel/debug
# 使用'cat /sys/kernel/debug/tracing/trace_pipe'查看设备访问日志

source /etc/profile.d/extra.sh

4. 安装和配置 MongoDB

4.1 安装 MongoDB

cat > /etc/yum.repos.d/mongodb-org-7.0.repo << 'EOF'
[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-7.0.asc
EOF

dnf makecache

dnf install -y mongodb-org
# 添加 MongoDB 开机启动
systemctl enable mongod
systemctl start mongod

openssl rand -base64 756 | sudo -u mongod tee /var/lib/mongo/mongo.key
sudo -u mongod chmod 400 /var/lib/mongo/mongo.key

4.2 配置 MongoDB

# 使用 mongosh 进入 MongoDB 命令行
mongosh
# 进入 mongosh 后执行下列操作
use admin
# user: 用户名
# pwd: 密码
# roles: root 代表超级管理员权限
# db: admin 代表给 admin 数据库添加超级管理员
db.createUser({
  user: 'admin', pwd: '123456', roles: [{ role: 'root', db: 'admin' }]   
})

# 重启前先关闭服务器
db.shutdownServer() 
quit
  1. 开启权限验证,并配置副本集 打开 /etc/mongod.conf 配置文件,找到 security 和 replication 部分,进行如下修改:
vim /etc/mongod.conf

# 以上省略...
# 开启权限验证
security:
  authorization: enabled
  keyFile: /var/lib/mongo/mongo.key
replication:
  # 副本集名称,稍后填写 crane 配置文件时需一致
  replSetName: crane_rs

重启 MongoDB 使配置生效

systemctl restart mongod
  1. 初始化副本集
mongosh
use admin

# 使用刚刚设置的账号密码登录
db.auth("admin","123456")

# 如果不需要配置外部连接,并且副本集只有该主机一个节点,config 可不配置
config = {
  "_id": "crane_rs",  # 注意名称一致
  "members": [
    {
      "_id": 0,
      "host": "<hostname>:27017" # 替换为部署副本集的主机名,默认为127.0.0.1
    }
    # ... 其他节点(若有)
  ]
}

# 初始化并启动副本集
rs.initiate()

5. 安装和配置 CraneSched

5.1 编译二进制文件

# 下载CraneSched源文件

# 进入项目根目录

# 创建并进入编译目录
mkdir -p build

# 在编译目录下进行编译,首次编译需下载第三方库,耗时较长
cmake -G Ninja ..
cmake --build . --target cranectld craned pam_crane

# 将可执行文件和 Systemd 服务安装到本机,其他节点需要手动拷贝
ninja install

5.2 配置 PAM 模块

请在整个集群部署成功并正常运行后再进行此操作,否则会导致 SSH 认证失败无法连接!

  1. 将 PAM 模块拷贝到系统指定位置
# 在项目根目录下操作
cp build/src/Misc/Pam/pam_crane.so /usr/lib64/security/
  1. 修改 /etc/pam.d/sshd 配置文件 仿照以下样例配置文件(不同系统略有不同),在对应位置添加标粗的行:
  • 找到 account include password-auth,在之前添加 account required pam_crane.so。
  • 找到 session include password-auth,在之后添加 session required pam_crane.so。
#%PAM-1.0
auth       required     pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
**account    required     pam_crane.so**
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
**session    required     pam_crane.so**
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare

5.3 配置 CraneSched

  1. 根据样例创建配置文件。样例配置文件在项目目录下etc/crane/ 中,将其拷贝到 /etc/crane 中:
# 创建配置文件目录
mkdir -p /etc/crane

# 假设当前在项目根目录
# 拷贝配置文件样例
cp etc/config.yaml /etc/crane/config.yaml
cp etc/database.yaml /etc/crane/database.yaml
cp build/src/Misc/BPF/cgroup_dev_bpf.o /etc/crane/cgroup_dev_bpf.o
  1. 在 /etc/config.yaml 中配置节点信息、调度偏好等选项(需所有节点保持一致) 请根据集群实际情况填写。例如,一个四节点的集群中,控制节点的主机名为 crane01,计算节点的主机名为 crane01、crane02、crane03、crane04,则如下填写:
vim /etc/crane/config.yaml

# 以上省略...
# 控制节点(主节点)
ControlMachine: crane01
# ...

# Nodes and partitions settings
# 计算节点
Nodes:
  - name: "crane[01-04]"
    cpu: 2
    memory: 2G

# partition information list
# 计算节点的分区
Partitions:
  - name: CPU              # 分区的名称(可自定义)
    nodes: "crane[01-02]"  # 分区中的节点,需要和 Nodes 部分对应
    priority: 5
  - name: GPU
    nodes: "crane[03-04]"
    priority: 3
    # Optional default memory per cpu in MB
    DefaultMemPerCpu: 0     # 建议设置为0
    # Optional maximum memory per cpu in MB, 0 indicates no limit
    MaxMemPerCpu: 0         # 建议设置为0

# 默认分区,未指定分区的作业将被提交到默认分区
DefaultPartition: CPU
  1. 在 /etc/database.yaml 中配置数据库信息(只需在控制节点配置)
# EmbeddedDb settings
# BerkeleyDB or Unqlite(default)
CraneEmbeddedDbBackend: Unqlite
# File path of CraneCtld embeded DB (Relative to CraneBaseDir)
CraneCtldDbPath: cranectld/embedded.db

# MongoDB 信息需要与数据库的配置相一致
DbUser: admin
DbPassword: "123456"
DbHost: localhost
DbPort: 27017
DbReplSetName: crane_rs
DbName: crane_db

6. 启动 CraneSched

  • 可直接在前台启动 CraneSched(控制节点启动 CraneCtld,其他节点按需要启动 Craned)。
# 假设当前在项目根目录
cd build/src

# 启动 Cranectld
CraneCtld/cranectld
# 启动 Craned
Craned/craned
  • 可通过 Systemd 在后台运行 CraneSched,并设置开机启动。
# CraneCtld
systemctl enable cranectld 
systemctl start cranectld

# Craned
systemctl enable craned
systemctl start craned