在 CentOS 7.9 上部署 Lustre 文件系统并结合 ZFS 作为底层存储需要以下步骤。以下是详细的操作指南:
1. 系统准备
1.1 更新系统并安装依赖
# 更新系统
yum update -y
reboot
# 安装基础依赖
yum install -y epel-release kernel-devel kernel-headers gcc make dkms wget
1.2 禁用无关服务
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
2. 安装 ZFS 文件系统
2.1 添加 ZFS 仓库并安装
# 添加 ZFS 仓库
yum install -y http://download.zfsonlinux.org/epel/zfs-release.el7_9.noarch.rpm
gpg --quiet --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux
# 安装 ZFS 内核模块和工具
vim /etc/yum.repos.d/zfs.repo #这里使用dkms安装后无法加载内核,因此需要修改zfs库文件,改用kmod方式安装zfs
yum install -y zfs
注意事项:
zfs-kmod 和 zfs-dkms
是用于安装ZFS文件系统的两个不同包,它们提供了不同的内核模块加载方式:
• zfs-kmod:
这个包提供了预编译的ZFS内核模块。安装后,系统会使用这些预编译的模块,无需重新编译内核模块。这
种方式安装简单快捷,但可能不支持所有内核版本或自定义内核。
• zfs-dkms: 这个包使用Dynamic Kernel Module Support (DKMS)
来编译和安装ZFS内核模块。DKMS会在内核更新时自动重新编译ZFS模块,确保模块与当前内核兼容。这种方
式更为灵活,适合需要频繁更新内核或使用自定义内核的用户。
选择哪个包取决于你的具体需求和系统环境。如果你希望简化安装过程并且不经常更新内核,可以选择zfs-kmo
d。如果你需要更好的兼容性和灵活性,建议使用zfs-dkms

