社区案例 | 传统应用挂载对象存储,满足集群高并发的大数据分析场景

2021-04-19
QingStor 资深攻城狮 xuanwo

这是一篇来自青云 QingCloud 工程师的案例分享,介绍了如何利用 JuiceFS 对接青云对象存储服务 QingStor 实现一个高性能分布式文件系统。

对象存储为用户提供了可无限扩展的通用数据存储服务,具有安全可靠、简单易用、高性能、低成本等特点。这使得对象存储成为海量数据场景的最佳选择。

为了使用对象存储,应用需要基于 API 或 SDK 开发,但是很多使用本地目录访问数据的传统应用并不具备修改的条件。

因此可以通过挂载工具,比如 S3fs 等,将对象存储挂载为本地文件系统,使得传统应用对接上对象存储。但是 S3fs 等方案不支持多个客户端同时写入,这无法满足大部分大数据应用多节点部署的要求。

本文将介绍基于对象存储服务的分布式 POSIX 文件系统 —— JuiceFS,能够很好的解决上文的问题。

它将 Metadata 存储在外部的 Key-Value 服务中(比如 Redis),实际数据存储在对象存储服务上,集群内的应用可以挂载同一个目录并获得统一的视图, 支持上千个客户端同时并发读写同一个目录 。

目前 JuiceFS 已经完成了与 QingStor 对象存储服务的对接。本文将会以 Ubuntu 平台为例讲解如何基于 QingStor 对象存储来搭建 JuiceFS 集群,并展示相应的测试结果。

部署

下载 JuiceFS

# curl -ssL 
https://github.com/juicedata/juicefs/releases/download/v0.11.0/juicefs-0.11.0-linux-amd64.tar.gz > juicefs.tar.gz
# tar -xvf juicefs.tar.gz && cd juicefs

启动 Redis

# apt install redis

可以通过 systemd 来查看 redis 运行的状态

# systemctl status redis.service

创建 Volume,使用 JuiceFS 进行格式化

# ./juicefs format \
--storage qingstor \
    --bucket https://<bucket_name>.pek3b.qingstor.com \
    --access-key <access_key> \
    --secret-key <secret_key> \
    <redis-url> test

挂载 Volume,使用 JuiceFS 将对象存储挂载到 ~/jfs

# ./juicefs mount -d <redis-url> ~/jfs

该步骤在多个节点上重复执行,就可以建立起集群,只要求这些节点都访问同一个 Redis 节点。

现在我们已经创建好了一个 JuiceFS 集群,这个集群的架构如上图所示。

Node 1~3 是部署了 JuiceFS 的应用节点。此外我们部署了一个独立的 Redis 服务作为 JuicsFS 的 metadata 服务,所有的实际数据会写入 QingStor 对象存储中。

接下来我们就在这个目录里创建一些文件以进行测试,对比测试下 JuiceFS 的效果。

测试

测试一:在单个节点上创建文件

Node 1

root@i-8cvklc58:~/jfs# dd if=/dev/urandom of=example bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 42.1686 s, 25.5 MB/s

测试二:在不同的节点上并发创建文件

Node 1

root@i-ywbaq5jc:~/jfs# dd if=/dev/urandom of=example1 bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 42.1694 s, 25.5 MB/s

Node 2

root@i-8cvklc58:~/jfs# dd if=/dev/urandom of=example2 bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 42.1925 s, 25.4 MB/s

Node 3

root@i-7gksnd1q:~/jfs# dd if=/dev/urandom of=example3 bs=1M count=10241024+0 records in1024+0 records out1073741824 bytes (1.1 GB, 1.0 GiB) copied, 42.1689 s, 25.5 MB/s

从测试结果中可以发现,JuiceFS 的性能没有受到多个节点并发的影响。我们可以在多个节点上并发写入文件,充分发挥对象存储并发吞吐高的特点,这对大数据应用来说是非常友好的。

查看 JuiceFS 写入的数据

需要注意的是,与 S3FS 不同,由于 JuiceFS 选择了在 Redis 服务中维护文件系统的 metadata,因此我们在 QingStor 对象存储中看到的是经过 JuiceFS 切分后的 chunk 文件而不是写入的原始文件。

最后

现在,青云QingCloud 公有云与 JuiceFS 联合推出了完全托管的分布式 POSIX 文件系统,非常适合数据备份、共享空间、容器持久存储和大数据分析等业务。

相关博客

如何判断数据库和对象存储是否被 JuiceFS 使用?

2024-08-16
本文通过两个场景分别介绍了如何判断已有的数据库和对象存储是否被 JuiceFS 使用,掌握了这些技巧可以更好地管理 JuiceFS 文件系统,避免误删、误操作等问题。

基于 JuiceFS 的大数据平台上云:存储成本省 85%,性能媲美 HDFS

2024-01-10
本案例来自社区一家从事金融科技的用户。该用户在进行数据平台上云时,首个站点采用了与本地数据中心(IDC)相同的架构,在云主机上构建了基于 Hadoop 的技术栈。随着业务的迅速增长和更多站点的上线,…

POSIX 真的不适合对象存储吗?

2023-10-24
随着云计算、大数据、人工智能等技术的发展,促使很多存储产品在对象存储的基础上去实现 POSIX 接口来满足需求,组合的性能到底怎么样。

小米云原生文件存储平台化实践:支撑 AI 训练、大模型、容器平台多项业务

2023-09-22
小米存储团队自 2021 年开始启动了文件存储项目,基于 JuiceFS 构建了一个文件存储平台化产品,并通过 CSI Driver 组件提供了云原生存储的能力,以满足上述各种业务场景对文件存储的需…