实现无限存储:基于JuiceFS 创建 Samba 和 NFS 共享

news2024/11/23 4:09:30

随着企业数据量的持续增长,存储容量需求日益增大。如何采用没有容量上限的云存储替换本容量有限的本地磁盘,已成为广泛的需求和共识。特别是在企业中常用的 Samba 和 NFS 共享,如果能够使用云存储作为底层存储,就能有效解决存储扩容和本地磁盘损坏导致的数据丢失问题。

本文将以 Linux 系统为例,介绍如何将 JuiceFS(云原生分布式文件系统)作为 Samba 和 NFS 的底层存储,为企业提供高度可扩展的无限云存储解决方案。

本文会分别介绍在命令行和图形界面中的使用方法,读者可以根据自己的使用习惯参考相应内容。

在命令行中使用

通过执行 juicefs mount 命令,可以将 JuiceFS 文件系统以 FUSE 接口的形式挂载为本地的用户态文件系统,与本地文件系统在形态和用法上无异。这样一来,可以直接使用 JuiceFS 挂载点或子目录创建 Samba 或 NFS 共享。

创建 Samba 共享

主流 Linux 发行版的包管理器都会提供 Samba,可以直接安装,比如 Debian/Ubuntu 可以这样安装:


sudo apt install samba

对于需要配置 AD/DC 的,还需要安装其他的软件包,详情参考 Samba 官方安装指南。

根据 Samba 官方文档,通常建议使用支持扩展属性(xattr)的文件系统,JuiceFS 文件系统需要在挂载时使用 --enable-xattr 选项来启用扩展属性:


sudo juicefs mount -d --enable-xattr sqlite3://myjfs.db /mnt/myjfs

然后就可以使用 JuiceFS 挂载点或子目录创建共享,例如,创建一个名为 Media 的共享:


[Media]

    path = /mnt/myjfs/media

    guest ok = no

    read only = no

    browseable = yes

对 macOS 的扩展属性支持

如果 Samba 版本低于 4.9,且创建的 Samba 共享同时要提供给 macOS 用户使用,则需要在 Samba 的 [global] 全局配置部分添加 ea support = yes 选项来启用扩展属性支持,编辑配置文件 /etc/samba/smb.conf,例如:


[global]

    workgroup = SAMBA

    security = user

    passdb backend = tdbsam

    ea support = yes

Samba 4.9+ 默认开启了 ea support 选项,因此无需手动设置。

创建 NFS 共享

因为 NFS 是一种面向 Unix/Linux 系统的共享协议,不涉及对 xattr 扩展属性的要求,如果仅用于 NFS 共享,挂载时无需使用 --enable-xattr 选项,挂载点和子目录可直接用作 NFS 共享。

比如,将 JuiceFS 中的 media 目录通过 NFS 共享,在配置文件 /etc/exports 中添加:


"/mnt/myjfs/media" *(rw,sync,no_subtree_check,fsid=1)

NFS 共享配置的格式为:


<Share Path> <Allowed IPs>(options)

比如要将这个共享设置为仅允许 192.168.1.0/24 这个网段用户访问,则可以修改为:


"/mnt/myjfs/media" 192.168.1.0/24(rw,async,no_subtree_check,fsid=1)

共享选项:

  • rw - 代表允许读和写

  • async - 异步写入,速度快但会降低数据可靠性;也可以设置为 sync 写入速度慢但能提高数据可靠性。

  • no_subtree_check - 禁用子目录检查,这将允许客户端挂载共享目录的父目录和子目录,会降低一些安全性但能提高 NFS 的兼容性。也可以设置为 subtree_check 来启用子目录检查,这样仅允许客户端挂载共享目录和它的子目录。

  • fsid - 文件系统标识符,用于在 NFS 上标识不同的文件系统。在 NFSv4 中,NFS 的根目录所在的文件系统被定义为 fsid=0,其他文件系统需要在它之下且编号唯一。在这里,JuiceFS 就是一个外挂的 FUSE 文件系统,因此需要给它设置一个唯一的标识。

