Lustre的安装与配置

2024-03-24 10:32
文章标签 配置 安装 lustre

本文主要是介绍Lustre的安装与配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Lustre是一个分布式文件系统,由MDS(元数据服务器)、OSS(对象存储服务器)和Client(客户端)三部分组成。其中MDS和OSS都可以有多个节点,通过MGS进行管理,MGS只能有一个。

主要内容

  • 安装环境
  • Lustre的安装
  • Lustre的配置
  • 用于Lustre管理的实用工具
  • 遇到的问题与解决方案
  • 有创意的Idea

安装环境

  • 操作系统:CentOS 6.3 (x86_64)
  • 内核版本:2.6.32-279
  • Lustre版本:2.3
  • Lustre节点:一个MGS和MDT,使用同一个服务器;多个OSS。

Lustre的安装

安装之前,对系统环境有如下要求:

  1. 必须已安装net-snmp,否则在安装lustre-version.rpm时会报错;
  2. selinux必须被设置为disabled,如果未关闭则在mkfs.lustre操作时会报错;可通过sestatus查看selinux当前状态,如果为enforcing则表示未关闭;可通过命令setenforce [permissive|0]临时性关闭;永久关闭则需要修改配置文件/etc/selinux/config,做如下修改重启后生效:
1
SELINUX=disabled

下载e2fsprogs并安装:

1
2
3
4
5
6
7
8
rpm -Uvh --nodeps \
e2fsprogs-devel-1.42.7.wc1-7.el6.x86_64.rpm \
e2fsprogs-libs-1.42.7.wc1-7.el6.x86_64.rpm \
e2fsprogs-1.42.7.wc1-7.el6.x86_64.rpm \
libcom_err-devel-1.42.7.wc1-7.el6.x86_64.rpm \
libcom_err-1.42.7.wc1-7.el6.x86_64.rpm \
libss-devel-1.42.7.wc1-7.el6.x86_64.rpm \
libss-1.42.7.wc1-7.el6.x86_64.rpm

下载kernel包并安装(如果要使用InfiniBind连接方式,则必须安装kernel-ib-version包,且需要卸载系统中已经安装的以mlnx开头的kenel包):

1
2
3
4
5
rpm -ivh \
kernel-firmware-2.6.32-279.5.1.el6_lustre.gb16fe80.x86_64.rpm \
kernel-devel-2.6.32-279.5.1.el6_lustre.gb16fe80.x86_64.rpm \
kernel-2.6.32-279.5.1.el6_lustre.gb16fe80.x86_64.rpm \
kernel-ib-version

下载并安装Lustre:

1
2
3
4
rpm -ivh \
lustre-ldiskfs-3.3.0-2.6.32_279.5.1.el6_lustre.gb16fe80.x86_64.x86_64.rpm \
lustre-modules-2.3.0-2.6.32_279.5.1.el6_lustre.gb16fe80.x86_64.x86_64.rpm \
lustre-2.3.0-2.6.32_279.5.1.el6_lustre.gb16fe80.x86_64.x86_64.rpm

Lustre的配置

配置Lustre所使用的接口名称以及相对应的别名;

  • Lustre默认使用的是第一个网络接口,默认的名称为tcp0
  • 如果需要使用光纤接口,则创建/etc/modprobe.d/lnet.conf文件,写入以下内容:
1
options lnet networks="o2ib0(ib0)"

使用光纤接口前需要先确定光纤接口是否配置正常:使用ifconfigibv_devinfo查看相关端口是否启动,ip地址是否配置正确,接口状态等。查看通过光纤接口是否可以和其它节点联通。

如果使用的是mlnx驱动,则在加载lustre模块时会报错,需要先卸载如下的几个包

1
rpm -qa | grep 'kernel' | grep 'mlnx'

如果光纤接口出现故障,则首先通过lspci确定相关硬件是否存在;接着确定openibd服务是否开启,如果未开启则利用以下命令启动并设置开机启动

1
2
3
4
service openibd start
chkconfig openibd on
#查看开机启动是否设置成功
chkconfig --list openibd

载入相关模块:

1
2
3
modprobe lustre
modprobe ldiskfs
modprobe lnet

这时可以查看/sys/modules/lnet/prarameters/networks内容,以确定lnet.conf中的配置信息是否已经加载至内核。

在MDS上的创建Lustre文件系统,并挂载:

1
2
mkfs.lustre --fsname=mylustre --mdt --mgs --index=0 --reformat /dev/sdb1
mount.lustre /dev/sdb1 /mnt/mdt

其中fsname为安装的lustre文件系统的标志,在MGS、MDS和OSS中都必须保持一致,在客户端挂在Lustre文件系统时也会使用到这个名字,长度不能超过8个字符;本例中MGS和MDS使用同一个服务器;reformat会对磁盘进行重新格式化处理。

在OSS上创建Lustre文件系统,并挂载:

1
2
mkfs.lustre --fsname=mylustre --ost --reformat --index=num --mgsnode=host_mds@o2ib0 /dev/sdb2
mount.lustre /dev/sdb2 /mnt/ost

