【Lustre相关】功能实践-01-Lustre集群部署配置

一、前言

参考链接:
Lustre中国社区
性能监控:LustrePerfMon
架构:Google Cloud中使用DDN EXAScaler的Lustre文件系统
Lustre版本演进路线
DDN-lustre_manual_markdown

1、关于io500

io500榜单

io500是针对存储性能评测的一个权威国际排行榜,主要包括带宽和元数据性能测试部分,共计十二项严苛的场景测试,该基准使用大文件的读/写带宽和小文件读/写/查询性能来衡量存储性能,这些性能也是影响大数据分析、人工智能、高性能计算的关键因素。
Lustre是一个开源高性能并行文件系统,专注于HPC高性能并行计算场景,几乎占据io500榜单三分之一的位置。

[RESULT]       ior-easy-write
[RESULT]    mdtest-easy-write
[RESULT]       ior-hard-write
[RESULT]    mdtest-hard-write
[RESULT]                 find
[RESULT]        ior-easy-read
[RESULT]     mdtest-easy-stat
[RESULT]        ior-hard-read
[RESULT]     mdtest-hard-stat
[RESULT]   mdtest-easy-delete
[RESULT]     mdtest-hard-read
[RESULT]   mdtest-hard-delete

2、关于HPC

HPC为高性能计算(High Performance Computing)简称,HPC系统通过汇总多个计算资源来快速解决大型计算问题。
HPC 推动了医疗保健、生命科学、媒体、娱乐、金融服务和能源等行业的研究和创新。研究人员、科学家和分析师使用 HPC 系统开展实验、运行模拟和评估原型。地震处理、基因组测序、媒体渲染和气候建模等 HPC 工作负载需要以不断增加数据速率和不断降低延迟的方式(高带宽、低时延)来生成和访问大量数据。高性能存储是HPC基础架构的关键基础组件。

3、软件架构

Lustre文件系统只支持文件接口,缺少软件级别副本,数据冗余依赖于后端硬件,可通过FLR特性实现数据异步镜像复制,可通过pacemaker高可用组件实现节点双活故障切换。整体软件架构如下:
在这里插入图片描述

  • MGS(管理服务器)
    MGS用于管理Lustre文件系统中的配置信息,并为其他组件提供信息。每个Lustre target通过MGS来提供信息,Lustre客户端通过MGS来获取信息
    MGS负责维护集群信息,当不涉及集群变更时,MGS服务异常不会影响到已有业务读写,当配置多个MGS时,同一时刻只能有一个MGS处于活动状态(其余MGS处于备用状态),使用同一个底层数据(同一MDT)
    注:MGS和OSS可以放在一起共享存储空间

  • MGT(管理目标)
    MGT为MGS提供存储空间,仅存储管理信息,所需空间极小(通常<100MB)
    由于MGT上的数据仅在服务器或客户端安装时被载入访问,因此不需要考虑磁盘性能;考虑其数据对于文件系统访问非常重要,通常建议使用RAID1

  • MDS(元数据服务器)
    MDS用于管理Lustre文件系统的配置信息

  • MDT(元数据目标)
    MDT为MDS提供存储空间,用于存储元数据信息(如文件名、目录、权限、文件布局等)。MDT可以是共享存储设备(如同一磁盘阵列映射给多个节点),虽然同一MDT可对多个MDS可见,但同一时刻只能被一个MDS访问,当活跃的MDS节点出现故障,另外一个MDS节点可以接管该MDT对外提供服务。通常使用SSD高性能磁盘,建议配置RAID1或RAID10
    注:MDT0000含有Lustre文件系统根目录,如出现MDT00000无法使用情况,则会导致整个文件系统无法使用

  • OSS(对象存储服务器)
    OSS为一个或多个本地OST(支持1~32个OST)提供文件I/O服务并处理网络请求

  • OST(对象存储目标)
    OST为OSS提供存储空间,用于存储文件数据,用户的文件数据存储在一个或多个对象中,每个对象存放在Lustre文件系统单独一个OST上,每个文件的对象数可根据特定工作负载调整以获得最佳性能。通常使用RAID5或RAID6

  • Lustre客户端
    运行Lustre客户端软件的节点,挂载Lustre文件系统,提供集群存储读写入口

  • LNet
    LNet(Lustre Network)是一种定制化网络API,提供了通讯基础,用于处理Lustre文件系统服务器和客户端之间的元数据和文件I/O数据通信