如果不熟悉或不喜欢在命令行管理 Samba 或 NFS 共享,可以使用图形化工具来简化这个过程,Cockpit 就是一个适用的开源工具。

图形化管理:在 Cockpit 中使用

Cockpit 是一个用于 Linux 服务器管理的 Web 界面工具,允许管理员在浏览器中直接执行各种管理任务,而无需使用命令行或其他复杂的工具。通过安装扩展程序,即可支持在图形化界面中管理 Samba 和 NFS 共享。

如果需要在本地长期稳定地提供 Samba 和 NFS 共享,可以考虑设置一个专用的服务器或虚拟机来实现。在专用主机上挂载 JuiceFS 文件系统,并使用 Cockpit 管理工具来配置和管理 Samba 和 NFS 共享,以便提供给本地网络中的计算机和业务系统使用。JuiceFS 负责将用户数据妥善上传到公有云对象存储或缓存到本地,进而提供一个近乎无限的存储空间。

硬件要求

Samba 和 NFS 都是基于网络的文件共享协议,它们的性能受硬件性能、网络带宽、客户端数量和文件访问模式等多种因素的影响。对于只有少量客户端的小规模网络,在较低配置的硬件上仍能很好的运行。

Samba 是面向 Windows 的共享协议,涉及到 Linux 与 Windows 之间的复杂转换,因此在客户端数量多且需要并发访问或涉及大量数据传输的场景,Samba 往往需要更多的 CPU 资源。在高负载环境下,NFS 可以提供更高的效率和吞吐量。

你需要根据实际情况灵活调整硬件和软件配置,请注意以下方面:

  • 准备充足的 SSD 存储:作为 JuiceFS 缓存盘,建议缓存盘容量大于预期热数据量;

  • 提高网络带宽:多客户端并发、大量数据传输时网络带宽可能成为性能瓶颈;

  • 满足 Linux 系统运行的基本配置:比如 4核 CPU、8GB 内存、20GB 系统盘。

系统建议

Cockpit 是红帽公司(Red Hat)赞助的自由软件项目,它在 RHEL 及衍生版中均有预装可以开箱即用,相比 Ubuntu、Debian 等系统兼容性要更好,小问题也会少一些。以下是几个可以优先考虑选用的操作系统:

  • Rocky Linux

  • Almalinux

  • Fedora

当然,也可以根据个人偏好选择 Ubuntu、Debian、Archlinux、openSUSE 等系统。

安装和启动 Cockpit

主流 Linux 发行版均支持安装 Cockpit,如果你使用的系统没有预装,可以参考 Cockpit 官网进行安装。

对于本文使用的 Almalinux 系统,直接在终端启用 Cockpit 服务即可:


sudo systemctl enable --now cockpit.socket

使用 Cockpit

服务启动以后,在浏览器中输入 https://<your-local-ip>:9090 打开 Cockpit 界面(请将 <your-local-ip> 替换成实际的 IP 地址)。

由于涉及对系统的管理,应该使用具有 sudo 权限的账号或 root 用户登陆。

Cockpit 自带 Web Shell(基于网页的终端),所有涉及命令行的操作可以直接在这里执行,相对 SSH 登陆要方便很多。

安装 File Sharing 插件

Cockpit 本身默认只提供了系统管理最基本的功能,通过安装插件来可以增加更多管理功能,查看 Cockpit 支持的插件。

在插件列表中可以找到 File Sharing,这是一个由 45Drives 开发的第三方插件,作用是为 Cockpit 提供 Samba 和 NFS 共享管理界面。

访问 File Sharing 源码仓库,根据系统选择对应的软件包,在 Cockpit 终端执行命令进行下载(此处为示例,建议选择下载最新版):


curl -LO https://github.com/45Drives/cockpit-file-sharing/releases/download/v3.3.4/cockpit-file-sharing-3.3.4-1.el8.noarch.rpm

安装依赖的包和插件:


# 安装依赖的包

sudo dnf install fuse samba nfs-utils

# 安装插件

