如何设置 Lustre 文件系统并在其上运行 PostgreSQL

来源:这里教程网 时间:2026-03-14 23:20:28 作者:

概述

与 PostgreSQL 类似,Lustre 文件系统也是一个开源项目,始于大约 20 年前。根据 维基百科,Lustre 文件系统是一种并行分布式文件系统,专为大规模集群计算设计,支持原生远程直接内存访问(RDMA)。Lustre 文件系统具有可扩展性,可用于多个计算机集群,包含数万个客户端节点、数十 PB 的存储容量(分布在数百台服务器上),以及超过 1TB/s 的聚合 I/O 吞吐量。本文将解释如何在 CentOS 7 上设置一个简单的 Lustre 文件系统并在其上运行 PostgreSQL。

Lustre 文件系统

为了提供并行文件访问和提高 I/O 性能,Lustre 文件系统将元数据服务与数据服务分开。从高层次架构的角度来看,Lustre 文件系统包含以下基本组件:

  • 管理服务器(MGS):提供文件系统配置信息,通知客户端文件系统配置的变化,并在 Lustre 恢复过程中发挥作用。
  • 元数据服务器(MDS):管理文件系统命名空间,为客户端提供元数据服务,例如文件名查找、目录信息、文件布局和访问权限。
  • 元数据目标(MDT):存储元数据信息,并保存文件系统的根信息。
  • 对象存储服务器(OSS):存储文件数据对象,并使文件内容对 Lustre 客户端可用。
  • 对象存储目标(OST):存储用户文件的内容。
  • Lustre 客户端:挂载 Lustre 文件系统,使命名空间的内容对用户可见。
  • Lustre 网络(LNet):用于 Lustre 客户端与服务器之间通信的网络协议,支持原生 RDMA。

    如果您想了解 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 服务器进行验证。希望能在您评估分布式文件系统时提供帮助。

  • 相关推荐