暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Lustre集群部署

2172


作者时间QQ群
perrynzhou@gmail.com2021/03/14672152841


kernel版本信息


[root@CentOS1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
[root@CentOS1 ~]# uname -r
3.10.0-1062.el7.x86_64


配置lustre安装源


// lustre-2.14.0 内核刚好匹配 kernel 3.10.0-1062.el7.x86_64
[root@CentOS1 lustre]# pwd
/root/lustre
[root@CentOS1 lustre]# ls
repo.conf
[root@CentOS1 lustre]# cat lustre.repo
[lustre-server]
name=lustre-server
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.14.0/el7.7.1908/server
gpgcheck=0


[patchless-ldiskfs-server]
name=patchless-ldiskfs-server
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.14.0/el7.7.1908/patchless-ldiskfs-server
gpgcheck=0

[lustre-client]
name=lustre-client
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.14.0/el7.7.1908/client
gpgcheck=0

[e2fsprogs-wc]
name=e2fsprogs-wc
baseurl=https://downloads.whamcloud.com/public/e2fsprogs/latest/el7
gpgcheck=0

[root@CentOS1 lustre]# cp lustre.repo /etc/yum.repo/lustre.repo

  • 预安装


[root@CentOS1 ~]# cd ~/lustre
[root@CentOS1 ~]# yum groupinstall “Development Tools” -y
[root@CentOS1 ~]# yum install epel-release quilt libselinux-devel python-docutils xmlto asciidoc elfutils-libelf-devel elfutils-devel zlib-devel rng-tools binutils-devel python-devel sg3_utils newt-devel perl-ExtUtils-Embed audit-libs-devel lsof hmaccalc -y
[root@CentOS1 ~]# systemctl stop firewalld.service
[root@CentOS1 ~]# systemctl disable firewalld.service
[root@CentOS1 lustre]# yum remove kernel-tools-libs kernel-tools kernel-headers kernel-debug-devel -y
[root@CentOS1 lustre]# yum --nogpgcheck --disablerepo=base,extras,updates \
--enablerepo=lustre-server install \
kernel \
kernel-devel \
kernel-headers \
kernel-tools \
kernel-tools-libs \
kernel-tools-libs-devel


安装lustre


[root@CentOS1 lustre]# yum install epel-release quilt libselinux-devel python-docutils xmlto asciidoc elfutils-libelf-devel elfutils-devel zlib-devel rng-tools binutils-devel python-devel sg3_utils newt-devel perl-ExtUtils-Embed audit-libs-devel lsof hmaccalc asciidoc audit-libs-devel automake bc binutils-devel bison device-mapper-devel elfutils-devel elfutils-libelf-devel expect flex gcc gcc-c++ git glib2 glib2-devel hmaccalc keyutils-libs-devel krb5-devel ksh ibattr-devel libblkid-devel libselinux-devel libtool libuuid-devel libyaml-devel lsscsi make ncurses-devel net-snmp-devel net-tools newt-devel numactl-devel parted patchutils pciutils-devel perl-ExtUtils-Embed pesign python-devel redhat-rpm-config rpm-build systemd-devel tcl tcl-devel tk tk-devel wget xmlto yum-utils zlib-devel linux-firmware  dkms -y 

[root@CentOS1 lustre]# yum --nogpgcheck --enablerepo=lustre-server install \
kmod-lustre-osd-ldiskfs \
lustre-dkms \
lustre-osd-ldiskfs-mount \
lustre-osd-zfs-mount \
lustre lustre-debuginfo \
lustre-resource-agents \
zfs zfs-debuginfo

[root@CentOS1 ~] reboot


验证lustre安装


[root@CentOS1 x86_64]# modprobe -v zfs
[root@CentOS1 x86_64]# modprobe -v lustre
[root@CentOS1 x86_64]# modprobe -v lnet
[root@CentOS1 x86_64]# lsmod |grep zfs
[root@CentOS1 ~]# lsmod |grep lustre
[root@CentOS1 ~]# lsmod |grep lnet



三个节点分别创建MDS

  • 节点172.16.84.43


//节点1,每台机器的mgt和mdt共享;有条件可以单独部署
wipefs -a /dev/sdg
mkdir -p /lustre/mdt
mkfs.lustre --fsname=bigfs --mgs --mdt --index=0 --backfstype=zfs --reformat mdspool/mdt /dev/sdg
mount.lustre mdspool/mdt /lustre/mdt/

//和上面是等价的命令,可以针对zfs pool进行调整
mkdir -p /lustre/mdt
zpool create -O canmount=off -o cachefile=none mdspool /dev/sdb
mkfs.lustre --fsname=bigfs --mgs --mdt --index=0 \
--backfstype=zfs --reformat mdspool/mdt
mount.lustre mdspool/mdt /lustre/mdt/

  • 节点172.16.84.44


//清理磁盘的文件系统信息
wipefs -a /dev/sdg
//创建该节点挂载mdt的目录
mkdir -p /lustre/mdt
// 使用zfs初始化后端的mdt,当前配置中mgs和mdt是共享一个磁盘,每个mdt的index必须是唯一的,否则服务启动会有问题,同时mdspool/mdt中,mdspool是zfs pool,mdt是提供给lustre使用
mkfs.lustre --fsname=bigfs --mgs --mdt --index=2 --backfstype=zfs --reformat mdspool/mdt /dev/sdg
//挂载时候就启动了该节点的lustre mds服务,元数据信息写入到了mdt中
mount.lustre mdspool/mdt /lustre/mdt/

//注意当执行unmount /lustre/mdt就是停止mds的服务

  • 节点172.16.84.45


//节点3
wipefs -a /dev/sdg
mkdir -p /lustre/mdt
mkfs.lustre --fsname=bigfs --mgs --mdt --index=3 --backfstype=zfs --reformat mdspool/mdt /dev/sdg
mount.lustre mdspool/mdt /lustre/mdt/


配置三个节点的ost(每台机器2个磁盘)

  • 节点172.16.84.43


//该节点创建2个ost挂载目录
mkdir -p /lustre/ost0
mkdir -p /lustre/ost1
//清除该该节点的文件系统信息
wipefs -a /dev/sde
wipefs -a /dev/sdf

//每个ost的pool名称必须不同,比如ost0 的pool名称是osspool0/ost,ost1的名称是osspool/ost,其中osspool-{xx}必须不同,全卷的ost的index必须不同。
//创建ost时候必须先把整个集群节点的mds服务准备好,每个ost节点必须使用mgsnode来连接当前集群中所有的mds的所有节点

//创建index=0的ost,fsname为lustre文件系统名称;index为当前集群中的ost的索引值,必须全局唯一;msgnode指定当前所有mds所在节点;backfstype用于执行后端ost所使用的文件系统;osspool0/ost用于指定zfs pool和lustre内使用的名称ost
mkfs.lustre --ost --reformat --fsname bigfs --index 0 --mgsnode 172.16.84.43@tcp0 --mgsnode 172.16.84.44@tcp0 --mgsnode
172.16.84.45@tcp0 --backfstype zfs osspool0/ost /dev/sde

mkfs.lustre --ost --reformat --fsname bigfs --index 1 --mgsnode 172.16.84.43@tcp0 --mgsnode 172.16.84.44@tcp0 --mgsnode 172.16.84.45@tcp0 --backfstype zfs osspool1/ost /dev/sdf


  • 节点172.16.84.44


mkdir -p /lustre/ost2
mkdir -p /lustre/ost3
wipefs -a /dev/sde
wipefs -a /dev/sdf
mkfs.lustre --ost --reformat --fsname bigfs --index 2 --mgsnode 172.16.84.43@tcp0 --mgsnode 172.16.84.44@tcp0 --mgsnode 172.16.84.45@tcp0 --backfstype zfs osspool0/ost /dev/sde

mkfs.lustre --ost --reformat --fsname bigfs --index 3 --mgsnode 172.16.84.43@tcp0 --mgsnode 172.16.84.44@tcp0 --mgsnode 172.16.84.45@tcp0 --backfstype zfs osspool1/ost /dev/sdf


  • 节点172.16.84.45


//节点3
mkdir -p /lustre/ost4
mkdir -p /lustre/ost5
wipefs -a /dev/sde
wipefs -a /dev/sdf

mkfs.lustre --ost --reformat --fsname bigfs --index 4 --mgsnode 172.16.84.43@tcp0 --mgsnode 172.16.84.44@tcp0 --mgsnode 172.16.84.45@tcp0 --backfstype zfs osspool0/ost /dev/sde
mkfs.lustre --ost --reformat --fsname bigfs --index 5 --mgsnode 172.16.84.43@tcp0 --mgsnode 172.16.84.44@tcp0 --mgsnode 172.16.84.45@tcp0 --backfstype zfs osspool1/ost /dev/sdf

//这里也可以使用zfs 的raidz2功能把一组磁盘组成 raidz2
mkfs.lustre --ost --reformat --fsname bigfs --device-size=1048576 --index 6 --mgsnode 172.16.84.43@tcp0 --mgsnode 172.16.84.44@tcp0 --mgsnode 172.16.84.45@tcp0 --backfstype zfs osspool6/ost raidz2 /dev/sda /dev/sdab /dev/sdc /dev/sdd



客户端节点挂载


//针对当前内核模块无损的方式来安装lustre客户端的kernel module
yum --nogpgcheck --enablerepo=lustre-client install kmod-lustre-client lustre-client

//客户端加载lustre内核模块
modprobe -v lustre
//挂载lustre文件系统,挂载方式是 mount -t luster mds1@tcp0:mds2@tcp0:mds3@tcp0/{lustre_name} /mnt/lustre
mount -t lustre 172.16.84.43@tcp:172.16.84.44@tcp:172.16.84.45@tcp:/bigfs /mnt/lustre/



lustre process信息


//show luste mgs info
[root@CentOS1 ~]# ps -ef|grep mgs
[root@CentOS1 ~]# ps -ef|grep ost
[root@CentOS1 ~]# ps -ef|grep mdt


Lustre 日常的命令使用介绍

  • 查看zfs pool的信息


zfs list -o name,used,avail,refer

  • 查看ost服务的相关进程


ps -ef | awk '/ost/ && !/awk/'

  • lctl查看能使用命令


lctl --list-commands

  • 查看当前mds/mgs/ost的参数


//查看mgs的参数
lctl list_param -RF mgs
//查看mds的参数
lctl list_param -RF mds
//查看ost的参数
lctl list_param -RF ost


Lustre和Glusterfs 存储写粗略带宽对比(仅仅是个粗略测试)

  • gluster 采用哈希卷,按照4M分片;lustre采用默认,相同的磁盘的情况下,lustre的写带宽是glusterfs的3倍左右。

  • glusterfs 哈希卷大文件写的带宽,持续观察发现glusterfs的写带宽不是很稳定,波动比较大(120MB/S ~370MB/S)



  • lustre 大文件写的平均带宽,相对比较稳定



文章转载自存储内核技术交流,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论