sudo dnf install ./cockpit-file-sharing-3.3.4-1.el8.noarch.rpm

安装完毕刷新页面即可看到 File Sharing 插件菜单和界面。

安装 JuiceFS 客户端

在终端执行以下命令可以一键安装 JuiceFS 最新稳定版客户端:


curl -sSL https://d.juicefs.com/install | sh -

也可以参考 JuiceFS 安装文档 了解其他安装方式。

创建 JuiceFS 文件系统

一个 JuiceFS 文件系统由以下两个部分组成:

  • 对象存储:负责存储数据,查看 JuiceFS 支持的对象存储。

  • 元数据引擎:负责存储文件元数据的数据库,查看 JuiceFS 支持的数据库。

公有云对象存储大多涉及存储费用、下行流量费用和 API 调用请求费用,请根据实际需求进行评估和选择。部分云计算公司会针对对象存储各个计费项提供“资源包”,相比按量付费会有一定的优惠,可以按需选用。为了保证读写速度,建议在创建 Bucket 时选择与你物理距离更近的地域。另外,JuiceFS 虽然同时支持标准存储和低频存储,但由于低频存储涉及最低存储时间和取回费用,对于本文介绍的内网数据共享场景而言,建议选择标准存储,私有读写。

由于本文介绍的是类似“云存储网关”的场景,即 JuiceFS 运行在本地的独立主机上,通过 Samba 和 NFS 共享协议提供存储给内网用户和业务系统使用,在元数据引擎方面可以有更灵活的选择:

  • 如果只在一个内网中使用,可以选用 SQLite、BadgerDB 这样的单机数据库,也可以自行在内网部署 Redis、MySQL 等数据库使用。

  • 如果有多地、多局域网需要同时共享使用 JuiceFS 文件系统,则应使用能够通过互联网访问的数据库,这种场景选择云平台的 RDS 数据库或自行在云服务器上部署 Redis、MySQL、PostgreSQL 等会是更好的选择。

下面是一个使用 SQLite 单机数据库作为元数据引擎创建 JuiceFS 文件系统的示例:


juicefs format --storage oss \

--bucket https://myjfs.oss-cn-shanghai.aliyuncs.com \

--access-key your-access-key \

--secret-key your-secret-key \

sqlite3:///home/herald/myjfs.db \

myjfs

创建文件系统时有以下几个细节需要注意:

  • 不同的对象存储有相应的类型名,比如 AWS 为 s3,阿里云为 oss,腾讯云为 cos 等,更多类型请参考 JuiceFS 文档。

  • 如果平台分别提供了内网和外网 Bucket 地址,需要选择外网地址(因为需要从本地访问)。

  • Access Key 和 Secret Key 用于访问对象存储时的身份认证,请参考所选对象存储的文档了解如何创建。

  • 数据库地址支持绝对路径和相对路径,当配置开机自动挂载时需要使用绝对路径。

挂载 JuiceFS 文件系统

对于新创建的 JuiceFS 文件系统,可以先手动挂载一次,确认无误后再配置开机自动挂载,例如:


sudo juicefs mount --enable-xattr \

--cache-dir /your-ssd \

--cache-size 1024000 \

sqlite3:///home/herald/myjfs.db \

/mnt/myjfs

这是前台挂载,JuiceFS 客户端会实时输出关键的操作信息,你可以据此来排查解决警告和错误。

如果执行命令时提示 sudo: juicefs: command not found,请修改 /etc/sudoers 文件,修改 secure_path 天添加 /usr/local/bin,修改后类似这样:


Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

确认挂载没有问题,接下来配置 JuiceFS 开机自动挂载。使用快捷键 ctrl + c 结束程序,然后执行命令,创建一个名为 mount.juicefs 的客户端软连接:


sudo ln -s /usr/local/bin/juicefs /sbin/mount.juicefs

编辑 /etc/fstab 文件,另起一行填入 JuiceFS 的挂载信息,例如:


# <元数据引擎 URL> <挂载点> <文件系统类型> <挂载选项>