必须要在MDT的文件系统挂在之后才能挂载OST的文件系统;host_mds为mds的ip地址或者已经写入hosts文件的主机名,o2ib0lnet.conf中写入的内容保持一致。 如果出现无法连接的情况,则可能是防火墙的原因,可以关闭iptables服务:service iptables stop

客户端的挂载:

1
mount.lustre host_mds@o2ib0:/mylustre /mnt/lustre

实用工具

lctl:可以直接在终端运行进入交互的命令方式或者直接输入命令。

1
2
3
4
lctl network up
lctl list_nids	#可以查看当前实际的ip地址,以确定是否使用了正确的接口
lctl ping nids	#用来检查OSS和MGS连接是否正常
lctl dl		#查看当前的设备

可以通过lfs命令获取已挂载的lustre文件系统信息:

1
lfs df -h

或者对文件系统的文件写入方式等进行配置:

1
lfs setstripe -c -1 -S 128M /mnt/lustre/

其中-c -1表示写入到所有的OSS中,-S 128M表示文件分块的大小为128M;上面是对整个文件系统进行设置,也可以单独地对某个文件或者文件夹进行设置;设置完后可以通过如下命令查看配置信息是否正确:

1
lfs getstripe /mnt/lustre

利用tunefs.lustre可以查看已建立的lustre文件系统的信息,并对部分信息进行调整。

Stopping LNET

1
2
3
4
lctl network unconfigure
modprobe -r <any lnd and the lnet modules>
#卸载所有Lustre模块
lctl modules | awk '{print $2}' | xargs rmmod

利用iozone进行测试

iozone是对文件系统的读写性能进行测试的工具

1
2
3
4
5
6
7
8
9
10
11
12
#单个测试文件大小
FILE_SIZE="16g"
#进行读写的进程的数量
THREAD_NUM="16"
#总的读写数据量
TOTAL_FILESIZE=$((FILE_SIZE*THREAD_NUM))
#-i 0: 代表write/rewrite
#-i 1: 代表read/reread
#-i 2: 表示random-write/random-read
#-o: 表示在写后要立即进行同步,去除该参数后可有效提高写速度
#-+n: 不进行重复测试,即不会进行rewrite和reread
/path/to/iozone -e -c -s $TOTAL_FILESIZE -r $RECSIZE -+m $NODELIST -+k -i 0 -i 1 -t  $THREAD_NUM -o -w -+n>> $OUTPUTFILE

其中$NODELIST是下面一种格式的节点配置文件,每一行代表一个客户端,用空格区分为不同的列,每一列的含义如下:

  1. 客户端名称
  2. 要测试的文件系统的一个目录
  3. iozone的可执行文件路径
  4. 文件名,相同的主机名但不同的文件名也表示一个单独的读写测试进程
1
2
3
4
snode17 /mnt/lustre /path/to/iozone file170
snode18 /mnt/lustre /path/to/iozone file180
snode17 /mnt/lustre /path/to/iozone file171
snode18 /mnt/lustre /path/to/iozone file181

遇到的问题及解决方法(P-Problem,C-Cause,R-Resolve)

P:安装完重启之后,系统无法启动。
C:因为启动分区太小,只有100M大小,而Lustre生成的initramfs太大,大概有65M,最后导致生成的文件不完整,所以无法启动;在lustre-module-version的安装过程中产生,会报文件写入错误。
R:调整分区大小比较困难,也不方便进行批量处理;就不是用单独的启动分区,把grub重新安装到/dev/sda上,卸载启动分区,把内核等文件复制到根文件系统的/boot目录下,修改grub.conf文件,直接通过根文件系统下的/boot目录中的内核进行启动。

P:安装完Lustre并成功启动后,在执行mount.lustre操作之后,就会断开了ssh连接。
C:主机上提示out of memory提示,并killing一大堆进程,至今没搞明白为什么会出现内存不足的问题,当时机器的配置是2G内存,我在虚拟机中实验时,设置1G的内存,也没有出现这个错误。
R:去除内核参数mem=2048M之后,内存变为了32G,一切就恢复正常了。

比较有创意的Idea

需要对/dev/sdb进行分区,就在一台机器上利用fdisk按要求分区后,拷贝出该硬盘前512字节启动分区内容:

1
dd if=/dev/sdb of=boot512.img bs=512 count=1

之后把这个文件写入其他机器的/dev/sdb硬盘,便可完成分区,这样便方便进行批量处理了:

1
dd if=boot512.img of=/dev/sdb bs=512 count=1

在用fdisk分完区后,在/dev/sdb#中并没有及时地反映出分区后的结果,此时运行partprobe /dev/sdb命令即可。

参考文献:

51CTO:Lustre-2.3的安装

这篇关于Lustre的安装与配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/841323

相关文章

mybatis映射器配置小结

《mybatis映射器配置小结》本文详解MyBatis映射器配置,重点讲解字段映射的三种解决方案(别名、自动驼峰映射、resultMap),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定... 目录select中字段的映射问题使用SQL语句中的别名功能使用mapUnderscoreToCame

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队