如何设置 Lustre 文件系统并在其上运行 PostgreSQL
概述
与 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 服务器进行验证。希望能在您评估分布式文件系统时提供帮助。