在 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 statusdmesg 日志。
  • 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

注意事项

  1. 内核兼容性:确保 ZFS 和 Lustre 的内核模块与 CentOS 7.9 内核版本兼容。
  2. 硬件要求:Lustre 对网络和存储性能敏感,建议使用 InfiniBand 或 10G+ 以太网。
  3. 备份策略:使用 ZFS 快照定期备份关键数据(zfs snapshot lustre_pool@backup)。

通过以上步骤,可以在 CentOS 7.9 上完成 Lustre 和 ZFS 的集成部署,适用于高性能计算和分布式存储场景。

posted on 2025-04-03 13:41  LeeHang  阅读(524)  评论(0)    收藏  举报