sqlite3:///home/herald/myjfs.db /mnt/myjfs juicefs _netdev,max-uploads=50,writeback,cache-size=1024000,enable-xattr 0 0

其中涉及的挂载选项(请根据实际情况调整具体的值):

  • _netdev 指示系统在网络设备可用之前不要挂载文件系统,这对于需要网络访问的文件系统很重要。

  • max-uploads=50 挂载选项限制同时上传到文件系统的最并发数,有助于防止文件系统过载。

  • writeback 挂载选项用来开启写缓存,文件先写到本地缓存然后在后台上传到公有云对象存储。 可以提高性能,但写入数据时意外断电可能会导致数据丢失。

  • cache-size=1024000 挂载选项指定用于文件系统的缓存大小,以 MiB 为单位,这里设置了 1TB 缓存。

  • enable-xattr 挂载选项让 JuiceFS 启用 xattr 扩展属性支持。

因为 /etc/fstab 以 root 用户身份执行挂载,因此在挂载信息中无需添加 allow_other 挂载选项。

重启或执行以下命令挂载 JuiceFS:


# 重载 systemd 进程

sudo systemctl daemon-reload

# 挂载全部文件系统

sudo mount -a

创建 Samba 共享

回到 File Sharing 插件界面

对于 Samba 版本低于 4.9 的用户,且需要在 macOS 中访问共享,请在 Samba 选项卡中展开 Global 的 Advanced Settings,添加 ea support = yes 启用面向苹果产品的扩展属性支持。

然后开始创建共享,点击 Shares 部分的 + 开始创建 Samba 共享。

  • Share Name:共享名称,支持中文。
  • Share Description:可选的共享描述
  • Path:共享文件夹的路径,填写 JuiceFS 的挂载点或子目录。如果指定的目录不存在,可以点击下方的 Create now 进行创建。点击下方的 Edit Permissions 可以调整目录的权限。

其他选项可以根据需要自行调整

点击 Confirm 按钮完成创建。在 Windows 或 macOS 上通过文件管理器尝试访问,这里以 macOS 为例:

打开 Finder,使用快捷键 command + k,在地址栏输入 JuiceFS 所在主机的内网 IP 地址,例如:

输入用户名和密码验证身份,然后在弹出的共享目录中选择要打开 Samba 共享目录

如果打开共享发现没有访问权限,可以回到 File Sharing 找到对应的共享,通过 Edit Permissions 调整目录权限。

与此同时,还可以结合 Cockpit 的用户账户管理功能,根据用户和组来分配 Samba 共享的访问权限,从而实现灵活的多用户、多权限的共享访问和管理能力。

Samba 用户问题

Samba 有一套自己的用户数据库,它与操作系统用户之间是独立的,但是当在 Samba 数据库中创建了与系统相同的用户时,系统会自动进行映射,从而实现在 Samba 共享中显示用户 Home 目录的功能。

比如,我的系统账户是 herald,我可以这样为他创建 Samba 账户:


sudo smbpasswd -a herald

根据命令提示设置密码即可,Samba 账户可以设置与系统用户不同的密码。

你还可以安装 Cockpit Identities 插件,可以在图形化用户界面来管理系统账户和 Samba 账户。

创建 NFS 共享

与 Samba 共享的创建类似,在 File Sharing 中切换到 NFS 标签,在 Shares 中点击 + 添加共享:

  • Share Path:共享目录的路径,填写 JuiceFS 的挂载点或子目录。如果指定的目录不存在,可以点击下方的 Create now 进行创建。点击下方的 Edit Permissions 可以调整目录的权限。

  • Clients:用来设置 NFS 共享允许的客户端,Host 设置允许的主机地址,Settings 设置挂载参数。

Tips:如前述,JuiceFS 是外挂的 FUSE 文件系统,使用它作为共享目录,需要设置一个大于 0 的 fsid,例如:rw,async,no_subtree_check,fsid=1

然后使用任何有 NFS 客户端的主机挂载即可,例如:


sudo mount -t nfs 192.168.1.26:/mnt/myjfs/nfs mnt

