专栏首页TVTV.FUN在腾讯云上安装和使用 JuiceFS 存储
原创

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

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

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

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

架构

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

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

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

JuiceFS 架构图

准备

通过前面的架构描述,可以知道 JuiceFS 需要搭配数据库和对象存储一起使用。这里我们直接使用腾讯云的 CVM 云服务器,结合云数据库和 COS 对象存储。

在创建云计算资源时,尽量选择在相同的区域,这样可以让资源之间通过内网线路相互访问,避免使用公网线路产生额外的流量费用。

一、云服务器 CVM

JuiceFS 对服务器硬件没有特殊要求,一般来说,云平台上最低配的云服务器也能稳定使用 JuiceFS,通常你只需要选择能够满足自身业务的配置即可。

需要特别说明的是,你不需要为使用 JuiceFS 重新购买服务器或是重装系统,JuiceFS 没有业务入侵性,不会对你现有的系统和程序造成任何的干扰,你完全可以在正在运行的服务器上安装和使用 JuiceFS。

JuiceFS 默认会占用不超过 1GB 的硬盘空间作为缓存,可以根据需要调整缓存空间的大小。该缓存是客户端与对象存储之间的一个数据缓冲层,选择性能更好的云盘,可以获得更好的性能表现。

在操作系统方面,腾讯云 CVM 提供的所有操作系统都可以安装 JuiceFS。

本文使用的 CVM 配置如下:

服务器配置

CPU

1 核

内存

2 GB

存储

50 GB

操作系统

Ubuntu Server 20.04 64位

地域

上海五区

二、云数据库

JuiceFS 会将数据对应的元数据全部存储在独立的数据库中,目前已开放支持的数据库有 Redis、MySQL、PostgreSQL、TiKV 和 SQLite。

根据数据库类型的不同,带来的元数据性能和可靠性表现也各不相同。比如 Redis 是完全运行在内存上的,它能提供极致的性能,但运维难度较高,可靠性相对低。而 MySQL、PostgreSQL 是关系型数据库,性能不如 Redis,但运维难度不高,可靠性也有一定的保障。SQLite 是单机单文件关系型数据库,性能较低,也不适合用于大规模数据存储,但它免配置,适合单机少量数据存储的场景。

如果只是为了评估 JuiceFS 的功能,你可以在 CVM 云服务器手动搭建数据库使用。当你要在生产环境使用 JucieFS 时,如果没有专业的数据库运维团队,腾讯云的云数据库服务通常是更好的选择。

当然,如果你愿意,也可以使用其他云平台上提供的云数据库服务。但在这种情况下,你只能通过公网访问云数据库,也就是说,你必须向公网暴露数据库的端口,这存在极大的安全风险,最好不要这样使用。

如果必须通过公网访问数据库,可以通过云数据库控台提供的白名单功能,严格限制允许访问数据库的 IP 地址,从而提升数据的安全性。从另一个角度说,如果你通过公网无法成功连接云数据库,那么可以检查数据库的白名单,检查是不是该设置限制了你的访问。

数据库

Redis

MySQL、PostgreSQL

SQLite

性能

适中

运维门槛

适中

可靠性

适中

应用场景

海量数据、分布式高频读写

海量数据、分布式中低频读写

少量数据单机中低频读写

注意:如果使用 JuiceFS 的托管服务,则无需单独准备数据库。

本文使用了云数据库 TencentDB Redis,通过 VPC 私有网络与 CVM 云服务器交互访问:

Redis 版本

5.0 社区版

实例规格

1GB (1主1副)

连接地址

192.168.5.5:6379

可用区

上海五区

注意,数据库的连接地址取决于你创建的 VPC 网络设置,创建 Redis 实例时会自动在你定义的网段中获取地址。

