这是一篇来自青云 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 文件系统,非常适合数据备份、共享空间、容器持久存储和大数据分析等业务。