2.2 加载 ZFS 内核模块
modprobe zfs
echo "zfs" > /etc/modules-load.d/zfs.conf #开机自启加载内核模块
/etc/modules-load.d/ 是一个用于存放模块加载配置文件的目录。在 Linux 系统中,特别是基于 systemd
的系统(如 Ubuntu 22.04 LTS、centos),这个目录中的文件用于指定在系统启动时自动加载的内核模块。
每个文件可以包含一个或多个内核模块的名称,每行一个模块。例如,创建一个文件
/etc/modules-load.d/virtio-net.conf,并在其中添加 virtio-net,系统启动时就会自动加载 virtio-net
模块。
这种机制使得系统管理员可以方便地管理内核模块的加载,而不需要手动编辑 /etc/modules 文件。
2.3 创建 ZFS 存储池
假设使用磁盘 /dev/sdb 和 /dev/sdc 创建 RAID-1 池:
zpool create lustre_pool mirror /dev/sdb /dev/sdc
zpool status # 查看池状态
[root@node1:~]$zpool create lustre_pool mirror /dev/sdb /dev/sdc
[root@node1:~]$
[root@node1:~]$zpool status
pool: lustre_pool
state: ONLINE
config:
NAME STATE READ WRITE CKSUM
lustre_pool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
sdb ONLINE 0 0 0
sdc ONLINE 0 0 0
errors: No known data errors
zpool create 命令用于在 ZFS 文件系统中创建一个新的存储池。基本语法如下:
zpool create [options] pool_name vdevs
• pool_name: 存储池的名称。
• vdevs: 虚拟设备,可以是单个磁盘、RAID 配置等。
常用选项:
• -f: 强制创建,忽略某些错误。
• -m mountpoint: 指定文件系统的挂载点。
• -o property=value: 设置存储池的属性。
vdevs 类型:
• 单个磁盘: zpool create mypool /dev/sdb
• 镜像: zpool create mypool mirror /dev/sdb /dev/sdc
• RAID-Z: zpool create mypool raidz /dev/sdb /dev/sdc /dev/sdd
• RAID-Z2: zpool create mypool raidz2 /dev/sdb /dev/sdc /dev/sdd /dev/sde
• RAID-Z3: zpool create mypool raidz3 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf
创建存储池后,可以使用 zpool list 查看存储池状态
[root@node1:~]$zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
lustre_pool 39.5G 528K 39.5G - - 0% 0% 1.00x ONLINE -
3. 安装 Lustre 文件系统
3.1 添加 Lustre 仓库
CentOS 7 默认仓库不包含 Lustre,需使用第三方仓库(如 Whamcloud):
# 下载并安装 Lustre 仓库
[root@node1:~]$cat /etc/yum.repos.d/lustre.repo
[lustre-server]
name=Lustre Server
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.12.9/el7.9.2009/server/
enabled=1
gpgcheck=0
[lustre-client]
name=Lustre Client
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.12.9/el7.9.2009/client/
enabled=1
gpgcheck=0
[patchless-ldiskfs-server]
name=patchless-ldiskfs-server
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.12.9/el7.9.2009/patchless-ldiskfs-server/
enabled=1
gpgcheck=0
[e2fsprogs]
name=e2fsprogs
baseurl=https://downloads.whamcloud.com/public/e2fsprogs/1.44.3.wc1/el7/
enabled=1
gpgcheck=0
# 安装 Lustre 服务端和客户端组件
yum install -y lustre lustre-resource-agents lustre-osd-ldiskfs-mount lustre-osd-zfs-mount
yum install -y:使用yum安装软件包,并且-y选项表示自动确认所有提示,无需手动输入“y”。
• lustre:安装Lustre文件系统的核心组件。
• lustre-resource-agents:安装Lustre的资源代理,用于集群管理工具(如Pacemaker)中。
• lustre-osd-ldiskfs-mount:安装支持使用ext3/ext4文件系统作为对象存储设备(OSD)的Lustre组件。
• lustre-osd-zfs-mount:安装支持使用ZFS文件系统作为对象存储设备(OSD)的Lustre组件
3.2 加载 Lustre 内核模块
modprobe lustre
echo "lustre" > /etc/modules-load.d/lustre.conf
由于基于kmod内核安装,lustre已经提前编译到特定的内核版本:kernel-3.10.0-1160.49.1.el7_lustre.x86_64
针对其他内核使用源码编译安装:本次内核是kernel-3.10.0-1160.81.1.el7.x86_64
1.下载lustre源码包
https://downloads.whamcloud.com/public/lustre/lustre-2.12.9/el7.9.2009/server/SRPMS/lustre-2.12.9-1.src.rpm
2.rpm安装
rpm -ivh lustre-2.12.9-1.src.rpm
[root@node1:~]$cd rpmbuild/
[root@node1:rpmbuild]$ls
SOURCES SPECS
[root@node1:rpmbuild]$cd SOURCES/
[root@node1:SOURCES]$ll
total 14080
-rw-rw-r-- 1 root root 113 Jun 18 2022 kmp-lustre.files
-rw-rw-r-- 1 root root 146 Jun 18 2022 kmp-lustre-osd-ldiskfs.files
-rw-rw-r-- 1 root root 298 Jun 18 2022 kmp-lustre-osd-ldiskfs.preamble
-rw-rw-r-- 1 root root 78 Jun 18 2022 kmp-lustre-osd-zfs.files
-rw-rw-r-- 1 root root 162 Jun 18 2022 kmp-lustre-osd-zfs.preamble
-rw-rw-r-- 1 root root 45 Jun 18 2022 kmp-lustre.preamble
-rw-rw-r-- 1 root root 56 Jun 18 2022 kmp-lustre-tests.files
-rw-rw-r-- 1 root root 14384911 Jun 18 2022 lustre-2.12.9.tar.gz
tar xf lustre-2.12.9.tar.gz
[root@node1:SOURCES]$cd lustre-2.12.9/
[root@node1:lustre-2.12.9]$./configure
[root@node1:lustre-2.12.9]$make && make install
如果需要对接zfs文件系统,需要重新编译:
1.安装zfs开发工具包
yum install -y zfs kmod-zfs-devel libzfs2-devel
2.重新编译
[root@node1:lustre-2.12.9]$ ./configure --with-linux=/usr/src/kernels/$(uname -r) --with-zfs=/usr/include/libzfs --enable-server --enable-client --enable-zfs
4. 部署 Lustre 文件系统
4.1 配置管理服务器 (MGS)
# 在 ZFS 存储池上创建 MGS 设备
zfs create lustre_pool/mgs
mkfs.lustre --mgs --backfstype=zfs lustre_pool/mgs
# 挂载 MGS
mkdir /mnt/mgs
mount -t lustre lustre_pool/mgs /mnt/mgs
4.2 配置元数据服务器 (MDS)
# 在 ZFS 存储池上创建 MDT(元数据目标)
zfs create lustre_pool/mdt
mkfs.lustre --mdt --backfstype=zfs --mgsnode=<MGS_NID> lustre_pool/mdt
# 挂载 MDT
mkdir /mnt/mdt
mount -t lustre lustre_pool/mdt /mnt/mdt
4.3 配置对象存储服务器 (OSS)
# 在 ZFS 存储池上创建 OST(对象存储目标)
zfs create lustre_pool/ost1
mkfs.lustre --ost --backfstype=zfs --mgsnode=<MGS_NID> --index=0 lustre_pool/ost1
# 挂载 OST
mkdir /mnt/ost1
mount -t lustre lustre_pool/ost1 /mnt/ost1
4.4 客户端挂载
# 在客户端节点挂载 Lustre 文件系统
mkdir /mnt/lustre
mount -t lustre <MGS_NID>:/lustre /mnt/lustre
5. 验证部署
5.1 检查 Lustre 状态
lctl dl # 查看 Lustre 设备列表
lfs df -h # 查看存储空间使用情况
lfs check all # 检查文件系统一致性
5.2 测试 ZFS 与 Lustre 集成
# 创建测试文件并验证条带化
lfs setstripe -c 2 /mnt/lustre/testfile # 设置 2 条带
dd if=/dev/zero of=/mnt/lustre/testfile bs=1G count=10
lfs getstripe /mnt/lustre/testfile
6. 故障排查
6.1 常见问题
- ZFS 池无法挂载:检查
zpool status和dmesg日志。 - Lustre 服务启动失败:确保内核模块加载(
lsmod | grep lustre)。 - 网络问题:使用
lctl list_nids验证节点通信。
6.2 日志位置
- Lustre 日志:
/var/log/lustre/ - ZFS 日志:
/var/log/zfs/
7. 性能优化
7.1 ZFS 优化
# 调整 ZFS ARC 缓存大小(根据内存调整)
echo "options zfs zfs_arc_max=4294967296" > /etc/modprobe.d/zfs.conf # 4GB
# 启用压缩(可选)
zfs set compression=lz4 lustre_pool
7.2 Lustre 优化
# 调整客户端缓存
lctl set_param llite.*.max_cached_mb=8192 # 8GB 缓存
# 增加 RPC 并发数
lctl set_param osc.*.max_rpcs_in_flight=64
注意事项
- 内核兼容性:确保 ZFS 和 Lustre 的内核模块与 CentOS 7.9 内核版本兼容。
- 硬件要求:Lustre 对网络和存储性能敏感,建议使用 InfiniBand 或 10G+ 以太网。
- 备份策略:使用 ZFS 快照定期备份关键数据(
zfs snapshot lustre_pool@backup)。
通过以上步骤,可以在 CentOS 7.9 上完成 Lustre 和 ZFS 的集成部署,适用于高性能计算和分布式存储场景。
浙公网安备 33010602011771号