Master Server(主控服务器): Master Server 负责管理文件系统的元数据,如文件的分布、卷的状态等。它并不参与实际文件的存储操作,而是作为中央协调者,指导客户端如何与实际存储服务器交互。 Master Server 支持水平扩展,通过 Leader 选举实现高可用性。
Volume Server(卷服务器): Volume Server 是实际存储文件数据的服务器。每个 Volume Server 存储多个卷(Volume),每个卷存储多个文件块。Volume Server 负责读取和写入文件,并直接与客户端交互。Volume Server 可以在集群中水平扩展,新增的 Volume Server 会注册到 Master Server。
Filer(文件服务器): Filer 提供文件级别的存储管理,支持文件目录结构,并允许用户对文件进行常规的文件系统操作(如文件的读、写、删除、重命名等)。Filer 可以与外部存储系统集成,如 S3、Azure Blob 或 Google Cloud Storage。
Client(客户端): 客户端与 Master Server 交互,通过元数据信息获知文件存储的位置,然后直接与 Volume Server 进行数据交换,上传或下载文件。客户端可以是 SeaweedFS 自带的工具,也可以通过 HTTP/REST API 或者 SDK 与 SeaweedFS 交互。
Topology(拓扑结构): SeaweedFS 通过分层次的拓扑结构来组织文件存储,拓扑的基本组成单元是 “rack”(机架)和 “data center”(数据中心)。Master Server 可以根据不同的机架或数据中心分配存储,从而实现跨区域的文件分布和冗余。
2. 工作流程
SeaweedFS 的核心工作流程分为文件写入和文件读取两个过程。
文件写入流程
客户端请求 Master Server:当客户端需要写入文件时,首先会向 Master Server 请求一个新的文件 ID(fileId)。Master Server 根据当前卷的使用情况,返回一个未使用的 fileId 以及对应的卷服务器(Volume Server)的位置信息。
写入文件数据:客户端根据 Master Server 返回的卷服务器位置,直接将文件上传到指定的卷服务器中,文件数据将存储在卷内。SeaweedFS 默认会为每个文件生成一个卷内的唯一 ID。
更新元数据:上传完成后,客户端会通知 Master Server 该文件已经存储完毕。Master Server 更新元数据,以便后续可以查找文件的位置。
Volume 编号和文件 ID:每个文件被分配到特定的卷(Volume)中,并在该卷中拥有唯一的文件 ID。文件的完整标识符由卷 ID 和文件 ID 组成,例如 3,017b9d77,其中 3 是卷 ID,017b9d77 是文件 ID。