Skip to main content

镜像文件系统

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

从 5.0 开始,JuiceFS 实验性地支持「写入镜像文件系统」,阅读下方相关小节了解更多。

工作原理

mirror architecture

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

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

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

mirror with shared object storage

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

mirror with async replication

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

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

mirror read object storage preference

开始使用

如果需求已经确定,请联系 Juicedata 工程师为你在指定的云服务商(或数据中心)区域部署镜像元数据服务。如果你是私有部署客户,也可以从我们这里获取部署文档,自行实施。

镜像区域创建完毕、建立数据同步以后,点击进入文件系统的设置页面,然后就可以在「镜像文件系统」板块点击创建镜像了。

需要注意:

  • 镜像文件系统有着自己的名字、访问凭据(Token),挂载的时候务必注意不要搞混这些要素;
  • 如果启用了数据复制,那么第一次挂载镜像文件系统时,会自动开始同步历史数据,不过为了让镜像文件系统可以更快投产,我们推荐提前用其它方式手动进行全量同步(如通过 juicefs sync 同步数据)。在镜像区域客户端运行期间,也会定期(默认每周一次)全量同步对象存储中的数据;
  • 默认情况下,镜像文件系统是只读访问,无法写入或修改数据。对于宿主机挂载点,任何写入操作都会直接出错。但是对于 CSI 驱动,则要尤其注意,不应使用文件系统中不存在的目录(比如使用「动态配置」,或者试图挂载不存在的子目录),否则将导致 CSI Controller 初始化失败,进而无法挂载;
  • 如果需要通过镜像文件系统进行写入,可以修改客户端挂载 Token 的权限,使用读写权限。注意,目前镜像文件系统的写特性仍处于公测阶段,请提前充分验证、谨慎使用。

写入镜像文件系统(实验性)

从 5.0 开始,JuiceFS 实验性地支持镜像文件系统的写功能,其原理也并不十分复杂:镜像区域的客户端实现了读写分离,元数据的读请求一律通过镜像区域的元数据服务来进行,而写请求则会跨区域写入源集群的元数据服务和对象存储。因此如果你需要在镜像区域进行文件写入,不再需要单独通过公网挂载源文件系统,并将所有写入业务安排在这些特定挂载点上进行了,而是可以直接通过镜像文件系统的客户端来执行写入。

mirror write architecture

注意

镜像文件系统的写入支持还在公测阶段。因此如果有需要,请务必和 Juicedata 工程师一起充分测试、谨慎采纳。

启用镜像文件系统的写入支持不需要特殊操作,你只需要在「访问令牌」页面正常创建读写权限的 Token 就可以了。因此如果希望对镜像文件系统进行权限管理,将写入行为局限在特定客户端中,只需要管理各个 Token 的读写权限即可。