23年硕士毕业半年被裁后,一个月斩获大厂offer,“跟着周哥走,offer手里有”。文末有周哥50+场面试总结出的必会面试题。
1 背景
现有采用nfs的方案,nfs在机器上会生成软链接文件夹,客户不认为是一个组件,同时nfs存在一些问题。如单点故障:NFS通常依赖于一个中央服务器来管理和提供文件共享。如果该服务器发生故障或不可用,将导致所有客户端无法访问共享文件。这使得NFS在可用性方面存在单点故障的风险。
目前考虑调研JuiceFS文件系统,期望基于JuiceFS写一个应用组件,采用调用接口的方式使用JuiceFS去读写文件。
客户文件单个最大500M,测试文件考虑在500M以内。
2 简介
JuiceFS 是一款面向云原生设计的高性能分布式文件系统。
JuiceFS 文件系统由三个部分组成:
3 什么是对象存储?
对象存储是一种用于存储和管理大量非结构化数据的技术,它将数据以对象的形式进行存储。每个对象都有一个唯一的标识符,可以通过该标识符来访问和检索对象。
与传统的文件系统或块存储不同,对象存储不使用传统的层次目录结构,而是使用扁平的命名空间。每个对象都存储在一个存储池或存储桶中,而不是存储在文件夹或目录中。这种方式使得对象存储能够轻松地扩展和管理大规模的数据。
对象存储广泛应用于云存储、大数据分析、备份和归档等领域。亚马逊S3(Amazon S3)、微软Azure Blob存储、谷歌云存储(Google Cloud Storage)和阿里云对象存储(Alibaba Cloud Object Storage)是常见的对象存储服务提供商。
4 juiceFS如何存储?
与传统文件系统只能使用本地磁盘存储数据和对应的元数据的模式不同,JuiceFS 会将数据格式化以后存储在对象存储,同时会将文件的元数据存储在元数据引擎。
5 部署模式
官网提供了两种部署模式:
- 第一种:单机部署。目的是为了了解juiceFS,不具有使用价值
- 第二种:分布式方式。推荐使用公有云对象存储服务,比如阿里云oss。
考虑到客户不会使用公有云的oss。因此,有必要自建oss。
如果想自建对象存储服务的话,有能力,规模比较大的话,采用 Ceph 会比较合适。如果只是想要一个对象存储,要求没有那么多的话,可以采用 MinIO ,相对比较简单。
6 部署JuiceFS
接下来采用分布式方式部署JuiceFS。
- 部署对象:JuiceFS
- 元数据存储:Redis
- 数据存储:使用MinIO创建对象存储集群进行存储
6.1 step1:MinIO创建对象存储集群
这里我们采取两个节点进行部署测试
严格按照分布式文件服务minio集群搭建_minio两主机_北村浪子的博客-CSDN博客进行配置
6.2 step2:安装Redis
安装redis,参考Redis的安装教程(Windows+Linux)【超详细】
step3 基于Minio搭建juiceFS
参照 Juicefs 和 Minio 搭建简单上手的高可用存储 • Incubator4's Blog
先登录MinIO Console
然后,创建user,之后创建accesskey和secretkey
accesskey: juicefs123
secretkey: juicefs123
安装juicefscurl -sSL https://d.juicefs.com/install | sh -
创建文件系统
./juicefs format --storage minio --bucket http://10.100.0.6:9901/juicefs --access-key juicefs123 --secret-key juicefs123 redis://10.100.0.1:7000/1 myjfs
6.4 step4:挂载juicefs
参照分布式模式快速上手指南 | JuiceFS Document Center
由于这个文件系统的「数据」和「元数据」都存储在基于网络的云服务中,因此在任何安装了 JuiceFS 客户端的计算机上都可以同时挂载该文件系统进行共享读写。例如:
./juicefs mount redis://10.100.0.1:7000/1 /home/zw/jfs
7 官方推荐使用JuiceFS的方式
- 用作Kubernetes集群的存储层
Hadoop生态使用JuiceFS
- 通过 JuiceFS Java 客户端为 Hadoop 生态提供存储,需要提前创建 JuiceFS 文件系统。部署 Java 客户端时,在配置文件中指定已创建文件系统的元数据引擎地址。
- Docker中使用JuiceFS
- 创建Samba共享
创建NFS共享 - 配置JuiceFS S3网管
- 自动化部署
8 JuiceFS测试
如下为部署好的JuiceFS各节点信息
安装客户端curl -sSL https://d.juicefs.com/install | sh -
挂载juiceFS文件系统
./juicefs mount redis://10.100.0.1:7000/1 /home/zw/jfs
测试结果为
9 运维
元数据备份
- 手动备份,dump元数据到JSON文件
- 自动备份,客户端每小时自动备份元数据到对象存储
- JuiceFS 客户端通过监控 API 对外暴露 Prometheus格式的实时监控指标,用户自行配置 Prometheus 抓取监控数据,然后通过 Grafana等工具即可实现数据可视化。
- 回收站。回收站默认开启,文件被删除后的保留时间默认配置为 1 天,可以有效防止数据被误删除时造成的数据丢失风险。
- 可以设置开机自动挂载。
- 状态检查和维护。提供了一系列检查和维护文件系统的工具,不但可以帮助我们了解文件系统的基本信息、运行状态,还能够帮助我们更容易地发现和修复潜在的问题。
安全
传输加密
通过HTTPS与对象存储服务器。公有云对象存储一般会同时支持 HTTP 和 HTTPS,在创建文件系统时如果没有指定协议头,JuiceFS 会默认使用 HTTPS 协议头。
- 通过TLS/SSL加密连接到数据库。例如配置了TLS加密的Redis数据库可使用redis://协议头进行连接。
静态数据加密
- JuiceFS 提供静态数据加密支持,即先加密,再上传。所有存入 JuiceFS 的文件都会在本地完成加密后再上传到对象存储,这可以在对象存储本身被破坏时有效地防止数据泄露。
回收站
- JuiceFS 默认开启回收站功能,你删除的文件会被保存在文件系统根目录下的 .trash目录内,保留指定时间后才将数据真正清理。可恢复文件。
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。