在腾讯云上安装和使用 JuiceFS 存储

JuiceFS 是一个云原生的企业级开源共享文件系统,广泛应用于大数据、企业级数据共享、Kubernetes 容器编排、AI 机器学习、Web 服务和内容管理、数据容灾备份等场景。它将对象存储作为大容量本地磁盘使用,为云上应用提供近乎无限的存储空间。与此同时,得益于其独特的技术架构,在存储和处理大规模数据时,性能通常高于本地存储。

另外,JuiceFS 具备跨云共享能力,如果你需要在多台位于不同云服务商的云服务器之间共享数据,只需在每一台云服务器上挂载同一个 JuiceFS 存储,它的数据强一致性设计,可以确保每台主机都能实时同步数据的变化。

本文将分享如何在腾讯云平台上安装和使用 JuiceFS 存储。

架构

如下图所示,JuiceFS 存储由数据库和对象存储共同驱动。存入 JuiceFS 的文件会按照一定的规则被拆分成固定大小的数据块存储在对象存储中,数据对应的元数据则会存储在数据库中。

元数据完全独立存储,对文件的检索和处理并不会直接操作对象存储中的数据,而是先在数据库中操作元数据,只有当数据发生变化的时候,才会与对象存储交互。

这样的设计可以有效缩减对象存储在请求数量上的费用,同时也能让我们显著感受到 JuiceFS 带来的性能提升。

三、对象存储 COS

JuiceFS 会将所有的数据都存储到对象存储中,它支持几乎所有的对象存储服务。但为了获得最佳的性能,当使用腾讯云 CVM 时,搭配腾讯云 COS 对象存储通常是最优选择。不过请注意,将 CVM 和 COS Bucket 选择在相同的地区,这样才能通过腾讯云的内网线路进行访问,不但延时低,而且不需要额外的流量费用。

TIPS:腾讯云对象存储 COS 提供的唯一访问地址同时支持内网和外网访问,当通过内网访问时,COS 会自动解析到内网 IP,此时产生的流量均为内网流量,不会产生流量费用。

当然,如果你愿意,也可以使用其他云平台提供的对象存储服务,但不推荐这样做。首先,通过腾讯云 CVM 访问其他云平台的对象存储要走公网线路,对象存储会产生流量费用,而且这样的访问延时相比也会更高,可能会影响 JuiceFS 的性能发挥。

腾讯云 COS 有不同的存储级别,由于 JuiceFS 需要与对象存储频繁交互,建议使用标准存储。你可以搭配 COS 资源包使用,降低对象存储的使用成本。

API 访问秘钥

腾讯云 COS 需要通过 API 进行访问,你需要准备访问秘钥,包括 Access Key IDAccess Key Secret点此查看获取方式。

安全建议:显式使用 API 访问秘钥可能导致密钥泄露,推荐为云服务器分配 CAM 服务角色。当一台 CVM 被授予 COS 操作权限以后,无需使用 API 访问秘钥即可访问 COS。

安装

我当前使用的是 Ubuntu Server 20.04 64 位系统,依次执行以下命令可以下载最新版本客户端。你也可以访问 JuiceFS GitHub Releases 页面选择其他版本。

在编写本文时,JuiceFS 的最新版本是 v0.15.2。