4、部署方式

lustre支持ldiskfszfs两种文件系统

  • ldiskfs
    基于Ldiskfs的Lustre文件系统技术栈成熟,性能调优完善,适合性能要求更高的场景

  • zfs
    基于ZFS的Lustre文件系统对存储硬件的要求较少,可采用JBOD(Just a Bunch of Disks)硬件,降低了系统对于厂商和硬件的依赖程度,有利于成本控制

二、软件安装

系统版本:CentOS Linux release 7.9.2009
内核版本:3.10.0-1160.el7.x86_64
软件版本:lfs 2.12.9

1、配置yum源

  • 添加国内镜像yum源及epel源
yum install wget -y
mv /etc/yum.repos.d/ /etc/yum.repos.d-bak/
mkdir /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/Centos-7.repo -P /etc/yum.repos.d/
wget http://mirrors.aliyun.com/repo/epel-7.repo -P /etc/yum.repos.d/
  • 添加Lustre软件源
[root@node93 ~]# cat /etc/yum.repos.d/lustre.repo 
[e2fsprogs]
name=e2fsprogs
baseurl=https://downloads.whamcloud.com/public/e2fsprogs/latest/el7/
gpgcheck=0
enable=1

[lustre-server]
name=lustre-server
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.12.9/el7.9.2009/server/
gpgcheck=0
enable=1

[lustre-client]
name=lustre-client
baseurl=https://downloads.whamcloud.com/public/lustre/lustre-2.12.9/el7.9.2009/client/
gpgcheck=0
enable=1
[root@node93 ~]# yum makecache

2、内核安装

内核版本包离线包下载:/public/lustre/lustre-2.12.9/el7.9.2009/server/RPMS/x86_64/

序号安装包名称说明
1kernel-ver_lustre.arch带lustre补丁的Linux内核

Lustre部署方式有jbod+zfsrbod+ldiskfs两种方式(前者使用软raid作为数据冗余方式,后者使用硬raid作为数据冗余方式)
当使用ldiskfs文件系统时,集群节点需要安装带Lustre补丁的内核版本(客户端节点不需要)

  • 安装内核包
    安装内核包之后,需要重启该节点,重新加载新内核版本
yum install kernel-3.10.0-1160.49.1.el7_lustre.x86_64 kernel-devel-3.10.0-1160.49.1.el7_lustre.x86_64 -y
yum install kernel-headers-3.10.0-1160.49.1.el7_lustre.x86_64 kernel-debuginfo-common-x86_64-3.10.0-1160.49.1.el7_lustre.x86_64 -y
reboot

2、服务端安装

e2fsprogs离线包下载(包括所有包):/public/e2fsprogs/latest/el7/RPMS/x86_64/
服务端离线包下载:/public/lustre/lustre-2.12.9/el7.9.2009/server/RPMS/x86_64/

序号安装包名称说明
1e2fsprogsLustre ldiskfs后端文件系统维护工具
2lustre-ver.archLustre 软件命令行工具
3kmod-lustre-ver.archLustre 补丁内核模块
4kmod-lustre-osd-ldiskfs-ver.arch用于基于 ldiskfs 的服务器的 Lustre 后端文件系统工具
5lustre-osd-ldiskfs-mount-ver.arch基于 ldiskfs 的服务器的 mount.lustre和mkfs.lustre相关帮助文档
6kmod-lustre-osd-zfs-ver.arch用于 ZFS 的 Lustre 后端文件系统工具(可用于替代 lustre-osd-ldiskfs可分别获取 kmod-spl 和 kmod-zfs available)
7lustre-osd-zfs-mount-ver.arch基于 ZFS 的服务器中mount.lustre和mkfs.lustre相关帮助文档(ZFS 工具须另外下载)
  • 安装e2fsprogs
yum install e2fsprogs -y
  • 安装lustre-all-dkms依赖包
yum install dkms elfutils-libelf-devel expect libnvpair1 libuutil1 libyaml libyaml-devel libzfs2 libzpool2 spl-dkms tcl zfs-dkms zlib-devel zlib -y
  • 安装lustre服务端软件包
