Skip to main content

跨区数据复制

JuiceFS 支持跨云跨区的数据复制,可以用异步数据复制的方式,将数据同步到另一个区域或者其它云服务的对象存储。

为叙述方便,我们下面将创建文件系统时指定的对象存储区域称作「主要区域」。启用数据复制需要为文件系统再指定一个「目标区域」,可以与主要区域是同一个云服务商,也可以不同。

适用场景

该功能适用于以下场景:

  • 跨地域数据共享:在两个地域读写同一个文件系统。如果区域之间网络延迟过大,目标区域的访问性能可能不佳。如果目标区域是只读场景,考虑使用「镜像文件系统」提升性能。
  • 对象存储服务灾备:如果主要区域的对象存储服务发生故障,可以手动切换到目标区域的对象存储(通过 --bucket 选项),在短时间内恢复服务。
  • 平滑迁移对象存储服务:如果需要变更某个文件系统底层的对象存储服务,可以使用该功能实现同时写入两个桶,从而实现平滑迁移。

先决条件

目标区域需要提供对象存储服务,并且主要区域和目标区域之间可以互相访问对方的对象存储服务。

工作原理

以主要区域写入,目标区域读取为例,数据复制的工作方式如下图所示:

replication

从两个区域访问时都会访问同一个元数据服务,都可读可写:

  • 对于文件写入,会优先写到当前区域的对象存储,成功后则认为数据写入完成,再异步复制到远端的对象存储。
  • 读数据时,也会优先从当前区域的对象存储,如果不存在(还未同步完成),则会从远端区域的对象存储读取,此时性能会受影响。推荐根据使用场景来进行缓存调优

启用数据复制

打开 JuiceFS 控制台,在文件系统的设置页面可以启用数据复制,选择一个目标云服务和区域,保存设置之后,通过客户端重新挂载文件系统即可生效。

启用数据复制后,元数据服务会根据变更日志,将需要同步的数据以后台任务形式下发给各个客户端来执行,客户端收到任务后,会在后台任务中从对象存储拉取数据,写入到镜像文件系统的对象存储。因此如果同步速度不理想,可以增加挂载客户端数,提高数据同步的并发度。除了这种实时的增量同步外,客户端还会定期(每周一次)执行全量、双向的数据同步。

挂载文件系统时,使用 --access-key2--secret-key2 设置目标对象存储 API 的访问密钥。并且注意,在目标区域挂载时,可以用 --flip 选项反转主要区域、目标区域,这样一来,目标区域的客户端挂载时,将优先使用距离自己更近的目标区域(--bucket2),并将数据写入异步复制到主要区域(--bucket)。在这种模式下,两个对象存储都有数据写入,并通过异步任务来相互复制数据:

replication-flip

数据一致性

因为两个区都是使用同一个元数据服务,因此在元数据方面有一致性保证。JuiceFS 在对象存储中的数据块是不可变对象,因此不用担心数据的一致性问题。

计费方式

跨区数据复制功能向所有用户免费提供。启用之后不产生额外的元数据,对 JuiceFS 产生的费用没有影响,你只需要关注在对象存储服务提供商产生的费用。