JuiceFS 生产集群部署
-
官方文档: github.com/juicedata/juicefs/blob/main/docs/en/quick_start_guide.md
-
官方压测: vs efs/goofys/hdfs/nfs - juicefs.com/docs/zh/cloud/metadata_performance_comparison
1. 模式 1 - 客户端共享存储 (NAS)
- 集群拓扑
IP | Description | Mount Point |
---|---|---|
10.65.30.232 | juicefs client (nas) | /mnt/disk1/jfs1 /mnt/disk1/jfs2 |
10.65.30.233 | juicefs client (nas) | /mnt/disk1/jfs1 /mnt/disk1/jfs2 |
10.65.30.236 | juicefs meta-server (redis:63791 / minio:9000) | --- |
1.1 依赖服务
这里选用 redis 作为元数据存储服务。
- 快速 redis 单机部署
mkdir -p /mnt/disk1/juicefs_redis
d run -d --name juicefs_redis1 \
-v /mnt/disk1/juicefs_redis/:/data \
-p 63791:6379 \
--restart always \
redis:6.2.6 \
redis-server --appendonly yes
- 快速 MinIO 单机部署
mkdir -p /mnt/disk1/juicefs_minio
d run -d --name juicefs_minio1 \
-p 9000:9000 \
-p 9900:9900 \
-v /mnt/disk1/juicefs_minio:/data \
--restart always \
minio/minio:minio-RELEASE.2021-11-24T23-19-33Z \
server /data --console-address ":9900"
- 访问控制台
http://127.0.0.1:9900/dashboard ,默认账号/密码: minioadmin/minioadmin
1.2 配置 juiceFS
均在目标集群节点上执行,即客户端。
1.2.1 创建 juiceFS 文件系统
- 在创建 JuiceFS 文件系统时,您需要指定用于存储元数据的
Redis
数据库和用于存储实际数据的对象存储。以下命令将创建一个名为 的JuiceFS
文件系统pics1
,使用1
Redis
中的数据库存储元数据,并使用pics1
MinIO
中创建的存储桶存储实际数据:
# 第1个挂载点的存储桶初始化
juicefs format \
--storage minio \
--bucket http://10.65.30.236:9000/pics1 \
--access-key minioadmin \
--secret-key minioadmin \
redis://10.65.30.236:63791/1 pics1
# 第2个挂载点的存储桶初始化
juicefs format \
--storage minio \
--bucket http://10.65.30.236:9000/pics2 \
--access-key minioadmin \
--secret-key minioadmin \
redis://10.65.30.236:63791/2 pics2
- 执行该命令后,会看到类似如下的输出,说明
JuiceFS
文件系统创建成功。
2021/04/29 23:01:18.352256 juicefs[34223] <INFO>: Meta address: redis://10.65.30.236:63791/1
2021/04/29 23:01:18.354252 juicefs[34223] <INFO>: Ping redis: 132.185µs
2021/04/29 23:01:18.354758 juicefs[34223] <INFO>: Data use minio://10.65.30.236:9000/pics1/pics1/
2021/04/29 23:01:18.361674 juicefs[34223] <INFO>: Volume is formatted as {Name:pics UUID:9c0fab76-efd0-43fd-a81e-ae0916e2fc90 Storage:minio Bucket:http://10.65.30.236:9000/pics1 AccessKey:minioadmin SecretKey:removed BlockSize:4096 Compression:none Partitions:0 EncryptKey:}
-
注:您可以根据需要创建任意数量的 JuiceFS 文件系统。但需要注意的是,每个Redis数据库中只能创建一个文件系统。例如,当你想创建另一个名为 的文件系统时
memory
,你必须使用Redis
中的另一个数据库,例如No.2
,即redis://10.65.30.236:63791/2
. -
注:如果不指定
--storage
选项,JuiceFS 客户端将使用本地磁盘作为数据存储。使用本地存储时,JuiceFS 只能在本地单机上使用,不能被网络中的其他客户端挂载。单击此处了解详细信息。
1.2.2 挂载文件系统
JuiceFS
文件系统创建完成后,就可以挂载到操作系统上使用了。以下命令将pics
文件系统挂载到/mnt/disk1/jfs1
和/mnt/disk1/jfs2
目录中。
# 第1个挂载点
sudo juicefs mount -d redis://default:default@10.65.30.236:63791/1 /mnt/disk1/jfs1
# 第2个挂载点
sudo juicefs mount -d redis://default:default@10.65.30.236:63791/2 /mnt/disk1/jfs2
- 执行该命令后,会看到类似如下的输出,说明系统已经成功挂载了 JuiceFS 文件系统。
2021/04/29 23:22:25.838419 juicefs[37999] <INFO>: Meta address: redis://default@127.0.0.1:6379/1
2021/04/29 23:22:25.839184 juicefs[37999] <INFO>: Ping redis: 67.625µs
2021/04/29 23:22:25.839399 juicefs[37999] <INFO>: Data use minio://127.0.0.1:9000/pics/pics/
2021/04/29 23:22:25.839554 juicefs[37999] <INFO>: Cache: /var/jfsCache/9c0fab76-efd0-43fd-a81e-ae0916e2fc90 capacity: 1024 MB
2021/04/29 23:22:26.340509 juicefs[37999] <INFO>: OK, pics is ready at /mnt/disk1/jfs1
- 挂载完成后,就可以访问
/mnt/disk1/jfs1
和/mnt/disk1/jfs2
目录下的文件了。可以执行df
命令查看JuiceFS
文件系统的挂载状态:
$ df -Th
Filesystem Type Size Used Avail Use% Mounted on
JuiceFS:pics1 fuse.juicefs 1.0P 64K 1.0P 1% /mnt/disk1/jfs1
JuiceFS:pics2 fuse.juicefs 1.0P 64K 1.0P 1% /mnt/disk1/jfs2
- 注意:默认情况下,JuiceFS 的缓存位于
/var/jfsCache
目录中。为了获得该目录的读写权限,sudo
这里使用该命令以管理员权限挂载JuiceFS
文件系统。普通用户读写时/mnt/disk1/jfs1
和/mnt/disk1/jfs2
,请为其分配相应的权限。
1.2.3 开机自动挂载 JuiceFS
- 将
juicefs
客户端重命名为mount.juicefs
并将其复制到/sbin/
目录中:
sudo cp /usr/local/bin/juicefs /sbin/mount.juicefs
-
注意:在执行上述命令之前,我们假设
juicefs
客户端程序已经在/usr/local/bin
目录中。也可以juicefs
直接从下载的压缩包中解压一份程序,按照上述要求重命名,复制到/sbin/
目录下即可。 -
编辑
/etc/fstab
配置文件,另起一行,按照如下格式添加一条记录:
<META-URL> <MOUNTPOINT> juicefs _netdev[,<MOUNT-OPTIONS>] 0 0
-
请
<META-URL>
以 的格式替换为实际的Redis数据库地址redis://<user>:<password>@<host>:<port>/<db>
,例如:redis ://localhost:6379/1
。 -
请替换
<MOUNTPOINT>
为文件系统的实际挂载点,例如:/jfs
. -
如有需要,请替换
[,<MOUNT-OPTIONS>]
为实际要设置的挂载选项,多个选项用逗号分隔。 -
例如:
redis://localhost:6379/1 /jfs juicefs _netdev,max-uploads=50,writeback,cache-size=2048 0 0
1.2.4 卸载 juiceFS 文件系统
- 正常卸载
sudo juicefs umount /mnt/disk1/jfs1
-
提示:执行该
juicefs umount -h
命令可获取卸载命令的详细帮助信息。 -
卸载失败
2021-05-09 22:42:55.757097 I | fusermount: failed to unmount /mnt/disk1/jfs1: Device or resource busy
exit status 1
- 这可能是因为某些程序正在文件系统中读取和写入文件。为保证数据安全,首先应检查文件系统中有哪些程序在与文件进行交互(例如通过lsof命令),并尝试结束它们之间的交互,然后再次执行卸载命令。
风险提示:以下内容中包含的命令可能会导致文件损坏或丢失,请谨慎使用!
当然,您也可以在 unmount 命令中添加--forceor-f参数来强制卸载文件系统,但是您必须承担可能带来的灾难性后果:
sudo juicefs umount --force /mnt/disk1/jfs1
您也可以使用以下fusermount
命令卸载文件系统:
sudo fusermount -u /mnt/disk1/jfs1