镜像文件系统
如果希望同时在两个或多个地域使用同一个 JuiceFS 文件系统,并获得相似的高性能体验,可以考虑使用 JuiceFS 的「镜像文件系统」功能:为文件系统创建一个或多个完整的「只读镜像」,内容完全一致,但用独立的文件系统名称和访问凭据来挂载。每个镜像文件系统均单独计费。
从 5.0 开始,JuiceFS 实验性地支持「写入镜像文件系统」,阅读下方相关小节了解更多。
工作原理
镜像首先需要建立元数据同步,这需要在镜像区域搭建元数据集群,并将其配置为源集群的镜像。同步的最小单位是整个元数据实例,而无法单独同步某一个文件系统,但考虑到元数据同步的开销不大,一般不会因此产生性能方面的问题。在镜像区域设置完毕并启动后,镜像集群会自动从源区域进行元数据同步,按照常见的跨区域网络状况,一般是秒级延迟,具体取决于实际网络状况。与此同时,控制台的后台任务也会对同步情况进行监控,在数据版本相差 过大的时候进行报警。
至于对象存储数据,用户可以根据场景需要,自行选择合适的方案:
- 如果希望简化设置、降低对象存储费用,可以考虑两个区域共用同一个对象存储,然后在镜像区域搭建分布式缓存集群来提升性能,如下图所示。
- 如果镜像区域需要访问文件系统的全部数据,并且希望最大程度提升性能,那么不仅需要使用独立的对象存储服务,也需要开启数据复制保证数据及时同步。
对于方案 2,由于镜像区域使用独立的对象存储服务,那么需要在挂载时提供两个对象存储的密钥信息(--access-key2
、--secret-key2
)。如果开启了异步数据复制,那么镜像元数据服务会根据变更日志,将需要同步的数据以后台任务形式下发给各个客户端来执行,客户端收到任务后,会在后台任务中从源文件系统的对象存储拉取数据,写入到镜像文件系统的对象存储。因此如果同步速度不理想,可以增加挂载客户端数,提高数据同步的并发度。
对于镜像区域的客户端,会优先从当前区域的对象存储读取数据,如果此时数据同步尚未完成,则会尝试从源区域的对象存储读取,读取完毕以后 还会写回当前区域对象存储,避免下次访问发生穿透。流程如下图所示:
开始使用
如果需求已经确定,请联系 Juicedata 工程师为你在指定的云服务商(或数据中心)区域部署镜像元数据服务。如果你是私有部署客户,也可以从我们这里获取部署文档,自行实施。
镜像区域创建完毕、建立数据同步以后,点击进入文件系统的设置页面,然后就可以在「镜像文件系统」板块点击创建镜像了。
需要注意:
- 镜像文件系统有着自己的名字、访问凭据(Token),挂载的时候务必注意不要搞混这些要素;
- 如果启用了数据复制,那么第一次挂载镜像文件系统时,会自动开始同步历史数据,不过为了让镜像文件系统可以更快投产,我们推荐提前用其它方式手动进行全量同步(如通过
juicefs sync
同步数据)。在镜像区域客户端运行期间,也会定期(默认每周一次)全量同步对象存储中的数据; - 默认情况下,镜像文件系统是只读访问,无法写入或修改数据。对于宿主机挂载点,任何写入操作都会直接出错。但是对于 CSI 驱动,则要尤其注意,不应使用文件系统中不存在的目录(比如使用「动态配置」,或者试图挂载不存在的子目录),否则将导 致 CSI Controller 初始化失败,进而无法挂载。
写入镜像文件系统(实验性)
从 5.0 开始,JuiceFS 实验性地支持镜像文件系统的写功能,其原理也并不十分复杂:镜像区域的客户端实现了读写分离,元数据的读请求一律通过镜像区域的元数据服务来进行,而写请求则会跨区域写入源集群的元数据服务和对象存储。因此如果你需要在镜像区域进行文件写入,不再需要单独通过公网挂载源文件系统,并将所有写入业务安排在这些特定挂载点上进行了,而是可以直接通过镜像文件系统的客户端来执行写入。
镜像文件系统的写入支持还在公测阶段。因此如果有需要,请务必和 Juicedata 工程师一起充分测试、谨慎采纳。
启用镜像文件系统的写入支持不需要特殊操作,你只需要在「访问令牌」页面正常创建读写权限的 Token 就可以了。因此如果希望对镜像文件系统进行权限管理,将写入行为局限在特定客户端中,只需要管理各个 Token 的读写权限即可。