Lustre 使用培训.ppt
Lustre 使用培训,汪璐中科院高能所计算中心Lu.W,安装及配置调优参数介绍Trouble Shooting,大纲,硬件准备安装Lustre软件配置启动Lustre主要配置命令,安装及配置,块设备磁盘,软RAID,硬件RAID,LVM依赖于RAID提供的块级容错块设备连接与服务器直连,不需要SAN考虑到failover的情况,需要双通道或者多通道设备性能,稳定性在生产环境中,分离的服务器和客户端操作系统服务器和客户端最好都采用64bit从lustre-2.2开始,不再支持32bit,硬件准备,元数据服务器(MDS)至少4核MDS内存大约每个文件2KB,Cache元数据能够将性能提高十倍假设只有1个 MDT的MDS,1000个客户端,16个交互节点操作系统的开销512MB,文件系统日志 400MB1000个4核客户端,每个核100个文件,每个文件锁2KB,总共800MB16个交互客户端,每个客户端10000个文件,每个文件2KB,总共320MB1,600,000个文件句柄信息,每个文件1.5KB=2400MB至少需要4GB内存增大内存能够明显增加大目录的性能大于100000个文件的目录,硬件准备,元数据存储块设备(MDT)多seek,小块读写的访问模式SAS,SSD,RAID10,分离日志可以提高至少20%的性能元数据空间取决于系统的inode个数,一般是系统总容量的1%-2%假设每个inode占用4KB,平均文件大小为5MB,存储容量为100TB,存储容量为100TBInode个数为20 million,按照推算大小的2倍来规划MDT的空间应该为:4 KB/inode*40 million inodes=160 GB对于平均文件大小小于4KB的应用,Lustre是很不经济的,硬件准备,数据服务器(OSS)至少4核OSS内存日志尺寸,每个ldiskfs文件系统400MB(可以更大)服务线程,每个ost_io线程消耗1MB的io buffer文件系统的元数据TCP等需要发送/接收 buffer的协议的内存开销如果有failover,OSS的日志尺寸在故障情况下要翻倍读cache经验值:2GB+1GB*OST个数failover模式下,2GB*OST个数,硬件准备,数据存储(OST)RAID 6,每6-8块盘一个卷,一个热备盘数据访问模式依赖于应用,需要平衡存储、网络带宽每个OSS可以支持2-8个OST受限于CPU,内存和网络带宽1.8.6-wc1支持24TB OST分区2.1版本可以支持128TB OST分区RAID监控OST的空间实际的存储容量,硬件准备,下载并依次安装lustre内核包,模块包,ldiskfs模块Lustre工具包,e2fsprog包特殊网络相关的模块和库(可选)修改boot loader,重启机器配置网络接口/etc/modprobe.conf 中添加 options lnet networks=ethX创建MGS/MDT设备mds#mkfs.lustre mgs mdt fsname=启动MGS/MDT设备mds#mount t lustre,安装流程,创建OST设备ost#mkfs.lustre ost fsname=-mgsnode=启动OST设备ost#mount t lustre 修改 MDS,OSS上 fstab客户端mountclient#mount t lustre:/,安装流程(2),执行lfs命令验证文件系统的功能lfs df h,lfs df ih注意selinux和防火墙设置保证MDS与客户端有相同的用户数据库保证Lustre集群中所有节点时钟同步,安装流程(3),mkfs.lustremkfs.lustre-fsname=-ost-mgsnode=-param=failover.mode=failout mkfs.lustre-mdt-param=sys.timeout=50/dev/sda“Options for Formatting the MDT andOSTs”tunefs.lustretunefs.lustre-erase-params-param=tunefs.lustre-param=failover.node=192.168.0.13tcp0/dev/sda注意 dryrun 选项mount.lustremount-t lustre-L testfs-MDT0000-o abort_recov/mnt/test/mdtmount t lustre-o flock:/mount-o exclude=testfs-OST0000-t lustre:/,配置命令,lctl:lustre 底层配置工具lctl-device 设备相关lctl dl 查看设备列表lctl device deactivate 关闭一个有问题的设备lctl device activate 恢复一个正常设备网络相关lctl ping 检查lustre 网络,配置命令:lctl,debug 相关lctl dk 打印内核debug buffer到文件lctl df 还原二进制debug文件配置相关lctl conf_param 将参数配置永久性写入配置文件,对所有的客户端立刻生效lctl get_param,lctl set_param,lctl list_param参数映射到/proc/sys,fs/lustre,lnet/pathname一次查看/修改多个数值,配置命令:lctl,磁盘池相关OST的集合,定义文件的分布规则区分不用的应用/硬件新建磁盘池 mgs#lctl pool_new myth.video添加OSTmgs#lctl pool_add myth.video OST0000-3查看磁盘池client$lctl pool_list myth.video,配置命令:lctl,client#lctl set_param osc.*.max_dirty_mb=32osc.myth-OST0000-osc.max_dirty_mb=32osc.myth-OST0001-osc.max_dirty_mb=32oss#lctl get_param obdfilter.*.recovery_statusobdfilter.XXXX-OST0009.recovery_status=obdfilter.XXXX-OST0010.recovery_status=obdfilter.XXXX-OST0011.recovery_status=mds$lctl list_param-R mdtmgs#lctl conf_param myth.llite.max_read_ahead_whole_mb=5.5client#dmesg|tail-1Lustre:Setting parametermyth-client.llite.max_read_ahead_whole_mbin log myth-client,例子:lctl 查看,修改多个属性,OST迁移脚本/usr/bin/lfs_migrate通过文件的复制来实现OST的负载均衡简单的拷贝,不能用来迁移正在使用的文件防止文件分配到某个特定的OST,可以在MDS上执行lctl-device%fsname-OSTNNNN-osc deactivate与lfs find结合使用client#lfs find/test-O test-OST0004-size+4G|lfs_migrate y,配置命令:lfs_migrate,lfs find时间,查询深度,文件名,文件尺寸,uid,gid特定的OST,特定的Lustre 磁盘池假设OST0002,4即将写满client#lfs find/myth-type f-mtime-2-size+2G-obd myth-OST0002-obd myth-OST0004|lfs_migrate将这两个OST上修改时间超过2天,尺寸大于2G的文件迁移到别的OST上假设OST0005,6 是新加入的OST,将其它OST上的大文件迁移到这两个OST上client#lfs find/myth-mtime+90-size+20G-name“*.iso”!-obd myth-OST0005!-obd myth-OST0006|lfs_migrate,配置命令:lfs find,磁盘池与lfs df,lfs find 结合client$lfs df-p myth.audio UUID 1K-blocks Used Available Use%Mounted on myth-MDT0000 9174328 178572 8471468 1%/mythMDT:0 myth-OST0004 721984264 653299296 68684904 90%/mythOST:4 Summary:721984264 653299296 68684904 90%/mythclient$lfs find-p myth.audio-uid,配置命令:lfs df,ll_recover_lost_found_objs恢复lost+foundoss#mount-t ldiskfs/dev/vgmyth/lvmythost0/mntoss#ll_recover_lost_found_objs-d/mnt/lost+foundoss#umount/mnt/usr/sbin/lustre_rmmod卸载系统中所有的lustre module,配置命令:其它,客户端,服务器I/O状态查看CACHE 相关空间分布相关Import 和 export,性能调试参数,客户端连续读写情况/proc/fs/lustre/llite/lustre-ee5af200/extents_stats/proc/fs/lustre/llite/lustre-ee5af200/extents_stats_per_process客户端对每个OST的请求计数/proc/fs/lustre/osc/lustre-OST0000-osc/stats客户端一段时间内的跳读状态client#cat/proc/fs/lustre/llite/lustre-f57dee00/offset_stats客户端的rpc请求大小分布client#cat/proc/fs/lustre/osc/spfs-OST0000-osc-c45f9c00/rpc_stats,查看I/O状态,服务器上每个OST的读写请求分布oss#cat/proc/fs/lustre/obdfilter/lustre-OST0000/brw_statsmds#cat/proc/fs/lustre/mds/*-MDT0000/statsOSS对每个客户端的读写情况oss#lctl get_param obdfilter.*.exports.*.brw_stats所有文件名为stat的文件都可以用llstat分时间间隔显示 oss#llstat-c-i10/proc/fs/lustre/ost/OSS/ost_io/statsllobdstat OSTNAME interval按照时间间隔查看OST的读写流量,查看I/O状态(2),/proc/fs/lustre/llite/*/max_cached_mb对某一个llite最大cache的数据,默认是3/4 内存client#lctl set_param llite.*.max_read_ahead_per_file_mb=10设置对每个文件的最大read_aheadclient#lctl set_param llite.*.max_read_ahead_whole_mb=5.5将小文件一次性读进cache,默认是2MB/proc/fs/lustre/osc/max_dirty_mb每个osc默认的dirty数据大小/proc/fs/lustre/osc/max_pages_per_rpc默认256,不能改大,越大性能越高/proc/fs/lustre/osc/max_rpcs_in_flight受到服务器性能的限制,对其它client不公平,客户端CACHE,/proc/fs/lustre/obdfilter/*/read_cache_enable是否cache用户读出的数据/proc/fs/lustre/obdfilter/*/writethrough_cache_enable是否cache用户写入的数据oss#1ctl set_param obdfilter.*.readcache_max_filesize=6M设置 在OSS上cache 的最大文件,OSS的CACHE,/proc/fs/lustre/lov/-mdtlov/qos_prio_free控制文件在多个OST之间的分布0 到100,0表示不考虑剩余空间的差异只有在OST剩余空间差异到了20%以上才起作用/proc/fs/lustre/lov/besfs-mdtlov/qos_threshold_rr mds 在分布stripe的时候有两种方法qos 考虑OST的剩余空间,负载,已经分配的object数量等Round robin 只是平均的在所有OST上分布qos_threshould_rr=0 代表只使用round robinqos_threadould_rr=100 代表只使用 qos,修改空间分布规则,client$lctl get_param osc.*.importosc.myth-OST0000-osc.import=import:name:myth-OST0000target:myth-OST0000_UUIDcurrent_connection:192.168.20.1tcpstate:FULLconnect_flags:write_grant,server_lock,.,early_lock_cancel,adaptive_timeouts,lru_resize,alt_checksum_algorithm,version_recoveryimport_flags:replayable,pingablemds$lctl get_param-NF mds.*.exports.*mds.myth-MDT0000.exports.192.168.20.153tcp/mds.myth-MDT0000.exports.192.168.20.159tcp/mds.myth-MDT0000.exports.clear=,Import 和export状态,查看客户端的UUIDmds$lctl get_param mds.*.exports.*.uuidmds.myth-MDT0000.exports.192.168.20.153tcp.uuid=31007da1-a19f-6537-15df-8a6cbc6f9342 mds.myth-MDT0000.exports.192.168.20.159tcp.uuid=99ca0c3f-f91b-8ee6-28c2-891101d95256通过UUID剔除mds#lctl set_param mds.*.evict_client=31007da1-a19f-6537-15df-8a6cbc6f9342通过NID剔除mds#lctl set_param mds.*.evict_client=nid:192.168.20.153tcp,剔除特定的客户端,分析日志Lustre Debug Messages Buffercrash dump debugfskgdb,Trouble Shooting,LustreError:21419:0:(ldlm_resource.c:719:ldlm_resource_add()lvbo_init failed for resource 5719372:rc-2-2 表示文件对象不存在 对象 5719372 在OST上不存在需要找到 5719372 对应的文件名oss#debugfs-c-R stat/O/0/d$(5719372%32)/5719372/dev/mpath/ost42Inode:12345 Type:regular Mode:0666 Flags:0 x80000User:31145 Group:1337 Size:4129115(.)Extended attributes stored in inode body:fid=86 1e 23 00 00 00 00 00 ef 0a 29 81 00 00 00 00 00 64+12 00 00 00 00 00 00 00 00 00 00 00 00 00(32)错误的文件inode number 在MDT 上的 0 x00231e86mds#debugfs-c-R ncheck 0 x00231e86/dev/mpath/mdt012301574/ROOT/home/user17/sim/nobelprize.dat,例子:从错误日志到错误文件,Oops:0000#1SMP DEBUG_PAGEALLOCModules linked in:loop(U)mgc(U)lustre(U)lov(U)osc(U)mdc(U)lquota(U).EIP is at osc_brw_prep_request+0 x28f/0 x1310 osceax:00001a08 ebx:ce8ce000 ecx:cc9e82c0 edx:00000100esi:c29e82d0 edi:00000000 ebp:d4bd7a08 esp:d4bd7970ds:007b es:007b ss:0068Process random-reads(pid:10317,threadinfo=d4bd6000 task=d3e7b950)Stack:00000008 d4bd79ec 00000000 cabbe600 c136a6e0 00000000 000005ff 00000000 c98cea68 df54694c 0200470e 0200470e c98ce9ac cc9e8240 c29e8200 00000002 000005f8 e10bcc1a c15d9060 cc9e82c0 cabbe600 00000004 00000000 00000000Call Trace:show_stack+0 x76/0 x7e show_registers+0 xf0/0 x158 die+0 xee/0 x17e do_page_fault+0 x408/0 x606,例子:从crashdump定位错误代码,gdb osc.ko(gdb)l*(osc_brw_prep_request+0 x28f)0 x924f is in osc_brw_prep_request(/vservers/lustre/b1_6/lustre/osc/osc_request.c:967).962 ioobj-ioo_bufcnt=niocount;963964 LASSERT(page_count 0);965 for(requested_nob=i=0;i page_count;i+,niobuf+)966 struct brw_page*pg=pgai;967 struct brw_page*pg_prev=pgai-1;第一个loop执行时 pg_prev 对应的pga-1 不存在,例子:从crashdump定位错误代码,Lustre Tricks You Probably Didnt Knowhttp:/wiki.lustre.org/images/e/e4/LUG-2010-tricksRev.pdfLustre 1.8OperationsManualhttp:/wiki.lustre.org/images/0/09/821-0035_v1.3.pdfLog Analysis-Lustrehttp:/wiki.lustre.org/images/c/./LustreInternals_LogAnalysis.pdf,参考,Thank you!,