macOS 挂载 NFS

macOS 支持挂载 NFS 共享,但执行挂载命令时会报错 Operation not permitted,可以使用 -o resvport 参数来解决这个问题,例如:


sudo mount -t nfs -o resvport 192.168.1.26:/mnt/myjfs/nfs mnt

总结

本文介绍了如何使用 JuiceFS 文件系统作为 NFS 和 Samba 的共享存储,实现一个面向内网且几乎没有容量上限的共享存储空间。通过引入 Cockpit 的图形化管理界面,让读者可以更方便地管理多用户、多权限的 Samba 和 NFS 共享。另外还分享了各种共享在挂载访问时常见的问题和解决方法,希望这篇内容能够对你有一些帮助,如果有其他疑问欢迎加入 JuiceFS 社区与大家共同交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/841849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

产品体系架构202308版

1.前言 当我们不断向前奔跑时&#xff0c;需要回头压实走过的路。不断扩张的同时把相应的内容沉淀下来&#xff0c;为后续的发展铺垫基石。 不知从何时起&#xff0c;产品的架构就面向了微服务/中台化/前后端分离/低代码化/分布式/智能化/运行可观测化的综合体&#xff0c;让…

API接口用例生成器

一、前言 随着自动化测试技术的普及&#xff0c;已经有很多公司或项目&#xff0c;多多少少都会进行自动化测试。 目前本部门的自动化测试以接口自动化为主&#xff0c;接口用例采用 Excel 进行维护&#xff0c;按照既定的接口用例编写规则&#xff0c;对于功能测试人员来说只…

SQL Server数据库如何添加Oracle链接服务器(Windows系统)

SQL Server数据库如何添加Oracle链接服务器 一、在添加访问Oracle的组件1.1 下载Oracle的组件 Oracle Provider for OLE DB1.2 注册该组件1.2.1 下载的压缩包解压位置1.2.2 接着用管理员运行Cmd 此处一定要用管理员运行&#xff0c;否则会报错 二、配置环境变量三、 重启SQL Se…

再探C++——默认成员函数

目录 一、构造函数 二、析构函数 三、赋值运算符 四、拷贝构造 如果一个类中没有成员&#xff0c;我们称为空类。空类&#xff0c;也存在6个默认的类成员函数。 默认成员函数&#xff1a;用户不显示地写&#xff0c;编译器会默认生成的函数叫做默认成员函数。 6个默认成员…

系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估&#xff08;二&#xff09;【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…

山西电力市场日前价格预测【2023-08-08】

日前价格预测 预测明日&#xff08;2023-08-08&#xff09;山西电力市场全天平均日前电价为332.93元/MWh。其中&#xff0c;最高日前电价为367.72元/MWh&#xff0c;预计出现在19: 45。最低日前电价为297.45元/MWh&#xff0c;预计出现在13: 30。 价差方向预测 1&#xff1a; 实…

导出LLaMA等LLM模型为onnx

通过onnx模型可以在支持onnx推理的推理引擎上进行推理&#xff0c;从而可以将LLM部署在更加广泛的平台上面。此外还可以具有避免pytorch依赖&#xff0c;获得更好的性能等优势。 这篇博客&#xff08;大模型LLaMa及周边项目&#xff08;二&#xff09; - 知乎&#xff09;进行…

ctfshow-web4

0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 <?php include($_GET[url]);?> 0x02 Write Up 和web3是相同的内容&#xff0c;这里可以通过任意文件读取的方式来进行利用&#xff0c;这里根据返回包知道是nginx&#xff1a; 默认nginx日志是&#xff1a;/var/log/…

基于PINN的传播动力学研究

分享者&#xff1a;中国传媒大学大数据分析与挖掘实验室博士生张志强 众所周知&#xff0c;我们处于网络信息大爆炸的时代。现代互联网产生了大量的舆情信息&#xff0c;其中很多信息并不是正常的信息&#xff0c;是因为在网络中存在着大量水军或部分恶意造谣者。国家非常重视…