$ JFS_LATEST_TAG=$(curl -s https://api.github.com/repos/juicedata/juicefs/releases/latest | grep 'tag_name' | cut -d '"' -f 4 | tr -d 'v')
$ wget "https://github.com/juicedata/juicefs/releases/download/v${JFS_LATEST_TAG}/juicefs-${JFS_LATEST_TAG}-linux-amd64.tar.gz"

下载完成以后,解压程序到juice文件夹:

$ mkdir juice && tar -zxvf "juicefs-${JFS_LATEST_TAG}-linux-amd64.tar.gz" -C juice

将 JuiceFS 客户端安装到/usr/local/bin

$ sudo install juice/juicefs /usr/local/bin

执行命令,看到返回juicefs的命令帮助信息,代表客户端安装成功。

$ juicefs 
NAME:
   juicefs - A POSIX file system built on Redis and object storage.

USAGE:
   juicefs [global options] command [command options] [arguments...]

VERSION:
   0.15.2 (2021-07-07T05:51:36Z 4c16847)

COMMANDS:
   format   format a volume
   mount    mount a volume
   umount   unmount a volume
   gateway  S3-compatible gateway
   sync     sync between two storage
   rmr      remove directories recursively
   info     show internal information for paths or inodes
   bench    run benchmark to read/write/stat big/small files
   gc       collect any leaked objects
   fsck     Check consistency of file system
   profile  analyze access log
   status   show status of JuiceFS
   warmup   build cache for target directories/files
   dump     dump metadata into a JSON file
   load     load metadata from a previously dumped JSON file
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --verbose, --debug, -v  enable debug log (default: false)
   --quiet, -q             only warning and errors (default: false)
   --trace                 enable trace log (default: false)
   --no-agent              Disable pprof (:6060) and gops (:6070) agent (default: false)
   --help, -h              show help (default: false)
   --version, -V           print only the version (default: false)

COPYRIGHT:
   AGPLv3

JuiceFS 具有良好的跨平台兼容性,同时支持在 Linux、Windows 和 macOS 上使用。本文着重介绍 JuiceFS 在 Linux 系统上的安装和使用,如果你需要了解其他系统上的安装方法,请查阅文档

创建 JuiceFS 存储

JuiceFS 客户端安装好以后,现在就可以使用前面准备好的 Redis 数据库和 COS 对象存储来创建 JuiceFS 存储了。

严格意义上说,这一步操作应该叫做 “Format a volume”,即格式化一个卷。但考虑到有很多用户可能不了解或者不关心文件系统的标准术语,所以简单起见,我们就直白的把这个过程叫做“创建 JuiceFS 存储”。

以下命令使用 JuiceFS 客户端提供的format子命令创建了一个名为mystor的存储,即文件系统:

$ juicefs format \\
	--storage cos \\
	--bucket https://<your-bucket-name> \\
	--access-key <your-access-key-id> \\
	--secret-key <your-access-key-secret> \\
	redis://:<your-redis-password>@192.168.5.5:6379/1 \\
	mystor

选项说明:

  • --storage:指定对象存储类型,点此查看 JuiceFS 支持的对象存储。
  • --bucket:对象存储的 Bucket 域名。当使用腾讯云 COS 时,只需填写 bucket 名称即可,无需填写完整的域名,JuiceFS 会自动识别并补全地址。
  • --access-key--secret-key:访问对象存储 API 的秘钥对,点此查看获取方式。

Redis 6.0 身份认证需要用户名和密码两个参数,地址格式为redis://username:password@redis-server-url:6379/1。目前腾讯云数据库 Redis 版只提供 Reids 4.0 和 5.0 两个版本,认证身份只需要密码,在设置 Redis 服务器地址时只需留空用户名即可,例如:redis://:password@redis-server-url:6379/1

使用 RAM 角色绑定 CVM 时,创建 JucieFS 存储只需指定--storage--bucket两个选项,无需提供 API 访问秘钥。命令可以改写成:

$ juicefs format \\
	--storage cos \\
	--bucket https://juice-1250000025.cos.ap-shanghai.myqcloud.com \\
	redis://:<your-redis-password>@192.168.5.5:6379/1 \\
	mystor

看到类似下面的输出,代表文件系统创建成功了。

2021/07/30 11:44:31.904157 juicefs[44060] <INFO>: Meta address: redis://@192.168.5.5:6379/1
2021/07/30 11:44:31.907083 juicefs[44060] <WARNING>: AOF is not enabled, you may lose data if Redis is not shutdown properly.
2021/07/30 11:44:31.907634 juicefs[44060] <INFO>: Ping redis: 474.98µs
2021/07/30 11:44:31.907850 juicefs[44060] <INFO>: Data uses cos://juice-1250000025/mystor/
2021/07/30 11:44:32.149692 juicefs[44060] <INFO>: Volume is formatted as {Name:mystor UUID:dbf05314-57af-4a2c-8ac1-19329d73170c Storage:cos Bucket:https://juice-1250000025.cos.ap-shanghai.myqcloud.com AccessKey:AKIDGLxxxxxxxxxxxxxxxxxxZ8QRBdpkOkp SecretKey:removed BlockSize:4096 Compression:none Shards:0 Partitions:0 Capacity:0 Inodes:0 EncryptKey:}

挂载 JuiceFS 存储

文件系统创建完成,对象存储相关的信息会被存入数据库,挂载时无需再输入对象存储的 Bucket 和秘钥等信息。

使用 mount 子命令,将文件系统挂载到/mnt/jfs目录:

$ sudo juicefs mount -d redis://:<your-redis-password>@192.168.5.5:6379/1 /mnt/jfs

注意:挂载文件系统时,只需填写 Redis 数据库地址,不需要文件系统名称。如果使用 root 身份挂载文件系统,默认的缓存路径为/var/jfsCache,如果使用普通用户身份在家目录上挂载,则默认的缓存路径在 ~/.juicefs/cache

看到类似下面的输出,代表文件系统挂载成功。

2021/07/30 11:49:56.842211 juicefs[44175] <INFO>: Meta address: redis://@192.168.5.5:6379/1
2021/07/30 11:49:56.845100 juicefs[44175] <WARNING>: AOF is not enabled, you may lose data if Redis is not shutdown properly.
2021/07/30 11:49:56.845562 juicefs[44175] <INFO>: Ping redis: 383.157µs
2021/07/30 11:49:56.846164 juicefs[44175] <INFO>: Data use cos://juice-1250000025/mystor/
2021/07/30 11:49:56.846731 juicefs[44175] <INFO>: Disk cache (/var/jfsCache/dbf05314-57af-4a2c-8ac1-19329d73170c/): capacity (1024 MB), free ratio (10%), max pending pages (15)
2021/07/30 11:49:57.354763 juicefs[44175] <INFO>: OK, mystor is ready at /mnt/jfs

使用df命令,可以看到文件系统的挂载情况:

$ df -Th
文件系统           类型          容量   已用  可用   已用% 挂载点
JuiceFS:mystor   fuse.juicefs  1.0P   64K  1.0P    1% /mnt/jfs

文件系统挂载成功以后,现在就可以像使用本地硬盘那样,在/mnt/jfs目录中存储数据了。

多主机共享:JuiceFS 存储支持被多台云服务器同时挂载使用,你可以在其他 CVM 上安装 JuiceFS 客户端,然后使用redis://:<your-redis-password>@192.168.5.5:6379/1数据库地址挂载文件系统到每一台主机上。

查看文件系统状态

使用 JuiceFS 客户端的status子命令可以查看一个文件系统的基本信息和连接状态。

$ juicefs status redis://:<your-redis-password>@192.168.5.5:6379/1

2021/07/30 11:51:17.864767 juicefs[44196] <INFO>: Meta address: redis://@192.168.5.5:6379/1
2021/07/30 11:51:17.866619 juicefs[44196] <WARNING>: AOF is not enabled, you may lose data if Redis is not shutdown properly.
2021/07/30 11:51:17.867092 juicefs[44196] <INFO>: Ping redis: 379.391µs
{
  "Setting": {
    "Name": "mystor",
    "UUID": "dbf05314-57af-4a2c-8ac1-19329d73170c",
    "Storage": "cos",
    "Bucket": "https://juice-1250000025.cos.ap-shanghai.myqcloud.com",
    "AccessKey": "AKIDGLxxxxxxxxxxxxxxxxx8QRBdpkOkp",
    "BlockSize": 4096,
    "Compression": "none",
    "Shards": 0,
    "Partitions": 0,
    "Capacity": 0,
    "Inodes": 0
  },
  "Sessions": [
    {
      "Sid": 1,
      "Heartbeat": "2021-07-30T11:49:56+08:00",
      "Version": "0.15.2 (2021-07-07T05:51:36Z 4c16847)",
      "Hostname": "VM-5-6-ubuntu",
      "MountPoint": "/mnt/jfs",
      "ProcessID": 44175
    },
    {
      "Sid": 3,
      "Heartbeat": "2021-07-30T11:50:56+08:00",
      "Version": "0.15.2 (2021-07-07T05:51:36Z 4c16847)",
      "Hostname": "VM-5-6-ubuntu",
      "MountPoint": "/mnt/jfs",
      "ProcessID": 44185
    }
  ]
}

卸载 JuiceFS 存储

使用 JuiceFS 客户端提供的umount命令即可卸载文件系统,比如:

$ sudo juicefs umount /mnt/jfs

注意:强制卸载使用中的文件系统可能导致数据损坏或丢失,请务必谨慎操作。更多内容请参考官方文档

开机自动挂载

如果你不想每次重启系统都要重新手动挂载 JuiceFS 存储,可以设置自动挂载文件系统。

首先,需要将juicefs客户端重命名为mount.juicefs并复制到/sbin/目录:

$ sudo cp juice/juicefs /sbin/mount.juicefs

编辑/etc/fstab配置文件,新增一条记录:

redis://:<your-redis-password>@192.168.5.5:6379/1    /mnt/jfs       juicefs     _netdev,cache-size=20480     0  0

挂载选项中cache-size=20480代表分配 20GB 本地磁盘空间作为 JuiceFS 的缓存使用,请根据你实际的 CVM 硬盘容量去决定分配的缓存大小。一般来说,为 JuiceFS 分配更大的缓存空间,可以获得更好的性能表现。

你可以根据需要调整上述配置中的 FUSE 挂载选项,更多内容请查阅文档

注意:请将上述配置文件中的 Redis 地址、挂载点以及挂载选项,替换成你实际的信息。

总结

JucieFS 是一个面向云的高性能企业级文件系统,目前多被用在大数据分析、企业级数据共享、Kubernetes 容器编排、数据容灾备份等业务场景。受限于主题和篇幅,本文旨在抛砖引玉,概略的介绍在腾讯云 CVM 上结合云数据库 Redis 版和 COS 对象存储创建 JuiceFS 文件系统的基本方法。

你可以访问 JuiceFS GitHub 仓库,了解更多 JuiceFS 的高级主题。

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
在腾讯云上安装和使用 JuiceFS 存储
JuiceFS 是一个云原生的企业级开源共享文件系统,广泛应用于大数据、企业级数据共享、Kubernetes 容器编排、AI 机器学习、Web 服务和内容管理、...
<<上一篇
下一篇>>