JuiceFS v1.0 beta3 发布,支持 etcd、Amazon MemoryDB、Redis Cluster
JuiceFS v1.0 beta3 在元数据引擎方面继续增强,新增 etcd 支持小于 200 万文件的使用场景,相比 Redis 可以提供更好的可用性和安全性。同时支持了 Amazon MemoryDB for Redis 和 Redis Cluster。至此,JuiceFS 支持的元数据引擎有:
- Redis:包括单机、Sentinel 和 Cluster 模式,适合小于 1 亿文件,同时追求高性能的场景。基于 AOF 的异步复制有少量数据丢失的风险,Amazon MemoryDB for Redis 使用同步数据复制,数据安全性更高;
- 关系型数据库:包括 MySQL、MariaDB、PostgreSQL,适合数据安全要求高,性能要求不高的场景;
- TiKV:适合海量文件(1 亿以上),对性能与数据安全都有高要求的场景,但运维门槛比前面的方案高;
- etcd:适合小于 200 万文件并且可用性与数据安全要求高的场景;
- 嵌入式数据库:包括 BadgerDB 和 SQLite,适合不需要多机访问的场景使用。
除了元数据引擎的升级,JuiceFS S3 网关也提供了多租户、权限设置等高级功能,同时支持了非 UTF-8 编码的文件名。
本次更新共有 22 位社区贡献者参与贡献了超过 240 次提交,感谢每一位的付出,也欢迎正在读文章的你参与到 JuiceFS 社区中来。
下面,来为你解读一下 JuiceFS v1.0 beta3 的详细变化。
新增 etcd 元数据引擎

etcd 是一个数据可靠的分布式 KV 存储系统,在 Kubernetes 中广泛使用,etcd 的数据修改会同步写到磁盘上,保证数据安全,通过 Raft 共识算法实现数据复制和故障切换,实现高可用。相比使用异步落盘和异步复制的 Redis 有更好的数据安全性和可用性。
但 etcd 能够支撑的数据规模比较有限,从实际测试来看,小于 200 万文件时,是个不错的选择。
使用方法与其他引擎类似,协议头为 etcd://,例如:
# 创建文件系统
$ juicefs format etcd://localhost:2379/myjfs jfs-etcd
# 挂载文件系统
$ juicefs mount -d etcd://localhost:2379/myjfs /mnt/jfs
关于 etcd 的性能表现,请查看《元数据引擎性能测试文档》。
支持 Redis Cluster 和 Amazon MemoryDB for Redis
由于 JuiceFS 依赖数据库事务保证数据强一致性,而 Redis Cluster 采用分片机制将数据分散在不同的分片上,但不支持跨分区的事务,导致不能使用 Redis Cluster 作为 JuiceFS 的元数据引擎。