三、对象存储 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 的高级主题。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 几种在多台云服务器之间共享数据的方法

    在我们日常的运维工作中,经常会涉及到需要在多台云服务器之间共享数据的情况。如果都在同一个局域网,那么使用 SMB/CIFS、NFS 等文件级共享协议就可以。但要...

    谈笑有Herald
  • 基于 JuiceFS 搭建 Milvus 分布式集群

    贾晶晶,Zilliz 数据工程师 & 高昌健,Juicedata 解决方案架构师,十年互联网行业从业经历,曾在知乎、即刻、小红书多个团队担任架构师职位,专注于分...

    Zilliz RDS
  • 七个“神器”,保护好数据库,让删库无处遁形!

    当前,数据安全受到多方面的威胁。有来自系统软硬件的非人为故障,有运维工程师的误操作,甚至是黑客或内部人员的恶意删除。2017年1月31日,全球最大的代码托管服务...

    芋道源码
  • JuiceFS 源码阅读-上

    最近研究文件系统,把近期比较火的JuiceFS代码翻出来看了一下,研究为啥其性能要比CephFS要好。

    用户1260683
  • 在腾讯云CVM上安装和配置Dropbox

    Dropbox允许存储您的文档,是Dropbox公司的线上存储服务,通过云计算实现互联网上的文件同步,用户可以存储并共享文件和文件夹。Dropbox提供免费和收...

    编程男孩
  • 在腾讯云CVM上安装Apache

    Apache HTTP服务器是世界上使用最广泛的Web服务器。它提供了许多强大的功能,包括可动态加载的模块,强大的媒体支持以及与其他流行软件的广泛集成。

    一步
  • 在centos中使用cosfs腾讯云免费存储

    腾讯云每个月提供50G的存储空间,10G的下行流量,免费的上行流量。最好的地方在于提供了基于fuse的文件系统,可以将对象存储映射为本地文件,非常适合于存储有限...

    羽翰尘
  • 腾讯云主机安装COSFS工具并使用COS对象存储

    对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问...

    yuanfan2012
  • 如何在腾讯云上安装Cloud Foundry

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • 在腾讯云CVM上安装熟悉Node.js

    Node.js是一个开源JavaScript运行环境,用于轻松构建服务器端和网络应用程序。该应用程序可在Linux,OS X,FreeBSD和Windows上运...

    黑色技术
  • 如何在腾讯云上安装Cloud Foundry

    Cloud Foundry是VMware推出的业界第一个开源PaaS云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用...

    Jerry Wang
  • 腾讯云使用kubeadm安装k8s

    k8s是现在最热门的技术之一。常混在技术圈的你,是否有种蠢蠢欲动的感觉,却因k8s环境的安装复杂性,却放弃。本篇文章将对k8s的安装进行展开。

    暮雨
  • 腾讯云携手Commvault,为云上用户提供安全存储服务

    11月2日获悉,腾讯云对象存储COS近日正式通过Commvault备份软件标准化测试,并获得官方认证。

    云存储
  • 【玩转腾讯云】在linux上安装mbgl-renderer

    这个是我们组大佬找到的一种方法。为了应对客户提出的想将看到的前端界面截图保存并做成word文档保存的需求。

    Ezio4396
  • 静态网站在腾讯云上的托管

    可以把静态网站中的各类资源,如图片、音视频、脚本文件等内容,可以存放至腾讯云对象存储(COS),把网站逻辑部署至腾讯云服务器(CVM)。当用户向网站发起访问时,...

    云加创业小助手
  • 腾讯云COS对象存储的简单使用

    叮当哥之前买了一年的腾讯云服务器,昨日偶然发现腾讯云送了叮当哥半年的cos对象存储服务器,于是就撸起袖子传了几张珍藏的大图上去,现将其上传的简单...

    宋先生
  • 在腾讯云上使用自建DNS

    在腾讯云上使用自建DNS , 这是一个非常非常非常硬的需求。非常多的程序模块要求,通过DNS解析去访问调用,但是,当你把dns改为自己的,接着腾讯云提供的套件服...

    莫韵
  • 【玩转腾讯云】使用腾讯云对象存储快速部署网站

    对象存储网址为 https://console.cloud.tencent.com/cos

    代码哈士奇
  • 腾讯云服务器配置不用愁 只需这几步

    作为云计算服务的重要组成部分,云服务器以其简单高效、安全可靠、弹性扩展的特性成为核心力量,构建了包括计算、网络、存储在内的综合服务平台。以腾讯云服务器为例,CV...

    用户5907249

扫码关注云+社区

领取腾讯云代金券