【C++】C++11 新特性总结 | C++ 常见设计模式总结(秋招篇)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言介绍几种C11新特性介绍一下自动类型推导auto和decltype关键字的用法举例讲一下范围基于的for循环介绍一下列表初始化讲一下右值引用&#xff0c;和左值引用的区…

Java数据类型,你不想不学会都不行~

——每一种数据都定义了明确的数据类型&#xff0c;在内存中分配了不同大小的内存空间&#xff08;字节&#xff09; 思维导图 一.整数类型 1.什么是整数类型 —— 用int、short、byte、long存储的整数值就是整数类型 2.整数的类型 类型 所占的字节数 数值…

Chrome开发者工具介绍

Chrome开发者工具介绍 前言1 打开DevTools2 命令菜单3 Elements面板ConsoleJavaScript调试Network 前言 Chrome开发者工具是谷歌浏览器自带的一款开发者工具&#xff0c;它可以给开发者带来很大的便利。常用的开发者工具面板主要包含Elements面板、Console面板、Sources面板、…

【一】SPI IP核使用

一、spi是串行外设接口&#xff08;serial peripheral interface&#xff09;,是高速的、全双工、同步通信总线&#xff0c;标准的spi仅仅使用4个引脚 spi ip核框图&#xff1a; 二、spi核的寄存器描述 三、配置spi核 四、SPI内核编程 alt_avalon_spi_command(alt_u32 base,alt…

React Dva项目 简单引入models中的所有JS文件

我们前面接触的 Dva项目 models目录下的文件还要一个一个引入 其实体验并不是很好 而且如果项目很大那就比较麻烦了 我们可以在 models 下创建一个 index.js 文件 编写代码如下 const context require.context("./", false, /\.js$/); export default context.key…

Java02-迭代器,数据结构,List,Set ,Map,Collections工具类

目录 什么是遍历&#xff1f; 一、Collection集合的遍历方式 1.迭代器遍历 方法 流程 案例 2. foreach&#xff08;增强for循环&#xff09;遍历 案例 3.Lamdba表达式遍历 案例 二、数据结构 数据结构介绍 常见数据结构 栈&#xff08;Stack&#xff09; 队列&a…

如何利用模拟考试系统提升学生复习效果

随着教育技术的发展&#xff0c;现代学生已经不再局限于传统的课本学习方式。模拟考试系统作为一种新型的教学工具&#xff0c;已经逐渐被学校和教师们广泛采用。它不仅能够帮助学生预测和评估自己的学习水平&#xff0c;还可以有效提升学生的复习效果。 第一&#xff0c;树立…

微信小程序集成V3支付接口

官方文档地址&#xff1a;https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_8_1.shtml 小程序开通微信支付 微信小程序集成参考最新先程序集成文档 yml配置&#xff1a; x-pay:v3:#微信关联的小程序的appidappId: wx281xxxxxxxxxxx#微信支付商户号mchId: 164803…

深度学习,计算机视觉任务

目录 计算机视觉任务 1.K近邻算法 2.得分函数 3.损失函数的作用 4.向前传播整体流程 5.反向传播计算方法 计算机视觉任务 机器学习的流程&#xff1a; 数据获取 特征工程 建立模型 评估与应用 计算机视觉&#xff1a; 图像表示&#xff1a;计算机眼中的图像&#…

实际工作中通过python+go-cqhttp+selenium实现自动检测维护升级并发送QQ通知消息(程序内测)

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 首先&#xff0c;今年比较忙没有多余时间去实操创作分享文章给大家&#xff0c;那就给大家分享下博主在实际工作中的一点点内容吧&#xff0c;就当交…

2024考研408-计算机网络 第四章-网络层学习笔记

文章目录 前言一、网络层的功能1.1、网络层功能概述&#xff08;三种功能介绍&#xff09;1.2、SDN基本概念1.2.1、理解转发与路由选择1.2.1.1、转发1.2.1.2、路由选择 1.2.2、数据平面&#xff08;转发&#xff09;1.2.3、控制平面&#xff08;路由计算与选择&#xff09;实现…