yum install lustre-2.12.9-1.el7.x86_64 lustre-resource-agents-2.12.9-1.el7.x86_64 lustre-iokit-2.12.9-1.el7.x86_64 lustre-all-dkms-2.12.9-1.el7.noarch -y
yum install kmod-lustre-2.12.9-1.el7.x86_64 -y
yum install kmod-lustre-osd-ldiskfs-2.12.9-1.el7.x86_64 lustre-osd-ldiskfs-mount-2.12.9-1.el7.x86_64 -y
yum install kmod-lustre-osd-zfs-2.12.9-1.el7.x86_64 lustre-osd-zfs-mount-2.12.9-1.el7.x86_64 -y

3、客户端安装

客户端离线包下载:/public/lustre/lustre-2.12.9/el7.9.2009/client/RPMS/x86_64/

序号安装包名称说明
1kmod-lustre-client-ver.arch客户端的无损内核模块
2lustre-client-ver.arch客户端命令行工具
3lustre-client-dkms-ver.archkmod-lustre-client 的替代客户端 RPM,含动态内核模块支持 (DKMS。避免了每次内核更新都安新的 RPM,但需要客户端的完整构建环境。
  • 安装lustre客户端软件包
yum install kmod-lustre-client-2.12.9-1.el7.x86_64 lustre-client-2.12.9-1.el7.x86_64 -y

4、zfs安装

Installation of lustre-zfs-dkms fails
Fix dkms server build installation
Lustre-KMOD-2.12.9-with-ZFS-0.7.13-on-Centos-7.9

yum install yum install zfs -y

安装kmod-lustre-osd-zfs软件包失败,提示ksym相关依赖错误,查阅相关资料,官方版本对zfs支持方面存在问题,目前需要修改相关文件重新编译软件包解决


--> Finished Dependency Resolution
Error: Package: kmod-lustre-osd-zfs-2.12.9-1.el7.x86_64 (lustre-server)
           Requires: ksym(dsl_prop_unregister) = 0xfb7face6
Error: Package: kmod-lustre-osd-zfs-2.12.9-1.el7.x86_64 (lustre-server)
           Requires: ksym(zio_buf_alloc) = 0x0c211976

三、集群部署

1、关闭防火墙及SELinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config

2、配置网络

当节点存在多个网络接口时,需要为Lustre指定专用接口,可在/etc/modprobe.d/lustre.conf配置文件中添加一条设置LNet模块networks参数的条目

2.1、通用格式

options lnet networks=tcp0(eth0),o2ib(ib0)

  • 当需指定多个网络接口时,以,隔开
  • TCP/IP网络类型用tcp0tcp1表示,InfiniBand网络类型用o2ib表示,()内的参数值表示所使用的网卡名称
  • 一旦网络建立连接,即便该节点有多个接口可用,发生网络故障时也不会将路由转至另一接口上
2.2、参考示例
参考示例如下,指定当前节点Lustre专用网络接口为ens192
echo "options lnet networks=tcp0(ens192)" > /etc/modprobe.d/lustre.conf

3、配置zfs(可选)

参考链接:ZFS_OSD_Storage_Basics

Lustre可使用ldiskfszfs作为MGT、MDT、OST存储设备的后端文件系统,当使用zfs文件系统时,需要先创建对应的zpool池(软raid)
rbod + ldiskfsfs:当使用ldiskfs文件系统时,底层存储设备为RAID盘(rbod),数据冗余依赖于存储设备硬raid
jbod + zfs:当使用zfs文件系统时,底层存储设备为直通盘(jbod),数据冗余依赖于zfs软raid

3.1、通用格式

创建zpool前,需要使用genhostid命令生成唯一的host id值
zpool create -O canmount=off -o cachefile=none -o multihost=on <pool-name> [pool-type] <disk>

  • -O canmount=off: 禁用文件系统挂载,相当于设置挂载点属性为none
  • -o cachefile=none:禁用缓存文件,通常用于故障转移配置,故障转移软件可以直接导入存储池
  • -o multihost=on:启用多重导入保护,同一时刻只能将ZFS存储池导入单个主机,如果存储池已导入主机A,则必须从主机A先导出存储池,才能被安全导入到其他主机;当使用共享存储的zpool同时导入多个主机,则存储池数据将会被破坏;为降低此风险,每个主机都可使用genhostid命令生成唯一的host id值,用于标记zpool当前活动主机
  • pool-name :表示为存储池名称
  • pool-type :表示为存储池类型,默认不指定时为raidz,可选参数raidz、raidz1、raidz2、raidz3、mirror
  • raidz : 类似raid0,无冗余
  • raidz1 :类似raid5,可容忍一块磁盘损坏,至少需要三个磁盘,其中一个磁盘用于奇偶校验
  • raidz2 :类似raid6,可容忍两块磁盘损坏,至少需要四个磁盘,其中两个磁盘用于奇偶校验
  • raidz3 :类似raid7,可容忍三块硬盘损坏,至少需要五个磁盘,其中三个磁盘用于奇偶校验
  • mirror :类似raid1或raid10,同一个镜像组可以容忍一半的磁盘损坏
  • disk :表示组成存储池的磁盘列表,可以为磁盘名称(如sdb)、磁盘完整路径(如/dev/sdb)、磁盘id(可通过/dev/disk/by-id/查询,如ata-ST6000NM0115-1YZ110_ZAD1DR7M),为避免因磁盘盘符漂移导致zpool无法恢复,此处建议使用磁盘id方式指定
3.2、参考示例
参考示例如下,使用sdb、sdc创建mirror类型存储池mgspool
genhostid
zpool create -O canmount=off -o cachefile=none -o multihost=on mgspool mirror sdb sdc

4、部署集群

一个Lustre基础集群需包括一个MGS节点、一个MDS节点(可包含多个MDT)、一个OSS节点(可包含多个OST)、一个客户端节点

4.1、通用格式
1)部署MGS
  • 部署MGS
