跨云数据搬迁利器:Juicesync

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: Juicesync 是 Juicedata 开源的多机分布式并行数据同步工具,支持各种对象存储(AWS S3, Azure Blob, Aliyun OSS 等)、POSIX 文件系统、HDFS 间数据互相同步,包括文件或者对象的元信息(比如权限,Owner,修改时间)同步。Juicesync 使用 Go 语言开发,不到一万行代码,核心同步逻辑只有几百行

Juicesync 是什么

JuicesyncJuicedata 开源的多机分布式并行数据同步工具,支持各种对象存储( AWS S3, Azure Blob, Aliyun OSS 等)、 POSIX 文件系统、HDFS 间数据互相同步,包括文件或者对象的元信息(比如权限,Owner,修改时间)同步。Juicesync 使用 Go 语言开发,不到 一万行代码,核心同步逻辑只有几百行。

Juicesync 工作机制

Juicesync 将文件系统(POSIX 文件系统,HDFS 文件系统)中的文件视为对象存储中的对象,与已有的各种对象存储模型相统一。Juicesync 维护一个 FIFO 队列, list 任务不断列出源存储和目标存储的对象列表,比较源存储和目标存储的对象列表的差异及相同 key 对象元信息(数据大小,修改时间,Owner等)的差异,确定需要同步的对象 key 加入该 FIFO 队列, sync 任务不断从队列中获取需要同步的对象的 key 值,调用对象存储的 SDK 同步数据。 在多进程并行同步情况下, list 任务由 manager 进程执行, sync 任务由 worker 执行, manager 同时也是 worker

Juicesync 支持指定要同步的源对象的前缀和同步到目标存储的前缀,同时支持指定规则对同步的对象的 key 值进行过滤。

为什么需要 Juicesync

近年来,云计算越来越流行,企业从自身利益出发,或是不愿意被单一云服务商锁定,或是业务和数据冗余,或是出于成本优化考虑,会尝试将部分或者全部业务从线下机房迁移到云或者从一个云平台迁移到另一个云平台。

业务迁移涉及到数据的迁移。各个云平台产品类型类似,比如存储都有块存储、对象存储、归档存储等,尤其是对象存储,由于其高性价比、无限容量等特性,在数据备份、大数据、数据湖场景得到了广泛应用。

各云厂商的对象存储在 API 层面都会有或多或少的差异,每家云平台都有自己的客户端和 SDK。一般涉及服务和数据迁移,数据量都比较大,小则上百 TiB,多的能达到 PiB 级别,需要加大吞吐缩短迁移周期。市场上急需一个支持各类存储系统尤其是对象存储相互复制数据的工具,为了提高吞吐,需要能够做到多机并行。

目前已有的方案适用范围有限,比如 DistCp 依赖 Hadoop ,太重。Rclone 不支持多机并行。正好 JuiceFS 已经对接了各种对象存储的 API ,也实现了数据同步的逻辑,可以直接将这部分功能抽出来复用。

用户案例

流利说在跨云迁移中使用 Juicesync 同步 PiB 级别数据,没有出现任何数据异常,很好的支持了业务迁移。

开始使用

Juicesync 使用非常简单,只有一个二进制文件,可以直接从这里下载。

1. 并行的 rsync

# time ./juicesync data/ root@10.0.101.16:/tmp/data/
2020/11/18 07:59:13.311063 <INFO>: Syncing from file:///root/tmp/data/ to root@10.0.101.16:/tmp/data/
2020/11/18 08:01:04.060726 <INFO>: Found: 10, copied: 10, deleted: 0, failed: 0/s

real    1m52.206s
user    0m35.433s
sys    0m23.877s

这里 data/ 目录下有 10 个大小为 1GiB 的文件,Juicesync 使用 SFTP 协议访问远端文件,使用 rsync 同步同样的数据,由于 rsync 是单线程,耗时是 juicesync 的 7.5 倍。

# time rsync -az data/ root@10.0.101.16:/tmp/data/
real    13m50.555s
user    6m22.667s
sys    0m21.590s

2. 本地文件系统和对象存储间数据同步

将本地目录数据同步到 S3,在 AWS 上直接给服务器配置 IAM Role,Juicesync 支持自动根据对象存储 bucket 名称查找 bucket 的 endpoint :

# ./juicesync --threads=50 ./data2/ s3://jfs-test-tmp4/data2/
2020/11/18 09:24:28.741532 <INFO>: Syncing from file:///root/tmp/data2/ to s3://jfs-test-tmp4/data2/
[++++++                                       ]     1000  15%  4.2/s  210.9 MB/s

增加并发任务数到 50(默认为 10 )充分利用 CPU 和带宽。

3. 对象存储间的数据同步

在 2 核 4GiB 内存 EC2 节点从当前 region 的一个 bucket 拷贝到另一个 bucket,如下一行命令:

# ./juicesync --threads=50 s3://jfs-test-tmp3/data2/ s3://jfs-test-tmp4/data2/
2020/11/18 09:02:50.518509 <INFO>: Syncing from s3://jfs-test-tmp3/data2/ to s3://jfs-test-tmp4/data2/
[++++++++                                     ]     1000  18%  3.8/s  192.0 MB/s

使用多机并行同步,命令基本一样,仅加上一个 --worker 参数指定 worker 节点列表(发起节点为 manager 节点,manager 节点同时也作为一个 worker 节点):

