Lustre集群部署-基于ldiskfs的多机集群
1. 前言
本文详细介绍如何在almalinux8.9上部署基于ldiskfs的lustre主备模式的多机集群。系统环境如下:
lustre: 2.15.4
linux os: almalinux 8.9
linux kernel: 4.18.0-513.5.1.el8_9.x86_64
2. 集群规划
mgt 192.168.3.11:192.168.3.12
mdt0 192.168.3.11:192.168.3.12
ost0 192.168.3.11:192.168.3.12
client 192.168.3.13
3. 系统设置
3.1. 防火墙设置
3.1.1. 关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
3.2. selinux设置
3.2.1. 关闭selinux
sed -i.org 's|SELINUX=enforcing|SELINUX=disabled|g' /etc/selinux/config
3.2.2. 重启机器
reboot
3.2.3. 检查selinux状态
getenforce
如果输出结果是disabled,表明selinux已经关闭。
3.3. yum源配置
3.3.1. 添加Lustre yum源
在/etc/yum.repos.d目录下新增lustre-online.repo文件并添加以下内容:
[lustre-server-2.15.4]
name=Lustre Server v2.15.4 Packages
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.15.4/el8.9/server/
enabled=1
gpgcheck=0
[lustre-client-2.15.4]
name=Lustre Client v2.15.4 Packages
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.15.4/el8.9/client/
enabled=0
gpgcheck=0
[e2fsprogs-1.47.0.wc5]
name=e2fsprogs v1.47.0.wc5 Packages
baseurl=https://downloads.whamcloud.com/public/e2fsprogs/1.47.0.wc5/el8/
enabled=0
gpgcheck=0
Lustre server和Lustre client的yum源不能同时打开,rpm包会产生冲突。所以在服务端和客户端安装软件时,需要按需关闭相应的yum源。
3.3.2. 添加epel yum源
在/etc/yum.repos.d目录下新增epel-online.repo文件并添加以下内容:
[epel]
name=Extra Packages for Enterprise Linux 8 - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/$basearch
enabled=1
priority=3
gpgcheck=0
countme=1
4. 安装软件
因为Lustre是内核态文件系统,所有的软件包都需要与编译时的kernel版本匹配。Lustre提供2种安装方式:dkms和kmod。
dkms方式安装后会依据当前kernel版本执行编译操作,编译出针对当前kernel版本的kmod,这种方式的好处在于可以在任何kernel版本上动态编译和安装。但是坏处也很明显,因为需要编译,所以安装起来可能很慢。而kmod方式是已经提前编译好的kmod,但这种方式只与当时编译时的kernel版本适配。
下文以kmod方式安装lustre步骤。
4.1. 服务端
4.1.1. 启动和关闭相应的YUM源
dnf config-manager --enable appstream baseos extras epel
dnf config-manager --enable lustre-server-2.15.4 e2fsprogs-1.47.0.wc5
dnf config-manager --disable lustre-client-2.15.4
dnf clean all && dnf makecache
4.1.2. 查看Lustre的依赖版本
Lustre的每个发布版本的源码文件ChangeLog中都会说明所发行软件的版本以及依赖的软件版本信息,通过2.15.4的ChangeLog文件可以查看到如下版本信息:
* Server primary kernels built and tested during release cycle:
4.18.0-513.9.1.el8 (RHEL8.9)
* ldiskfs needs an ldiskfs patch series for that kernel, ZFS does not
* Client primary kernels built and tested during release cycle:
4.18.0-513.9.1.el8 (RHEL8.9)
* Recommended e2fsprogs version: 1.47.0-wc5 or newer
* Recommended ZFS version: 2.1.11
由此可以得知,Lustre 2.15.4依赖kernel 4.18.0-513.9.1.el8、e2fsprogs 1.47.0-wc5。
4.1.3. 安装e2fsprogs
dnf install e2fsprogs-1.47.0 e2fsprogs-libs-1.47.0
4.1.4. 安装kernel
ldiskfs是ext4的变体,它修改了kernel层的代码,因此需要安装修改之后的kernel。
dnf install kernel-4.18.0-513.9.1.el8_lustre kernel-core-4.18.0-513.9.1.el8_lustre kernel-modules-4.18.0-513.9.1.el8_lustre
4.1.5. 安装lustre server
dnf install kmod-lustre kmod-lustre-osd-ldiskfs
4.2. 客户端
4.2.1. 启动和关闭相应的YUM源
dnf config-manager --enable appstream baseos extras epel
dnf config-manager --disable lustre-server-2.15.4 e2fsprogs-1.47.0.wc5
dnf config-manager --enable lustre-client-2.15.4
dnf clean all && dnf makecache
4.2.2. 安装lustre client
dnf install kmod-lustre-client lustre-client
5. 集群部署
5.1. 服务端
5.1.1. 加载lustre内核模块
modprobe -v lustre
5.1.2. 配置网络
lustre集群内部通过LNet网络通信,LNet支持InfiniBand and IP networks。本案例采用TCP模式。
5.1.2.1. 初始化配置lnet
lnetctl lnet configure
- 默认情况下
lnetctl lnet configure会加载第一个up状态的网卡,所以一般情况下不需要再配置net。 - 可以使用
lnetctl net show命令列出所有的net配置信息,如果没有符合要求的net信息,需要按照下面步骤添加。
5.1.2.2. 添加tcp
lnetctl net add --net tcp0 --if enp0s8
- 如果
lnetctl lnet configure已经将添加了tcp0,使用lnetctl net del删除tcp0,然后用lnetctl net add重新添加。 tcp0可以理解为一个子网,原则上tcp后面的数字可以任意写。如果定义成tcp0,那么集群中所有的服务以及客户端都应该设置成同一子网,即tcp0。
5.1.2.3. 查看添加的tcp
lnetctl net show --net tcp0
5.1.2.4. 保存到配置文件
lnetctl net show --net tcp0 >> /etc/lnet.conf
5.1.2.5. 开机自启动lnet服务
systemctl enable lnet
5.1.3. 部署MGS服务
5.1.3.1. 创建mgt
mkfs.lustre --mgs \
--servicenode=192.168.3.11@tcp0 \
--servicenode=192.168.3.12@tcp0 \
--backfstype=ldiskfs \
--reformat /dev/sdb
servicenode参数指定当前创建的mgt能够在哪些节点上被使用(容灾)。该参数的数量没有限制。- 可以将多个
servicenode参数合并成一个,比如上面的参数可以改写成--servicenode=192.168.3.11@tcp0:192.168.3.12@tcp0。
5.1.3.2. 启动mgs服务
mkdir -p /lustre/mgt
mount -t lustre -U 95d74a36-996f-403a-84b4-1912bec0143b /lustre/mgt -v
95d74a36-996f-403a-84b4-1912bec0143b是/dev/sdb的uuid,可以通过blkid命令查询。建议采用uuid,因为磁盘盘符会改变。- 原则上挂载点的名字可以任意取名,建议和mgt名字保持一致。
5.1.4. 部署MDS服务
5.1.4.1. 创建mdt
mkfs.lustre --mdt \
--fsname fs00 \
--index 0 \
--mgsnode 192.168.3.11@tcp0 \
--mgsnode 192.168.3.12@tcp0 \
--servicenode 192.168.3.11@tcp0 \
--servicenode 192.168.3.12@tcp0 \
--backfstype=ldiskfs \
--reformat /dev/sdc
- 如果磁盘空间容量比较大,可以添加参数
--mkfsoptions="-E nodiscard",加快格式化过程。 - 如果mgs服务有多个,必须要同时指定多个mgsnode,而且第一个mgsnode必须是primary mgs。
- 对于每一个lustre文件系统,mdt index序号必须从0开始,0代表整个文件系统的根目录。
5.1.4.2. 启动mds服务
mkdir -p /lustre/mdt/mdt0
mount -t lustre -U 6feb0516-e2b1-4075-8b37-de94bb65c93b /lustre/mdt/mdt0 -v
5.1.5. 部署OSS服务
5.1.5.1. 创建ost
mkfs.lustre --ost \
--fsname fs00 \
--index 0 \
--mgsnode 192.168.3.11@tcp0 \
--mgsnode 192.168.3.12@tcp0 \
--servicenode 192.168.3.11@tcp0 \
--servicenode 192.168.3.12@tcp0 \
--backfstype=ldiskfs \
--reformat /dev/sde
5.1.5.2. 启动oss服务
mkdir -p /lustre/ost/ost0
mount -t lustre -U 930e22ba-969c-4f95-820a-d7f521b47b0d /lustre/ost/ost0 -v
5.2. 客户端
lustre客户端软件不能和服务端软件安装在同一台机器上,因为lustre服务端软件已经包含了客户端软件所有的文件。所以,非必要,可以直接在服务端挂载lustre文件系统,而无需再另外一台机器上安装客户端软件。
5.2.1. 加载lustre内核模块
modprobe -v lustre
5.2.2. 配置网络
lustre集群内部通过LNet网络通信,LNet支持InfiniBand and IP networks。本案例采用TCP模式。
5.2.2.1. 初始化配置lnet
lnetctl lnet configure
- 默认情况下
lnetctl lnet configure会加载第一个up状态的网卡,所以一般情况下不需要再配置net。 - 可以使用
lnetctl net show命令列出所有的net配置信息,如果没有符合要求的net信息,需要按照下面步骤添加。
5.2.2.2. 添加tcp
lnetctl net add --net tcp0 --if enp0s8
- 如果
lnetctl lnet configure已经将添加了tcp0,使用lnetctl net del删除tcp0,然后用lnetctl net add重新添加。 tcp0可以理解为一个子网,原则上tcp后面的数字可以任意写。如果定义成tcp0,那么集群中所有的服务以及客户端都应该设置成同一子网,即tcp0。
5.2.2.3. 查看添加的tcp
lnetctl net show --net tcp0
5.2.2.4. 保存到配置文件
lnetctl net show --net tcp0 >> /etc/lnet.conf
5.2.2.5. 开机自启动lnet服务
systemctl enable lnet
5.2.3. 挂载文件系统
mkdir -p /mnt/fs00
mount -t lustre 192.168.3.11@tcp0:192.168.3.12@tcp0:/fs00 /mnt/fs00 -v