ThankNeko's Blog ThankNeko's Blog
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)

Hoshinozora

尽人事,听天命。
首页
  • 操作系统

    • Linux基础
    • Linux服务
    • WindowsServer笔记
    • Ansible笔记
    • Shell笔记
  • 容器服务

    • Docker笔记
    • Kubernetes笔记
    • Git笔记
  • 数据库服务

    • MySQL笔记
    • ELK笔记
    • Redis笔记
  • 监控服务

    • Zabbix笔记
  • Web服务

    • Nginx笔记
    • Tomcat笔记
  • 数据处理

    • Kettle笔记
  • Python笔记
  • Bootstrap笔记
  • C笔记
  • C++笔记
  • Arduino笔记
  • 分类
  • 标签
  • 归档
  • 随笔
  • 关于
GitHub (opens new window)
  • 操作系统

    • Linux基础

    • Linux服务

      • Rsync文件传输
      • Sersync实时同步
      • NFS文件服务
        • 存储服务介绍
          • NFS介绍
          • 分类
          • 存储服务器的由来
          • RPC介绍
        • NFS服务的部署
          • 服务端
          • 客户端
        • mount参数
        • NFS服务的原理
          • 服务端
          • 客户端
        • NFS服务的默认配置
        • 其他名词解释
          • 异步与同步
          • 用户身份转换
        • 存储服务应用
          • 配置NFS的Squash参数
          • NFS挂载慢问题
      • SSH远程连接
      • Keepalived高可用
      • Supervospr进程管理
      • APT包管理工具
      • Samba文件共享
      • JumpServer堡垒机
      • Linux搭建DNS服务
      • Tmux终端管理
      • Iptables
      • Firewalld防火墙管理
      • OpenVPN代理
      • 本地yum仓库搭建
    • Windows Server笔记

    • Shell笔记

    • Ansible笔记

  • 虚拟化服务

  • 数据库服务

  • 监控服务

  • Web服务

  • 数据处理

  • Ops
  • 操作系统
  • Linux服务
Hoshinozora
2024-03-09
目录

NFS文件服务

# 存储服务介绍

# NFS介绍

NFS是network file system的缩写,中文意思是网络文件共享系统。存储服务器一般存储附件、图片、音频、视频等数据。他的主要功能是通过网络(一般是局域网) 让不同的主机可以访问自己的共享文件或目录。

存储服务器共享出一个目录,客户端将此目录当做设备文件进行挂载,可有多个客户端对此目录同时进行挂载 实现共享。

# 分类

# 集中式存储

集中式存储指数据都集中存储在一台存储服务器,常用集中式存储应用:FTP、NFS、Samba

# 分布式存储

分布式存储值数据分布式存储在多台服务器。用户访问的是存储管理端,类似于RAID卡,分布式存储将一份数据分成多份存放在不同服务器,而RAID是将数据存放在不同磁盘 两者可以相结合。常用分布式存储应用:Moosefs(mfs)、FastDFS、GlusterFS。

# 存储服务器的由来

早期为了解决Web服务器之间的数据不同步,于是使用Rsync进行同步数据,缺点是当服务器过多时,同步的配置会非常繁琐,网络也可能发送拥堵,服务器的存储设备的成本提高。

NFS诞生用户存储数据时,WEB服务器将数据存储到NFS服务器中,实现数据的共享存储,便于数据操作管理,降低其他服务器存储设备的成本。但缺点是无法对不同的用户进行更细的权限划分。

# RPC介绍

远程过程调用服务程序,常用于网络编程。NFS有大量的进程,其中每个端口都不一样,所以需要将NFS的端口全部注册到RPC服务,客户访问时访问RPC的端口即可。

# NFS服务的部署

# 服务端

  1. 安装相关服务
# 检查服务程序是否安装
rpm -qa | egrep "nfs|rpc"
# 没有则安装
yum install -y nfs-utils rpcbind
1
2
3
4
  1. 编写NFS服务配置文件

配置文件:/etc/exports

配置格式:存储目录路径,主机或网段白名单(权限配置/功能选项)

  • 例如:/data 10.86.1.0/24(rw,sync)
  • 允许所有主机可以使用*例如:/data *(rw,sync)

多个网段主机挂载在后面指定多个"主机或网段白名单(权限配置/功能选项)"即可,或者另起一行再写

  • 例如:/data 0.0.0.0/0(rw,sync) 192.168.0.0/24(rw,sync)
cat>/etc/exports<<EOF
/data  0.0.0.0/0(rw,sync)
EOF
1
2
3
  1. 创建存储目录
# 创建存储目录
mkdir /data
# 将属主和属组修改为nobody虚拟用户
chown nobody:nobody /data
1
2
3
4
  1. 启动rpcbind服务和nfs服务
# 先启动rpcbind服务程序 再启动nfs才能注册端口,rpcbind默认111端口
systemctl start rpcbind && systemctl enable rpcbind
systemctl start nfs && systemctl enable nfs
1
2
3

