当前位置: 首页 > news >正文

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

http://www.dtcms.com/a/353469.html

相关文章:

  • 设计模式9-责任链模式
  • UDC否定响应码学习
  • 未成功:使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)
  • 《StarRocks、Doris、ClickHouse 深度对比:三大 OLAP 引擎的优劣与应用场景》
  • go的实现arp客户端
  • 《方法论》--笛卡尔
  • 【学习笔记】非异步安全函数(禁止在信号处理中调用)
  • 雷卯针对香橙派Orange Pi 4开发板防雷防静电方案
  • 【Golang】 项目启动方法
  • Android12 user版本默认开启adb调试
  • centos7安装java mysql redis nginx
  • docker 所有常用命令,配上思维导图,加图表显示
  • 713 乘积小于k的子数组
  • Mysql数据挂载
  • Leetcode+Java+动态规划IV
  • electron离线开发环境变量ELECTRON_OVERRIDE_DIST_PATH
  • [MT6835] MT6835开启secureboot导致写入分区提示Security deny for [customer].
  • 【图像算法 - 25】基于深度学习 YOLOv11 与 OpenCV 实现人员跌倒识别系统(人体姿态估计版本)
  • 达梦数据库配置文件-COMPATIBLE_MODE
  • LangChain4j入门一:LangChain4j简介及核心概念
  • 路由基础(一):IP地址规划
  • 基于单片机空调温度控制测温ds18b20系统Proteus仿真(含全部资料)
  • React 组件命名规范:为什么必须大写首字母蛊傲
  • HarmonyOS安全开发实战:一套好用的数据加密方案
  • SQL Server 批量插入脚本
  • 中資券商櫃台系統搭建與開發技術分析
  • AI 大模型 “幻觉” 难题:为何会 “一本正经地说错话”,如何让它更靠谱?
  • 基于Cursor AI IDE的Vue3留言板系统实战:从零搭建到智能优化全流程
  • java数据类型获取长度方式总结
  • 【C++】C++11新特性第一弹(列表初始化、新式声明、范围for和STL中的变化)