分布式模式
上一篇文档「JuiceFS 单机模式快速上手指南」通过采用「对象存储」和「SQLite」数据库的组合,实现了一个可以在任意主机上挂载的文件系统。得益于对象存储是可以被网络上任何有权限的计算机访问的特点,我们只需要把 SQLite 数据库文件复制到任何想要访问该存储的计算机,就可以实现在不同计算机上访问同一个 JuiceFS 文件系统。
很显然,想要依靠在计算机之间复制 SQLite 数据库的方式进行文件系统共享,虽然可行,但文件的实时性是得不到保证的。受限于 SQLite 这种单文件数据库无法被多个计算机同时读写访问的情况,为了能够让一个文件系统可以在分布式环境中被多个计算机同时挂载读写,我们需要采用支持通过网络访问的数据库,比如 Redis、PostgreSQL、MySQL 等。
本文以上一篇文档为基础,进一步将数据库从单用户的「SQLite」替换成多用户的「云数据库」,从而实现可以在网络上任何一台计算机上进行挂载读写的分布式文件系统。
基于网络的数据库
这里所谓的「基于网络的数据库」是指允许多个用户通过网络同时访问的数据库,从这个角度出发,可以简单的把数据库分成:
- 单机数据库:数据库是单个文件,通常只能单机访问,如 SQLite,Microsoft Access 等;
- 基于网络的数据库:数据库通常是复杂的多文件结构,提供基于网络的访问接口,支持多用户同时访问,如 Redis、PostgreSQL 等。
JuiceFS 目前支持的基于网络的数据库有:
- 键值数据库:Redis、TiKV、etcd、FoundationDB
- 关系型数据库:PostgreSQL、MySQL、MariaDB
不同的数据库性能和稳定性表现也各不相同,比如 Redis 是内存型键值数据库,性能极为出色,但可靠性相对较弱。PostgreSQL 是关系型数据库,相比之下性能没有内存型强悍,但它的可靠性要更强。
有关数据库选择方面的内容,我们会专门编写文档进行介绍。
云数据库
云计算平台通常都有种类丰富的云数据库提供,比如 Amazon RDS 提供各类关系型数据库的版本,Amazon ElastiCache 提供兼容 Redis 的内存型数据库产品。经过简单的初始化设置就可以创建出多副本、高可用的数据库集群。
当然,如果愿意,你可以自己在服务器上搭建数据库。
简单起见,这里以阿里云数据库 Redis 版为例介绍。对于基于网络的数据库来说,最基本的是以下 2 项信息:
- 数据库地址:数据库的访问地址,云平台可能会针对内外网提供不同的链接;
- 用户名和密码:用于访问数据库时的身份验证信息。