mkfs.lustre --mgs [ --fsname=<fsname> ] <--backfstype=[ zfs | ldiskfs ]> <[<poolname>/<dataset> | <diskname>]>

–fsname:指定Lustre文件系统名称
–backfstype:指定存储设备后端文件系统类型,可选参数为zfsldiskfs,当指定zfs文件系统时,后接zpool存储池路径(如mgspool/mgt);当指定ldiskfs文件系统时,后接磁盘路径(如/dev/sdb)

  • 挂载服务
mount -t lustre <[<poolname>/<dataset> | <diskname>]>  <mountpoint>
2)部署MDS
  • 部署MDT
mkfs.lustre --mdt [ --fsname=<fsname> ] [ --mgsnode=<mgs@nid> ] [ --index <n> ] <--backfstype=[ zfs | ldiskfs ]> <[<poolname>/<dataset> | <diskname>]>

–fsname:指定Lustre文件系统名称
–mgsnode:指定MGS节点及网络接口,如172.16.21.91@tcp0
–index:指定MDT索引编号,编号从0开始,此编号为集群全局配置(如MDS节点1已部署两个MDT,编号为0和1,则MDS节点2部署MDT则需从2开始编号)
–backfstype:指定存储设备后端文件系统类型,可选参数为zfsldiskfs,当指定zfs文件系统时,后接zpool存储池路径(如mgspool/mgt);当指定ldiskfs文件系统时,后接磁盘路径(如/dev/sdb)

  • 挂载服务
mount -t lustre <[<poolname>/<dataset> | <diskname>]>  <mountpoint>
3)部署OSS
  • 部署OST
mkfs.lustre --ost [ --fsname=<fsname> ] [ --mgsnode=<mgs@nid> ] [ --index <n> ] <--backfstype=[ zfs | ldiskfs ]> <[<poolname>/<dataset> | <diskname>]>

–fsname:指定Lustre文件系统名称
–mgsnode:指定MGS节点及网络接口,如172.16.21.91@tcp0
–index:指定OST索引编号,编号从0开始,此编号为集群全局配置(如OSS节点1已部署两个OST,编号为0和1,则OSS节点2部署OST则需从2开始编号)
–backfstype:指定存储设备后端文件系统类型,可选参数为zfsldiskfs,当指定zfs文件系统时,后接zpool存储池路径(如mgspool/mgt);当指定ldiskfs文件系统时,后接磁盘路径(如/dev/sdb)

  • 挂载服务
mount -t lustre <[<poolname>/<dataset> | <diskname>]>  <mountpoint>
4)客户端挂载
mount -t lustre <mgs@nid>:<fsname> <mountpoint>
  • 38
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值