概述
与 PostgreSQL 类似,Lustre 文件系统也是一个开源项目,始于大约 20 年前。根据 维基百科,Lustre 文件系统是一种并行分布式文件系统,专为大规模集群计算设计,支持原生远程直接内存访问(RDMA)。Lustre 文件系统具有可扩展性,可用于多个计算机集群,包含数万个客户端节点、数十 PB 的存储容量(分布在数百台服务器上),以及超过 1TB/s 的聚合 I/O 吞吐量。本文将解释如何在 CentOS 7 上设置一个简单的 Lustre 文件系统并在其上运行 PostgreSQL。
Lustre 文件系统
为了提供并行文件访问和提高 I/O 性能,Lustre 文件系统将元数据服务与数据服务分开。从高层次架构的角度来看,Lustre 文件系统包含以下基本组件:
如果您想了解 Lustre 的更多细节,可以参考 理解 Lustre 内部结构。
在 CentOS 7 上设置 Lustre
为了在 PostgreSQL 上设置一个简单的 Lustre 文件系统,我们需要 4 台机器:MGS-MDS-MDT 服务器、OSS-OST 服务器、Lustre 客户端 1 和客户端 2(PostgreSQL 服务器)。在本文中,我使用了三台 CentOS 7 虚拟机,网络设置如下:
MGS-MDS-MDT: 10.10.1.1 OSS-OST: 10.10.1.2 Client1/PG Server: 10.10.1.10 Client2/PG Server: 10.10.1.20
安装 Lustre
为了避免处理防火墙和 SELinux 策略问题,我禁用了它们,如下所示。
在
/etc/selinux/config中设置
SELINUX=disabled,并运行以下命令:
systemctl stop firewalld systemctl disable firewalld
将 Lustre 发布信息添加到
/etc/yum.repos.d/lustre.repo:
[lustre-server] name=CentOS-$releasever - Lustre baseurl=https://build.whamcloud.com/job/lustre-master/arch=x86_64%2Cbuild_type=server%2Cdistro=el7%2Cib_stack=inkernel/lastStableBuild/artifact/artifacts/ baseurl=https://downloads.whamcloud.com/public/lustre/latest-release/el7/server/ gpgcheck=0 [e2fsprogs] name=CentOS-$releasever - Ldiskfs baseurl=https://build.whamcloud.com/job/e2fsprogs-master/arch=x86_64%2Cdistro=el7/lastStableBuild/artifact/_topdir/RPMS/ baseurl=https://downloads.whamcloud.com/public/e2fsprogs/latest/el7/ gpgcheck=0 [lustre-client] name=CentOS-$releasever - Lustre baseurl=https://build.whamcloud.com/job/lustre-master/arch=x86_64%2Cbuild_type=client%2Cdistro=el7%2Cib_stack=inkernel/lastStableBuild/artifact/artifacts/ baseurl=https://downloads.whamcloud.com/public/lustre/latest-release/el7.9.2009/client/ gpgcheck=0
然后更新 yum 并安装文件系统工具
e2fsprogs 以处理 ext4:
yum update && yum upgrade -y e2fsprogs
如果没有错误,则使用以下命令安装 Lustre 服务器和工具:
yum install -y lustre-tests
设置 LNet 网络
根据您的网络接口设置,相应地添加 LNet 配置。例如,我的三台 CentOS 7 虚拟机都具有网络接口
enp0s8,因此我在
/etc/modprobe.d/lnet.conf中添加了配置
options lnet networks="tcp0(enp0s8)"作为我的 Lustre LNet 网络配置。
然后,我们需要将 LNet 驱动加载到内核,并通过以下命令启动 LNet 网络:
modprobe lustre lsmod | grep lustre modprobe lnet lsmod | grep lnet lctl network up
您可以使用命令
lctl list_nids检查 LNet 网络是否在您的以太网接口上运行,您应该看到类似以下的输出:
10.10.1.1@tcp
您可以通过运行命令
lctl ping 10.10.1.2@tcp1尝试通过 LNet 网络 ping 其他 Lustre 服务器。如果 LNet 网络正常工作,您应该看到以下输出:
12345-0@lo 12345-10.10.1.2@tcp
设置 MGS/MDS/MDT 和 OSS/OST 服务器
为了设置 MGS/MDS/MDT 服务器的存储,我添加了一个专用虚拟磁盘(/dev/sdb),创建了一个分区(/dev/sdb1)并将其格式化为 ext4:
fdisk /dev/sdb ... mkfs -t ext4 /dev/sdb1
您需要在 OSS/OST 服务器上重复相同的过程以添加实际文件存储磁盘。
如果一切顺利,就可以开始在 Lustre 服务器上挂载磁盘了。首先,我们需要通过以下命令在 MGS/MDS/MDT 服务器上挂载磁盘:
mkfs.lustre --reformat --fsname=lustrefs --mgs --mdt --index=0 /dev/sdb1 mkdir /mgsmdt_mount mount -t lustre /dev/sdb1 /mgsmdt_mount
其次,使用以下命令在 OSS/OST 服务器上挂载磁盘:
mkfs.lustre --reformat --ost --fsname=lustrefs --mgsnode=10.10.1.1@tcp1 --index=0 /dev/sdb1 mkdir /ostoss_mount mount -t lustre /dev/sdb1 /ostoss_mount
设置 Lustre 客户端
在 Lustre 服务器设置完成后,我们可以通过以下命令在客户端上简单地挂载 Lustre 文件系统:
mkdir /mnt/lustre mount -t lustre 10.10.1.1@tcp0:/lustrefs /mnt/lustre
如果没有错误,您可以通过在一个客户端上创建一个文本文件并输入一些信息,然后在另一个客户端上检查来验证。
在 Lustre 文件系统上设置 PostgreSQL
由于关于如何在 CentOS 上设置 PostgreSQL 的教程很多,我将跳过这部分。假设您已经从“官方发布”安装了 PostgreSQL 或自己从源代码编译,然后从客户端 1 运行以下测试:
initdb -D /mnt/lustre/pgdata pg_ctl -D /mnt/lustre/pgdata -l /tmp/logfile start create table test(a int, b text); insert into test values(generate_series(1, 1000), 'helloworld'); select count(*) from test; pg_ctl -D /mnt/lustre/pgdata -l /tmp/logfile stop
然后从客户端 2 运行以下命令:
pg_ctl -D /mnt/lustre/pgdata -l /tmp/logfile start select count(*) from test; pg_ctl -D /mnt/lustre/pgdata -l /tmp/logfile stop
通过上述简单测试,您可以确认客户端 1 创建的表和插入的记录存储在远程 Lustre 文件系统上。如果客户端 1 上的 PostgreSQL 服务器停止,您可以在客户端 2 上启动 PostgreSQL 服务器并查询客户端 1 插入的所有记录。
总结
本文解释了如何在本地环境中设置并行分布式文件系统 Lustre,并使用 PostgreSQL 服务器进行验证。希望能在您评估分布式文件系统时提供帮助。
