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

深入理解Lustre分布式文件系统之Utils工具篇

698


作者时间QQ技术交流群
perrynzhou@gmail.com2022/02/29672152841


2.1 基本介绍



  • 管理类的utils工具是Lustre提供用来调整不同配置的工具。这些配置工具包括创建后端的块设备
    扩展Lustre文件系统中的ost
    更改文件的布局
    等一系列的功能。如下列举了Lustre文件系统中的工具命令的使用用途。

  • mkfs.lustre
     :用来ldikfs/zfs文件系统来格式化一个磁盘。


// 使用zfs格式化后端磁盘
$ 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/

// 使用ldiskfs格式化后端的磁盘
$ wipefs -a dev/sdc
$ mkfs.lustre --ost --backfstype ldiskfs --reformat --fsname perrynfs --index 0 --mgsnode CentOS-Lustre-Server@tcp0 dev/sdc
$ mount -t lustre dev/sdc ost0
  • tunefs.lustre
    :更改lustre后端磁盘块设备的配置信息。使用方式参照:tunefs.lustre [options] dev/device


// tunefs.lustre --erase-params --param=new_parameters 这个命令擦除旧参数 ,设置新的参数

// 修改某个ost的的mgsnode
$ tunefs.lustre --erase-param --mgsnode=CentOS-Lustre-Server@tcp0 --writeconf dev/sda

// 设置某个ost的mgsnode
$ tunefs.lustre --param="failover.node=192.168.0.13@tcp0" dev/sda
  • lctl
     :用来控制lustre功能的接口,包括一些配置变更和调试功能等。基本的使用语法参照 lctl [--device devno] command [args]
    .


// command:dl dk device network up|down list_nids ping nid  quit

// 展示本地lustre obd信息
$ lctl dl

// 打印本地节点所有的nids信息
$ lctl list_nids
  • mount.lustre
    :用来启动lustre客户端或者lustre服务端的后端服务.

  • lfs
    :lustre提供配置和查询文件相关的工具,比如设置文件的stripe,查询文件的stripe.使用lfs来查找文件功能。


$ lfs find mnt/lustre 
/mnt/lustre
/mnt/lustre/stripe_1_data
/mnt/lustre/stripe_1_data/go.tar.gz
/mnt/lustre/stripe_3_data
/mnt/lustre/stripe_3_data/go.tar.gz
/mnt/lustre/stripe_3_data/data.tar.gz
/mnt/lustre/stripe_3_data/demo.tar.gz


2. 2 lfs工具

  • lfs可以用来配置和监控lustre整个文件系统。在lustre文件系统中最常用的有设定指定stripe创建新文件、查看文件的stripe、查询文件的扩展属性、列举当前ost的信息、设置quota的限制等操作。


// 设置模具路
$ lfs setstripe -S 1M -c 3 mnt/lustre/stripe_3_data/

// 查看lustre文件系统的容量信息
$ lfs df
UUID 1K-blocks Used Available Use% Mounted on
perrynfs-MDT0000_UUID 9275752 2328 8436212 1% mnt/lustre[MDT:0]
perrynfs-OST0000_UUID 15813024 20208 14937572 1% mnt/lustre[OST:0]
perrynfs-OST0001_UUID 15813024 17172 14940608 1% mnt/lustre[OST:1]
perrynfs-OST0002_UUID 15813024 16784 14940996 1% mnt/lustre[OST:2]

filesystem_summary: 47439072 54164 44819176 1% mnt/lustre

// 获取文件的扩展属性和文件布局信息
$ lfs getstripe mnt/lustre/stripe_3_data/demo.tar.gz
/mnt/lustre/stripe_3_data/demo.tar.gz
lmm_stripe_count: 3
lmm_stripe_size: 1048576
lmm_pattern: raid0
lmm_layout_gen: 0
lmm_stripe_offset: 1
obdidx objid objid group
1 4 0x4 0
2 4 0x4 0
0 5 0x5 0


lfs_migrate功能

  • lfs_migrate
    工具用来在lustre的osts之间进行数据的迁移。这个迁移分为两个步骤,第一拷贝指定文件到临时文件;第二步是目标文件和临时文件进行交换来完成迁移。lfs_migrate
    能够解决lustre集群中OST之间的空间协调。


// 列举当前的lustre中的所有osts,当前是有3个ost
$ lfs osts
OBDS:
0: perrynfs-OST0000_UUID ACTIVE
1: perrynfs-OST0001_UUID ACTIVE
2: perrynfs-OST0002_UUID ACTIVE

