Lustre源码编译-基于zfs
1. 前言
本文详细介绍如何编译后端存储类型为zfs的lustre源码,并制作离线rpm安装包。系统环境如下:
lustre: 2.15.4
zfs: 2.1.11
linux os: almalinux 8.9
linux kernel: 4.18.0-513.5.1.el8_9.x86_64
2. 准备
2.1. 配置软件仓库源
2.1.1. 更换almalinux软件仓库源
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
-e 's|^# baseurl=https://repo.almalinux.org/almalinux/$releasever|baseurl=https://mirrors.nju.edu.cn/almalinux-vault/8.9|g' \
-e 's|^# baseurl=https://repo.almalinux.org/vault/$releasever|baseurl=https://mirrors.nju.edu.cn/almalinux-vault/8.9|g' \
-i.bak /etc/yum.repos.d/almalinux*.repo
2.1.2. 启用必要的软件仓库
dnf config-manager --enable appstream baseos extras powertools ha
2.1.3. 生成元数据缓存
dnf makecache
3. 编译zfs
lustre 2.15.4发布日志中建议zfs版本为2.1.11或者更高版本,因此需要自己编译zfs。openzfs提供了关于zfs详细文档,详细内容参考https://openzfs.github.io/openzfs-docs。
3.1. 安装依赖
3.1.1. 安装kernel包
dnf install kernel-abi-stablelists-4.18.0-513.5.1.el8_9.x86_64 kernel-devel-4.18.0-513.5.1.el8_9.x86_64 kernel-headers-4.18.0-513.5.1.el8_9.x86_64 kernel-rpm-macros
注:kernel-devel和kernel-abi-stablelists必须要和内核版本一致
3.1.2. 安装其他包
dnf install autoconf automake elfutils-libelf-devel gcc git libaio-devel libattr-devel libblkid-devel libcurl-devel libffi-devel libtirpc-devel libtool libuuid-devel make ncompress openssl-devel python3-cffi python3-packaging python36 python36-devel rpm-build systemd-devel zlib-devel
3.2. 编译
3.2.1. 获取源码
git clone -b 2.1.11 --depth=1 https://github.com/openzfs/zfs.git zfs-2.1.11
3.2.2. 生成configure文件
bash autogen.sh
3.2.3. 配置编译选项
./configure --with-spec=redhat
3.2.4. 编译rpms包
make rpms -j4
4. 编译lustre
4.1. 安装依赖
4.1.1. 安装内核包
dnf install kernel-abi-stablelists-4.18.0-513.5.1.el8_9.x86_64 kernel-devel-4.18.0-513.5.1.el8_9.x86_64 kernel-headers-4.18.0-513.5.1.el8_9.x86_64 kernel-rpm-macros
kernel-devel和kernel-abi-stablelists必须要和内核版本一致
4.1.2. 安装其他包
dnf install bison device-mapper-devel elfutils-devel elfutils-libelf-devel expect flex gcc gcc-c++ git glib2-devel keyutils-libs-devel krb5-devel ksh libattr-devel libblkid-devel libmount-devel libnl3-devel libselinux-devel libtool libuuid-devel libyaml-devel make ncurses-devel net-snmp-devel newt-devel numactl-devel patchutils pciutils-devel perl-ExtUtils-Embed pesign python36-devel rpm-build systemd-devel tcl tcl-devel tk tk-devel xmlto yum-utils zlib-devel
4.1.3. 安装zfs
dnf install kmod-zfs kmod-zfs-devel libzfs5 libzfs5-devel libzpool5 zfs
使用dnf安装zfs时需要先做zfs离线yum源。
4.1.4. 安装第三方IB驱动(可选)
如果要开启lustre的RDMA功能,系统需要有IB网卡设备驱动程序相关的devel包。一般情况下,系统内核提供了IB网卡驱动程序,需要自己安装devel包。如果不安装,lustre默认会关闭RDMA功能。然而,实际生产上都需要安装和IB网卡匹配的第三方驱动。大多数情况下都是安装英伟达的IB网卡驱动。
4.1.4.1. 下载IB网卡驱动
https://network.nvidia.com/products/infiniband-drivers/linux/mlnx_ofed
- 建议下载后缀
.tgz的压缩包,方便解压。 - 下载之前到对应的驱动版本的
Release Notes查看支持的网卡类型和内核版本。
4.1.4.2. 解压并安装驱动
tar -zxvf MLNX_OFED_LINUX-5.8-5.1.1.2-rhel8.9-x86_64.tgz
cd MLNX_OFED_LINUX-5.8-5.1.1.2-rhel8.9-x86_64
./mlnxofedinstall --force
安装过程中,如果内核和mlnxofed要求的不匹配,mlnxofed会重新编译内核,过程很漫长。
4.2. 编译server
4.2.1. 获取源码
git clone -b 2.15.4 --depth=1 git://git.whamcloud.com/fs/lustre-release.git lustre-2.15.4
4.2.2. 生成configure文件
bash autogen.sh
4.2.3. 配置编译server选项
./configure --enable-server --disable-ldiskfs --with-o2ib=/usr/src/ofa_kernel/default
如果需要支持IB网络,需要添加--with-o2ib=/usr/src/ofa_kernel/default。
4.2.4. 编译rpm包
make rpms -j4
4.3. 编译client
4.3.1. 清除编译配置
make clean
4.3.2. 配置编译client选项
./configure --disable-server --enable-client --disable-ldiskfs --with-o2ib=/usr/src/ofa_kernel/default
4.3.3. 编译rpm包
make rpms -j4