镜像文件系统
如果希望同时在两个或多个地域使用同一个 JuiceFS 文件系统,并获得相似的高性能体验,可以考虑使用 JuiceFS 的「镜像文件系统」功能:为文件系统创建一个或多个完整的「只读镜像」,内容完全一致,但用独立的文件系统名称和访问凭据来挂载。每个镜像文件系统均单独计费。
从 5.0 开始,JuiceFS 支持「写入镜像文件系统」,阅读下方相关小节了解更多。
工作原理
镜像首先需要建立元数据同步,这需要在镜像区域搭建元数据集群,并将其配置为源集群的镜像。同步的最小单位是整个元数据实例,而无法单独同步某一个文件系统 ,但考虑到元数据同步的开销不大,一般不会因此产生性能方面的问题。在镜像区域设置完毕并启动后,镜像集群会自动从源区域进行元数据同步,按照常见的跨区域网络状况,一般是秒级延迟,具体取决于实际网络状况。与此同时,控制台的后台任务也会对同步情况进行监控,在数据版本相差过大的时候进行报警。如果源集群发生故障、停止服务,镜像集群可以继续服务,但是由于数据同步中断,文件系统数据不会继续更新。
至于对象存储数据,用户可以根据场景需要,自行选择合适的方案:
-
方案一:多个区域共用一个对象存储。如果希望简化设置、降低对象存储费用,可以考虑两个区域共用同一个对象存储,然后在镜像区域搭建分布式缓存集群来提升性能,如下图所示。
-
方案二:每个区域使用独立的对象存储。如果镜像区域需要访问文件系统的全部数据,并且希望最大程度提升性能,那么需要使用独立的对象存储服务,开启数据复制保证数据及时同步。
对于方案二,由于镜像区域使用独立的对象存储服务,那么需要在挂载时提供两个对象存储的密钥信息(--access-key2、--secret-key2)。镜像元数据服务会根据变更 日志,将需要同步的数据以后台任务形式下发给各个客户端来执行,客户端收到任务后,会在后台任务中从源文件系统的对象存储拉取数据,写入到镜像文件系统的对象存储。因此如果同步速度不理想,可以增加挂载客户端数,提高数据同步的并发度。镜像文件系统的数据复制原理,在数据复制的工作原理中有更详细的说明。
对于镜像区域的客户端,会优先从当前区域的对象存储读取数据,如果此时数据同步尚未完成,则会尝试从源区域的对象存储读取,读取完毕以后还会写回当前区域对象存储,避免下次访问发生穿透。流程如下图所示:
一对多复制
JuiceFS 没有镜像区域的数量限制,一个元数据集群可以创建任意数量的镜像,而每个文件系统都可以使用自己所在区域的当地对象存储,并且启用数据复制,因此可以用这种方法来实现文件系统一对多的复制。
该话题和「数据复制」功能高度相关,数据复制功能本身只能实现「一对一」的数据同步,因此如果需要「一对多」的复制效果,必须借助镜像文件系统来实现。这一点在「数据复制」的工作原理中也有更详细的介绍。