// 原始的文件布局,这个文件是有2个stripe
$ lfs getstripe mnt/lustre/stripe_2_data/
/mnt/lustre/stripe_2_data/
stripe_count: 2 stripe_size: 1048576 pattern: raid0 stripe_offset: -1

// data.tar.gz的数据分别在ost={0,1}
/mnt/lustre/stripe_2_data//data.tar.gz
lmm_stripe_count: 2
lmm_stripe_size: 1048576
lmm_pattern: raid0
lmm_layout_gen: 0
lmm_stripe_offset: 0
obdidx objid objid group
0 34 0x22 0
1 34 0x22 0

// 把/mnt/lustre/stripe_2_data的数据从ost=perrynfs-OST0001,也就是ost index=1迁移到其他的ost
$ lfs find mnt/lustre/stripe_2_data/ --ost perrynfs-OST0001 -size +1M | lfs_migrate -y
/mnt/lustre/stripe_2_data//data.tar.gz: done

// 迁移完成后的数据布局
$ lfs getstripe mnt/lustre/stripe_2_data/
/mnt/lustre/stripe_2_data/
stripe_count: 2 stripe_size: 1048576 pattern: raid0 stripe_offset: -1

// 这里已经能够看出data.tar.gz已经从ost1迁移到ost2上了
/mnt/lustre/stripe_2_data//data.tar.gz
lmm_stripe_count: 2
lmm_stripe_size: 1048576
lmm_pattern: raid0
lmm_layout_gen: 1
lmm_stripe_offset: 2
obdidx objid objid group
2 34 0x22 0
0 35 0x23 0

// 均衡stripe_12_data所有的数据
$ lfs_migrate mnt/lustre/stripe_12_data/


lctl功能

  • lctl
    工具负责控制和配置整个lustre文件系统,其中包括设置集群的配置、启用lustre的Debug工。lctl
    是一个命令交互的命令,支持dl、device、network up/down、list_nids、ping nid、conn_list


$ lctl
lctl > net up
LNET configured
lctl > list_nids
10.211.55.7@tcp
lctl > net tcp

// tcp连接信息
lctl > conn_list
12345-10.211.55.6@tcp O[0]CentOS-Lustre-Client->CentOS-Lustre-Server:988 2959360/367360 nonagle
12345-10.211.55.6@tcp I[0]CentOS-Lustre-Client->CentOS-Lustre-Server:988 87040/5799648 nonagle
12345-10.211.55.6@tcp C[0]CentOS-Lustre-Client->CentOS-Lustre-Server:988 87040/367360 nonagle
// 查看device
lctl > dl

lctl > dk

// 列举出nid
lctl > list_nids
10.211.55.7@tcp
// ping nid
lctl > ping 10.211.55.7@tcp
12345-0@lo
12345-10.211.55.7@tcp
  • lctl
    其次可以设置或者获取集群的具体配置参数信息,使用的方式lctl set_param [-P] [-d] {obdtype}.{obdname}.{property}=value
    来设置lustre文件系统的参数;查看lustre文件系统中的参数可以用如下格式进行查看lctl get_param [-n] {obdtype}.{obdname}.{property}
    来查看。




// 在mgs或者mds节点上执行如下命令,列举出当前所有的可配置的参数列表
$ lctl list_param *.*.*

// 当前lustre系统中有如下{obdtype}
$ lctl list_param *.*.* | awk '{split($0,b,".");print b[1]}' | awk '!a[$0]++{print}'
ldlm
lod
lov
lwp
mdd
mds
mdt
mgc
mgs
obdfilter
osc
osd-ldiskfs
osp
ost
fld
seq
nodemap
qmt