v1.0 beta3 通过使用固定前缀的方式让所有的数据都分配到单一的 Redis 分区中,从而保证了 Redis 事务功能不受影响。这个方法不能充分享受 Redis 集群的数据分片能力,但可以获得数据复制和选举方面的便利(类似于哨兵模式)。另外,这种前缀方式类似于单机模式的多库功能,有无限的扩展能力,适用于有很多小规模文件系统的场景。
AWS 最新发布的 MemoryDB for Redis 只提供集群模式,相比 ElastiCache 或者自己维护的 Redis,它的同步数据复制提供了更高的数据安全保证(但写入延迟更高),适用于对数据的安全性要求非常高,写少读多的场景。因为所有元数据都会集中在单个分片中,推荐使用一个分区加一份复制的部署模式(类似于主从模式),后续通过更换为更大内存的节点方式来扩容。
碎片延迟清理功能
JuiceFS 在读写文件时,如果该文件的数据碎片过多,就会自动触发碎片合并流程,将碎片聚合成大段数据并清理掉旧的碎片。
然而,在元数据迁移、故障恢复等场景中,用户可能需要使用旧版本的元数据备份,此时如果数据碎片已被清理,就会导致相关文件读取失败。
另外,当 Redis 丢失少量元数据时,也可能因为部分文件使用了已经被清理的碎片而损坏。
为了解决上述问题,在 v1.0 beta3 中加入了碎片延迟清理功能,对于开启了回收站的文件系统,碎片会被延迟删除,超过设定的回收站时间后才被自动清理,也可以用 gc 命令手动清理。
增强 Sync 命令
v1.0 beta3 进一步调整了 Sync 命令的功能,使其在用法上与大家熟知的 rsync 工具尽量保持一致,减少上手成本。
调整了用于过滤文件列表的 --include 和 --exclude 的用法,跟 rsync 保持一致,允许指定多个过滤规则,根据它们在命令行中的顺序和 Bash 通配符进行匹配,几乎可以实现任意集合的文件筛选需要,更具体的用法请参照 rsync 的文档。
Sync 命令默认会拷贝符号链接的目标文件,可以通过 --links 参数调整为拷贝符号链接本身。
另外,还加了一个 --limit 参数用于限制操作的文件个数,当设置为 1 时表示不进行递归遍历。
S3 网关功能升级
JuiceFS 的 S3 网关是基于 MinIO 的早期版本实现的,并且裁剪了一些非必要的功能。新版本的 MinIO 改用了 AGPL 协议,不能被 JuiceFS 直接升级使用。
现在采取了反向集成的策略,在支持网关功能的最新版 MinIO 上集成 JuiceFS v1.0 beta3,整体基于 AGPL 协议开源,这样可以使用新版本的 MinIO 提供的多租户、权限设置等更多高级功能,详情请参考 S3 网关文档。
JuiceFS 仍然内置了基础版的 S3 网关功能,而更完整的版本请使用这个反向集成的版本,代码请见。
其它新功能
- 支持 TLS 加密连接 TiKV 元数据引擎。
- 创建文件系统时,可以通过
--hash-prefix选项为数据写入对象存储时添加哈希前缀。很多对象存储有基于前缀的 QPS 限制或者系统瓶颈,通过该特性可以绕过这类限制以获得更好的性能。注意,已有数据写入的旧文件系统无法更改此选项。 - 挂载文件系统时,可以通过
--heartbeat选项设置客户端的心跳间隔,这在一些关注故障切换时间的场景下能发挥作用。注意,默认的心跳过期时间已由 60s 调整为 12s。 - 数据存储增加 Oracle Object Storage 支持。
- Java SDK 支持上报监控指标到 Graphite 或者兼容的系统。
- SQL 引擎支持非 UTF-8 编码的文件名,已有的文件系统需要升级客户端后再修改数据库的表结构。
其它变化
- 在新建文件系统时,会自动在数据存储中写入一个记录了 UUID 的占位对象,避免其他文件系统重复使用相同的数据存储造成混淆。
juicefs dump命令会自动隐藏对象存储的 secret key 防止泄漏敏感信息。- 改用加密形式存储对象存储访问密钥,减小安全隐患;已有的文件系统可通过
juicefs config META-URL --encrypt-secret命令调整加密模式。注意,修改后旧版客户端将无法挂载。 - 调整元数据默认备份机制,当文件数多于一百万时,需要用户显式指定备份周期。
- 在 Linux 下使用非 root 用户挂载时,将默认的缓存和日志目录改为此用户的家目录,避免因权限不足而失败。
- 改进了往 Redis 和 SQL 数据库导入大型目录(超过一百万文件)的能力。
- 为关系型数据库所有表结构增加主键,提升日志复制性能,详情参考。
升级建议
请在升级新版前注意评估以下几个变化:
会话管理格式调整
自 v1.0 beta3 开始,会话管理使用了新的格式,旧版本客户端通过 juicefs status 或者 juicefs destroy 无法看到 v1.0 beta3 的会话,新版客户端可以看到所有会话。
SQL 表结构调整,支持非 UTF-8 编码文件名
为了更好地支持非 UTF-8 编码的文件名,在 JuiceFS v1.0 beta3 中修改了关系型数据库的表结构。
对于正在使用 MySQL、MariaDB、PostgreSQL 的用户,如果需要让已有的文件系统支持非 UTF-8 编码的文件名,需要手动修改表结构,详情请参考文档。
修复的 Bug
- 修复了元数据备份失败时可能导致部分内存未及时释放问题。
- 修复了使用 SQL 作为元数据引擎时,扫描函数返回结果可能不正确问题。
- 修复了使用
juicefs load命令加载元数据时部分计数器可能统计不准确问题。 - 修复了对象存储开启多 buckets 时,扫描对象列表结果不正确问题。
- 修复了使用 Ceph RADOS 做对象存储时,对象数过多时扫描卡住问题。
详细的 Bug 修复列表请看 https://github.com/juicedata/juicefs/releases/tag/v1.0.0-beta3
快去下载体验吧,Juicedata/JuiceFS
JuiceFS v1.0 beta3 发布,支持 etcd、Amazon MemoryDB、Redis Cluster的更多相关文章
- JuiceFS V1.0 RC1 发布,大幅优化 dump/load 命令性能, 深度用户不容错过
各位社区的伙伴, JuiceFS v1.0 RC1 今天正式发布了!这个版本中,最值得关注的是对元数据迁移备份工具 dump/load 的优化. 这个优化需求来自于某个社区重度用户,这个用户在将亿级数 ...
- JuiceFS v1.0.0 Beta1 发布,加强数据安全能力
在 JuiceFS 开源一周年之际,我们迎来了首个里程碑版本 JuiceFS v1.0.0 Beta1,并将开源许可从 AGPL v3 修改为 Apache License 2.0. JuiceFS ...
- mysql awr v1.0.1发布
现发布mysql awr v1.0.1 修复问题: 1.galera cluster下flush table/index_statistcs时如果系统中业务ddl频繁可能会导致很多进程处于prepar ...
- PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区
PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具 - 开源中国社区 PyRedisAdmin v1.0 Beta 发布,Redis 在线管理工具
- [译]ABP v1.0终于发布了!
ABP v1.0终于发布了! 今天是个大日子!经过约3年的不断开发,第一个稳定的ABP版本,1.0,已经发布了.感谢为该项目做出贡献或试用过的每个人. 立即开始使用新的ABP框架:abp.io/get ...
- Omi v1.0震撼发布 - 令人窒息的Web组件化框架
原文链接--https://github.com/AlloyTeam/omi 写在前面 Omi框架经过几十个版本的迭代,越来越简便易用和强大. 经过周末的连续通宵加班加点,Omi v1.0版本终于问世 ...
- Omi v1.0震撼发布 - 开放现代的Web组件化框架
原文链接--https://github.com/AlloyTeam/omi 写在前面 Omi框架经过几十个版本的迭代,越来越简便易用和强大. 经过周末的连续通宵加班加点,Omi v1.0版本终于问世 ...
- Rookey.Frame v1.0 视频教程发布了
经过昨天几个小时的折腾, Rookey.Frame v1.0开发视频教程终于发布了,由于是第一次做视频有很多地方做的不够好,后续我会慢慢改进,争取将视频教程做好. 本期发布视频: (一)Rookey. ...
- 关于ML.NET v1.0 的发布说明
今天,我们很高兴宣布发布 ML.NET 1.0.ML.NET 是一个免费的.跨平台的开源机器学习框架,旨在将机器学习(ML)的强大功能引入.NET 应用程序. ML.NET GitHub:https: ...
随机推荐
- 说出几点 Java 中使用 Collections 的最佳实践?
这是我在使用 Java 中 Collectionc 类的一些最佳实践: a)使用正确的集合类,例如,如果不需要同步列表,使用 ArrayList 而不是 Vector. b)优先使用并发集合,而不是对 ...
- 学习Docker(二)
一.Docker快速入门 Docker 改变了什么? 1.简化配置 2.流水线管理 3.应用隔离 4.提高开发效率 5.快速部署 6.面向产品:产品交付 7.面向开发:简化环境配置 8.面向测试:多版 ...
- 爬虫-数据解析-xpath
xpath 解析 模块安装 : pip install lxml xpath的解析原理 实例化一个etree类型的对象,且将页面源码数据加载到该对象中 需要调用该对象的xpath方法结合着不同形式的x ...
- 顺利通过EMC实验(20)
- wx:key报错does not look like a valid key name
把花括号去掉就行了, 现在改版了, 要注意了 wx:key="index"
- 关于vue中v-for的键值顺序
在学习vue2.0时,关于处理v-for键值顺序时发现的问题: <body> <!-- 普通循环 --> <!-- {{num}} --> <!-- 列表循环 ...
- 使用docker安装centos6.10镜像并安装新版gcc
使用docker安装centos6.10镜像并安装新版gcc 环境:Linux Ubuntu 16.04.7 LTS 目录 使用docker安装centos6.10镜像并安装新版gcc 使用docke ...
- C++---条件结构和循环结构
条件结构 if结构 #include <iostream> using namespace std; int main() { //判断用户输入的字符是否是合法的硬盘盘符A-Z char ...
- python数据类型与基础运算
注释:了解其他数据类型补充 基础数据类型补充 可以回一下之前的数据类型: 整型,浮点型,字串符和列表. 一.字典(dict) #字典:可以精准的储存数据 是用大括号表示'{}' '字典和数据数据列表差 ...
- 使用Camera API https://developer.mozilla.org/zh-CN/docs/Web/Guide/API/Camera
使用Camera API 在本文章中 获取到所拍摄照片的引用 在网页中展示图片 完整的示例代码 HTML页面: JavaScript文件: 浏览器兼容性 通过Camera API,你可以使用手机的摄像 ...