Skip to main content

镜像文件系统

如果希望同时在两个或多个地域使用同一个 JuiceFS 文件系统,并获得相似的高性能体验,可以考虑使用 JuiceFS 的「镜像文件系统」功能:为文件系统创建一个或多个完整的「只读镜像」,内容完全一致,但用独立的文件系统名称和访问凭据来挂载。

先决条件

为了实现文件系统镜像,需要在每一个地域都私有化部署 JuiceFS 元数据服务。你可以自由地选择任何地域,无论是公有云还是自建机房,都能建立镜像集群。该功能目前仅开放给私有化部署用户,联系我们了解更多信息。

工作原理

mirror architecture

镜像首先需要建立元数据同步,这需要在镜像区域搭建元数据集群,并将其配置为源集群的镜像。同步的最小单位是整个元数据实例,而无法单独同步某一个文件系统,但考虑到元数据同步的开销不大,一般不会因此产生性能方面的问题。在镜像区域设置完毕并启动后,镜像集群会自动从源区域进行元数据同步,按照常见的跨区域网络状况,一般是秒级延迟,具体取决于实际网络状况。与此同时,控制台的后台任务也会对同步情况进行监控,在数据版本相差过大的时候进行报警。

至于对象存储数据,用户可以根据场景需要,自行选择合适的方案:

  1. 如果希望简化设置、降低对象存储费用,可以考虑两个区域共用同一个对象存储,然后在镜像区域搭建分布式缓存集群来提升性能,如下图所示。

    mirror with shared object storage

  2. 如果镜像区域需要访问文件系统的全部数据,并且希望最大程度提升性能,那么不仅需要使用独立的对象存储服务,也需要开启数据复制保证数据及时同步。

    mirror with async replication

对于方案 2,由于镜像区域使用独立的对象存储服务,那么需要在挂载时提供两个对象存储的密钥信息(--access-key2--secret-key2)。如果开启了异步数据复制,那么镜像元数据服务会根据变更日志,将需要同步的数据以后台任务形式下发给各个客户端来执行,客户端收到任务后,会在后台任务中从源文件系统的对象存储拉取数据,写入到镜像文件系统的对象存储。因此如果同步速度不理想,可以增加挂载客户端数,提高数据同步的并发度。

对于镜像区域的客户端,会优先从当前区域的对象存储读取数据,如果此时数据同步尚未完成,则会尝试从源区域的对象存储读取,读取完毕以后还会写回当前区域对象存储,避免下次访问发生穿透。流程如下图所示:

mirror read object storage preference

注意事项

  • 启用数据复制后,第一次挂载镜像文件系统时,会自动开始同步历史数据,不过为了让镜像文件系统可以更快投产,我们推荐提前用其它方式手动进行全量同步(如通过 juicefs sync 同步数据)。在镜像区域客户端运行期间,也会定期(默认每周一次)全量同步对象存储中的数据。
  • 镜像文件系统仅支持只读访问,因此无法写入或修改数据。对于宿主机挂载点,任何写入操作都会直接出错。但是对于 CSI 驱动,则要尤其注意,不应使用文件系统中不存在的目录(比如使用「动态配置」,或者试图挂载不存在的子目录),否则将导致 CSI Controller 初始化失败,进而无法挂载。

计费方式

一个文件系统可以在多个不同地区创建多份只读镜像,每个镜像文件系统均单独计费。