// 当前lustre系统中有如下{obdtype}.{obdname}
$ lctl list_param *.*.* | awk '{split($0,b,".");print b[1]"."b[2]}' | awk '!a[$0]++{print}'
ldlm.namespaces
ldlm.services
lod.perrynfs-MDT0000-mdtlov
lov.perrynfs-MDT0000-mdtlov
lwp.perrynfs-MDT0000-lwp-MDT0000
lwp.perrynfs-MDT0000-lwp-OST0000
lwp.perrynfs-MDT0000-lwp-OST0001
lwp.perrynfs-MDT0000-lwp-OST0002
mdd.perrynfs-MDT0000
mds.MDS
mdt.perrynfs-MDT0000
mgc.MGC10
mgs.MGS
obdfilter.perrynfs-OST0000
obdfilter.perrynfs-OST0001
obdfilter.perrynfs-OST0002
osc.perrynfs-OST0000-osc-MDT0000
osc.perrynfs-OST0001-osc-MDT0000
osc.perrynfs-OST0002-osc-MDT0000
osd-ldiskfs.perrynfs-MDT0000
osd-ldiskfs.perrynfs-OST0000
osd-ldiskfs.perrynfs-OST0001
osd-ldiskfs.perrynfs-OST0002
osp.perrynfs-OST0000-osc-MDT0000
osp.perrynfs-OST0001-osc-MDT0000
osp.perrynfs-OST0002-osc-MDT0000
ost.OSS
fld.srv-perrynfs-MDT0000
fld.srv-perrynfs-OST0000
fld.srv-perrynfs-OST0001
fld.srv-perrynfs-OST0002
seq.cli-cli-perrynfs-OST0000-osc-MDT0000
seq.cli-cli-perrynfs-OST0001-osc-MDT0000
seq.cli-cli-perrynfs-OST0002-osc-MDT0000
seq.cli-ctl-perrynfs-MDT0000
seq.cli-lfsck-perrynfs-MDT0000-osd
seq.cli-perrynfs-MDT0000
seq.cli-perrynfs-OST0000-super
seq.cli-perrynfs-OST0001-super
seq.cli-perrynfs-OST0002-super
seq.ctl-perrynfs-MDT0000
seq.srv-perrynfs-MDT0000
seq.srv-perrynfs-OST0000
seq.srv-perrynfs-OST0001
seq.srv-perrynfs-OST0002
nodemap.default
qmt.perrynfs-QMT0000
  • llog_reader
    :解析lustre配置文件的日志,然后转换为可读方式的格式,使用的语法是llog_reader {file_name}
    .


// 以ldiskfs的文件系统挂载mgt/mdt
$ mount -t ldiskfs dev/sdb mnt/mgt_mdt

// 进入mdt/mgt的CONFIGS目录
$ pwd
/mnt/mgt_mdt
$ ls -l mnt/mgt_mdt/CONFIGS
total 88
// mountdata是挂载数据
-rw-r--r-- 1 root root 12288 Mar 2 17:51 mountdata
// 节点映射表
-rw-r--r-- 1 root root 8192 Mar 2 17:51 nodemap
// 集群参数
-rw-r--r-- 1 root root 0 Mar 2 17:51 params
// 客户端的挂载需要的数据
-rw-r--r-- 1 root root 13952 Mar 2 17:52 perrynfs-client
// mdt的配置数据
-rw-r--r-- 1 root root 12672 Mar 2 17:52 perrynfs-MDT0000
// ost的配置数据
-rw-r--r-- 1 root root 8896 Mar 2 17:52 perrynfs-OST0000
-rw-r--r-- 1 root root 8896 Mar 2 17:52 perrynfs-OST0001
-rw-r--r-- 1 root root 8896 Mar 2 17:52 perrynfs-OST0002


// dump出perrynfs-client的客户端数据,一般的格式为{fsname}-client
$ debugfs -c -R 'dump CONFIGS/perrynfs-client /tmp/perrynfs-client' /dev/sdb
debugfs 1.46.2.wc3 (18-Jun-2021)
/dev/sdb: catastrophic mode - not reading inode or group bitmaps

// 查看并解析perrynfs-client文件,这里面列举了客户端需要的所有的obd模块,客户端解析这些然后进行初始化自身所有的模块,来完成
$ ls -l -1h /tmp/perrynfs-client
-rw-r--r-- 1 root root 14K Mar 6 21:20 /tmp/perrynfs-client

// 解析日志
$ llog_reader /tmp/perrynfs-client


// 查看解析mdt中的配置信息
$ debugfs -c -R 'dump CONFIGS/perrynfs-MDT0000 /tmp/perrynfs-MDT0000' /dev/sdb
debugfs 1.46.2.wc3 (18-Jun-2021)
/dev/sdb: catastrophic mode - not reading inode or group bitmaps

$ ls -l -1h /tmp/perrynfs-MDT0000
-rw-r--r-- 1 root root 13K Mar 6 21:23 /tmp/perrynfs-MDT0000
$ llog_reader /tmp/perrynfs-MDT0000


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

评论