Kubernetes,  Operation

JuiceFS 生产集群部署

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

留言

您的电子邮箱地址不会被公开。