# 客户端

# 安装nfs服务程序,用于识别nfs文件系统
yum install -y nfs-utils

# 创建挂载目录
mkdir /nfs

# 临时挂载配置,主机地址可以是IP或域名
# mount -t nfs [主机地址]:[远程存储目录] [挂载点]

# 永久挂载配置,配置自动挂载远程共享目录,添加到/etc/fstab
# 格式 [主机地址]:[远程存储目录] [挂载点] nfs defaults 0 0
cat>>/etc/fstab<<EOF
192.168.1.51:/data/d01 /nfs nfs defaults 0 0
EOF
mount -a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

CentOS7还需启动remote-fs.target服务。

# mount参数

-t 文件系统类型。

-o 指定挂载方式。

  • rw 可读可写(默认)。
  • ro 只读。

-a 立即加载fstab中的配置。

-lf 强制卸载挂载点。

  • -l 不退出挂载点目录进行卸载。
  • -f 强制进行卸载操作。

suid 使共享目录中suid权限位生效。

nosuid 使共享目录中suid权限位失效,提供共享目录的安全性,防止黑客上传有s权限的命令文件然后执行。

exec 使共享目录中的执行文件可以直接执行,使可以"./[可执行文件]"方式执行文件。

noexec 使共享目录中的执行文件可以直接执行,防止可执行程序直接./执行,比如病毒、木马等。

auto 使开机自动挂载。

noauto 使开机不自动挂载。

user 允许普通用户挂载或卸载挂载点。

nouser 禁止普通用户挂载或卸载挂载点

# NFS服务的原理

# 服务端

  1. 先启动RPC服务,RPC服务开启111端口。

  2. 再启动NFS服务,NFS向RPC服务注册一次端口号。

# 客户端

  1. 客户端执行挂载命令进行远程挂载。

  2. 与服务端建立TCP网络连接。

  3. 实现数据远程传输。

# NFS服务的默认配置

NFS默认记录文件,仅做记录,修改无效:/var/lib/nfs/etab

NFS默认使用的虚拟用户:nobody

NFS配置文件中的权限配置:

  • rw - 存储目录的读写权限。
  • ro - 存储目录的只读权限。
  • sync - 同步方式存储数据。
  • async - 异步方式存储数据。
  • no_root_squash - 不要将root用户进行身份转换。
  • root_squash - 将root用户身份进行身份转换。
  • no_all_squash - 不要将普通用户进行身份转换。
  • all_squash - 将普通用户进行身份转换。

# 其他名词解释

# 异步与同步

异步

  • 接收到数据之后,先放在内存中,数据排队存放到硬盘中,类似缓存服务器中的队列服务。

  • 优点:传输数据快,减轻磁盘压力。

  • 缺点:数据传输不可靠,易丢失数据。

同步

  • 接收到数据之后,直接放到硬盘中。
  • 优点:传输数据可靠,不易丢失数据。
  • 缺点:数据传输慢。

# 用户身份转换

  • 客户端传输数据时,将发送数据的用户映射转换成服务端设置的虚拟用户,来进行数据保存。

# 存储服务应用

# 配置NFS的Squash参数

  • 设置no_all_squash。

    • 防止其他服务器的普通用户随便修改NFS数据目录,需要用户有目录的权限,并且将属主组设为指定用户,属主要两个服务器用户的UID一致。
  • 设置root_squash。

    • 将root用户转换为nfs虚拟用户,并将存储目录设为其他用户而非nfs 则root无法对目录进行操作 所以较安全。

    以上为默认配置,很多服务默认配置都是从安全角度出发。

  • 不设置no_root_squash。

    • 防止其他服务器的root用户随便修改NFS数据目录。
  • 不设置all_squash。

    • 会将所以用户转换为nfs虚拟用户,非常不安全。
  • 让root用户可以操作www用户管理的存储目录(不安全)。

    • 指定映射用户,需要用户的uid,配置中添加 (rw,sync,anonuid=1002,anongid=1002),其他用户登录时,将会映射为指定的用户,差不多同等于 no_root_squash。

# NFS挂载慢问题

nfs服务重启,挂载后创建数据比较慢,可能是服务器重启的方式不正确,能使用reload就不使用restart。

systemctl restart [服务名]

  • 强制重启,即便已处于数据传输状态,也会强制断开,并重启整个服务。

systemctl reload [服务名]

  • 平滑重启,reload重启只会重新连接没有数据传输的连接,其他正在数据传输的连接,会在传输完后再重新连接,并且会生效新的配置,不会重启整个服务。
#Linux#NFS#存储服务#文件服务
Sersync实时同步
SSH远程连接

← Sersync实时同步 SSH远程连接→

最近更新
01
二〇二五年四月十七日随笔
04-17
02
二〇二五年四月十六日随笔
04-16
03
二〇二五年四月九日随笔
04-09
更多文章>
Theme by Vdoing | Copyright © 2022-2025 Hoshinozora | MIT License
湘ICP备2022022820号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式