# ./juicesync --worker=10.0.101.16 --threads=50 s3://**:**@jfs-test-tmp3/data2/ s3://**:**@jfs-test-tmp4/data2/
2020/11/18 09:00:15.458919 <INFO>: Listen at [::]:32887
2020/11/18 09:00:15.459295 <INFO>: Syncing from s3://jfs-test-tmp3/data2/ to s3://jfs-test-tmp4/data2/
2020/11/18 09:00:16.143205 <INFO>: launch a worker on 10.0.101.16/s  0.0MB/s
[+++++++++++++++++++++++++++++++              ]     1000  69%  8.4/s  421.9 MB/s

命令中 **:** 中的 ** 分别表示访问对象存储的 AK_, _SK ,manager 节点通过 SSH 登录到 worker 节点启动 worker 进程。 双节点运行网络吞吐翻倍。

4. 其它一些有趣用法

  • 删除对象存储指定前缀下所有文件:
$ ./juicesync --delete-dst ./emptydir/ s3://jfs-test-tmp3/data/

在本地文件系统创建一个空目录,加上 --delete-dst 选项,会删除目标路径下存在但是源路径不存在的文件。

  • 忽略部分对象
$ ./juicesync --exclude='/2017-[0-9]{2}-[0-9]{2}/' s3://bucket1/prefix1/ oss://bucket2/prefix2/

--exclude 参数使用 POSIX ERE(egrep) 正则表达式。

上面命令将 S3 上 bucket1 桶的 prefix1/ 前缀下的对象同步到 OSS 上 bucket2 桶的 prefix2/ 前缀下,忽略 key 中包含有 /2017-[0-9]{2}-[0-9]{2}/ 的对象。比如 s3://bucket1/prefix1/2016-05-13/image.jpg 的对象同步到 oss://bucket2/prefix2/2016-05-13/image.jpg ,而 s3://bucket1/prefix1/2017-06-15/image.jpg 不会同步。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
1月前
|
存储 数据管理 Java
双副本与双活:TDengine 为企业打造的高效数据管理利器
在现代数据管理中,企业对于可靠性、可用性和成本的平衡有着多样化的需求。为此,TDengine 在 3.3.0.0 版本中推出了两种不同的企业级解决方案:双活方案和基于仲裁者的双副本方案,以满足不同应用场景下的特殊需求。本文将详细探讨这两种方案的适用场景、技术特点及其最佳实践,让大家深入了解这两大方案如何帮助企业在高效可靠的数据存储和管理中取得成功。
34 0
|
存储 运维 监控
云时代,好用的数据迁移方案推荐
本文将介绍数据库迁移的步骤以及市面上常见的迁移工具,推荐大家选择能够支持“业务零停机迁移”的工具产品。同时,平台工具(例NineData) 的自动化体验及配套设施(例:数据校验工具、迁移限流、监控告警等)一般较为完善,是比较推荐的选择。
998 1
云时代,好用的数据迁移方案推荐
|
SQL 安全 Cloud Native
NineData数据复制技术助力实时数仓构建,开发人员必读!
NineData 和 SelectDB 共同举办的主题为“实时数据驱动,引领企业智能化数据管理”的线上联合发布会,圆满成功举办!双方聚焦于实时数据仓库技术和数据开发能力,展示如何通过强大的生态开发兼容性,对接丰富的大数据生态产品,助力企业快速开展数据分析业务,共同探索实时数据驱动的未来企业智能化数据管理解决方案。本文根据玖章算术技术副总裁陈长城(天羽)在 NineData X SelectDB 联合发布会的主题演讲内容整理。
492 0
NineData数据复制技术助力实时数仓构建,开发人员必读!
|
SQL 运维 Oracle
云上“升舱”,升级到速度更快,功能更全面,性价比更高的数仓平台
阿里云AnalyticDB“升舱”活动致力于帮助您将线下或自建的数仓全面迁移至云原生架构之上,享受全托管的使用体验;为企业构建数据平台带来速度更快,功能更全面,性价比更高的数据平台
云上“升舱”,升级到速度更快,功能更全面,性价比更高的数仓平台
|
存储 数据库 对象存储
带你读《云存储应用白皮书》之24:1. 数据业务迁移上云方案
带你读《云存储应用白皮书》之24:1. 数据业务迁移上云方案
274 0
|
存储 运维 监控
带你读《云存储应用白皮书》之34:7、可观测运维解决方案
带你读《云存储应用白皮书》之34:7、可观测运维解决方案
197 0
|
存储 容灾 安全
如何利用工具低成本构建阿里云灾备方案?
如何利用工具低成本构建阿里云灾备方案?
如何利用工具低成本构建阿里云灾备方案?
|
存储 监控 安全
系统迁移到云端的趋势
系统迁移到云端的趋势
225 0
系统迁移到云端的趋势
|
SQL 存储 运维
如何运维超大体量的数据库集群?阿里巴巴数据库运维最佳实践
阿里云数据库出席“2021中国数字服务大会”
356 0
如何运维超大体量的数据库集群?阿里巴巴数据库运维最佳实践
|
5G 调度 图形学
3D实时云渲染系统搭建部署建设方案
依托于3D实时云渲染技术,目前这类平台对于很多设计或者影视特效公司来说,效率得到了极大的提升。在一些影视特效、动漫、设计、unity模型等领域,需要将设计好的模型呈现出来立体的效果,以前是在电脑上,利用本地设备性能去执行这项工作。而随着5G和云服务的发展,使用**云端服务器**来完成这些工作,可以大大提高其工作效率。
1125 0
3D实时云渲染系统搭建部署建设方案
下一篇
无影云桌面