首页 > 其他分享 >NFS

NFS

时间:2022-12-25 18:48:56浏览次数:29  
标签:0.0 upload nfs node1 NFS root

NFS

NFS1. NFS简介1.1 NFS特点1.2 NFS的应用场景2. 为什么使用NFS?3. NFS原理4. NFS的优缺点4.1 优点4.2 缺点5. NFS配置服务端安装NFS创建目录和文件关闭防火墙配置为只读,非root用户访问为匿名启动nfs服务查看导出客户端安装NFS关闭防火墙并启动nfs挂载开放/nfs/upload目录为172.16.12.0/24网段的数据上传目录,并将所有用户及所属的用户组都映射为nfs-upload,其UID与GID均为300创建nfs-upload组和用户指定uid,gid为300改变upload目录属组为nfs-upload指定所有用户访问都为匿名且uid gid都为300,exportfs重新加载exports文件查看导出


1. NFS简介

NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过网络共享资源。将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,在客户端端看起来,就像访问本地文件一样。

RPC,基于C/S模型。程序可以使用这个协议请求网络中另一台计算机上某程序的服务而不需知道网络细节,甚至可以请求对方的系统调用。

对于Linux而言,文件系统是在内核空间实现的,即文件系统比如ext3、ext4等是在Kernel启动时,以内核模块的身份加载运行的。

1.1 NFS特点

  • NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源

  • 在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样

  • nfs适用于Linux与Unix之间实现文件共享,不能实现Linux与Windows间的文件共享功能

  • nfs是运行在应用层的协议,其监听于2049/tcp和2049/udp套接字上

  • nfs服务只能基于IP进行认证

1.2 NFS的应用场景

nfs有很多实际应用场景,以下是一些常用的场景:

  • 多个机器共享一台CDROM或其他设备。这对于在多台机器中安装软件来说更加便宜与方便

  • 在大型网络中,配置一台中心NFS服务器用来放置所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录

  • 不同客户端可在NFS上观看影视文件,节省本地空间

  • 在客户端完成的工作数据,可以备份保存到NFS服务器上用户自己的路径下

2. 为什么使用NFS?

网络文件系统是应用层的一种应用服务,它主要应用于Linux 和Linux 系统、Linux 和Unix系统之间的文件或目录的共享。对于用户而言可以通过 NFS 方便的访问远地的文件系统,使之成为本地文件系统的一部分。采用NFS之后省去了登录的过程,方便了用户访问系统资源。

3. NFS原理

NFS本身的服务并没有提供数据传递的协议,而是通过使用RPC(远程过程调用 Remote Procedure Call)来实现。当NFS启动后,会随机的使用一些端口,NFS就会向RPC去注册这些端口。RPC就会记录下这些端口,RPC会开启111端口。通过client端和sever端端口的连接来进行数据的传输。在启动nfs之前,首先要确保rpc服务启动。

具体过程如下:

  1. 本地用户要访问nfs服务器中文件,先向内核发起请求,内核处理调用nfs模块及rpc client

  2. rpc client向rpc server发起连接

  3. 在连接之前,NFS服务除了启动nfsd本身监听的端口2049/tcp和2049/udp,还会启动其它进程(如mountd,statd,rquotad等)以完成文件共享,这些进程的端口是不固定的;是每次NFS服务启动时向RPC服务注册的,RPC服务会随机分配未使用的端口

  4. 完成连接,接受访问请求

  5. nfs应用程序向内核发起请求

  6. 内核调用文件系统

然后client端通过获取的NFS端口来建立和server端的NFS连接并进行数据的传输。

以下为启动各服务的作用

rpc:远程过程调用协议,是实现本地调用远程主机实现系统调用的协议。

portmapper:负责分配rpc server的端口,并在client端请求时,负责响应目的rpc server端口返回给client端,工作在tcp与udp的111端口上。

mountd:是nfs服务的认证服务的守护进程,client在收到返回的真正端口时,就会去连接mountd,认证取得令牌。

nfsd:nfs的守护进程,负责接收到用户的调用请求后与内核发出请求并得到调用结果响应给用户,工作在tcp和udp的2049端口。

idmapd:是NFS的一个程序,用来负责远程client端创建文件后的权限问题。

quotad:用用于实现磁盘配额,当client端挂载nfs后可以限制磁盘空间的大小。

4. NFS的优缺点

4.1 优点

a.节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问

b.简单容易上手

c.方便部署非常快速,维护十分简单

4.2 缺点

a.局限性容易发生单点故障,及server机宕机了所有客户端都不能访问

b.在高并发下NFS效率/性能有限

c.客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)

d.NFS的数据是明文的,对数据完整性不做验证

e.多台机器挂载NFS服务器时,连接管理维护麻烦

5. NFS配置

手动搭建一个nfs服务器:

  • - 开放/nfs/shared目录,供所有用户查阅资料

  • - 开放/nfs/upload目录为172.16.12.0/24网段的数据上传目录,并将所有用户及所属的用户组都映射为nfs-upload,其UID与GID均为300

    服务端客户端
    root@node1 root@node2
    192.168.59.128 192.168.59.129

服务端安装NFS

 [root@node1 ~]#  yum -y install nfs-utils
 Repository extras is listed more than once in the configuration
 Last metadata expiration check: 0:00:46 ago on Sun 25 Dec 2022 05:39:45 PM CST.
 Dependencies resolved.
 =============================================================================
  Package                 Architecture Version               Repository Size
 ...      
  libverto-libevent-0.3.0-5.el8.x86_64   nfs-utils-1:2.3.3-46.el8.x86_64  
  python3-pyyaml-3.12-12.el8.x86_64       quota-1:4.04-14.el8.x86_64        
  quota-nls-1:4.04-14.el8.noarch         rpcbind-1.2.5-8.el8.x86_64        
 ​
 Complete!
 [root@node1 ~]#

创建目录和文件

 [root@node1 ~]#  mkdir -p /nfs/shared
 [root@node1 ~]# mkdir -p /nfs/upload
 [root@node1 ~]# cd /nfs/
 [root@node1 nfs]# ls
 shared upload
 [root@node1 nfs]# cd
 [root@node1 ~]# touch /nfs/shared/read.txt
 [root@node1 ~]# echo 'xixi' >> /nfs/shared/read.txt
 [root@node1 ~]# cat /nfs/shared/read.txt
 xixi
 [root@node1 ~]#

关闭防火墙

 [root@node1 ~]# systemctl stop firewalld
 [root@node1 ~]# setenforce 0
 [root@node1 ~]#

配置为只读,非root用户访问为匿名

 [root@node1 ~]# vi /etc/exports
 /nfs/shared *(ro,all_squash)
 /nfs 192.168.59.129(rw)
 [root@node1 ~]#

启动nfs服务

 [root@node1 ~]# systemctl enable --now nfs-server
 Created symlink /etc/systemd/system/multi-user.target.wants/nfs-server.service → /usr/lib/systemd/system/nfs-server.service.
 [root@node1 ~]# systemctl status rpcbind
 ● rpcbind.service - RPC Bind
    Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor >
    Active: active (running) since Sun 2022-12-25 17:50:12 CST; 15s ago
      Docs: man:rpcbind(8)
  Main PID: 31640 (rpcbind)
    Tasks: 1 (limit: 4766)
    Memory: 1.5M
    CGroup: /system.slice/rpcbind.service
            └─31640 /usr/bin/rpcbind -w -f
 ​
 Dec 25 17:50:12 node1 systemd[1]: Starting RPC Bind...
 Dec 25 17:50:12 node1 systemd[1]: Started RPC Bind.
 lines 1-12/12 (END)
 [root@node1 ~]# ss -antl
 State   Recv-Q Send-Q   Local Address:Port     Peer Address:Port Process  
 LISTEN  0       128            0.0.0.0:111            0.0.0.0:*              
 LISTEN  0       128            0.0.0.0:20048          0.0.0.0:*              
 LISTEN  0       64             0.0.0.0:44467          0.0.0.0:*              
 LISTEN  0       128            0.0.0.0:40373          0.0.0.0:*              
 LISTEN  0       128            0.0.0.0:22             0.0.0.0:*              
 LISTEN  0       64             0.0.0.0:2049           0.0.0.0:*              
 LISTEN  0       128               [::]:38023             [::]:*              
 LISTEN  0       128               [::]:111               [::]:*              
 LISTEN  0       128               [::]:20048             [::]:*              
 LISTEN  0       128               [::]:22               [::]:*              
 LISTEN  0       64               [::]:2049             [::]:*              
 LISTEN  0       64               [::]:39621             [::]:*              
 [root@node1 ~]#

查看导出

 [root@node1 ~]# showmount -e 192.168.59.128
 Export list for 192.168.59.128:
 /nfs/shared *
 [root@node1 ~]#

客户端安装NFS

 [root@node2 ~]# yum -y install nfs-utils
 CentOS-8.5.2111 - Base - mirrors.aliyun.com   26 kB/s | 3.9 kB     00:00    
 CentOS-8.5.2111 - Extras - mirrors.aliyun.co  16 kB/s | 1.5 kB     00:00    
 ...
 ​
 Installed:
  gssproxy-0.8.0-19.el8.x86_64           keyutils-1.5.10-9.el8.x86_64      
  libverto-libevent-0.3.0-5.el8.x86_64   nfs-utils-1:2.3.3-46.el8.x86_64  
  python3-pyyaml-3.12-12.el8.x86_64       quota-1:4.04-14.el8.x86_64        
  quota-nls-1:4.04-14.el8.noarch         rpcbind-1.2.5-8.el8.x86_64        
 ​
 Complete!
 [root@node2 ~]#

关闭防火墙并启动nfs

 [root@node2 ~]# systemctl  stop firewalld
 [root@node2 ~]# setenforce 0
 [root@node2 ~]# systemctl start nfs-server rpcbind
 [root@node2 ~]# ss -antl
 State   Recv-Q   Send-Q     Local Address:Port       Peer Address:Port   Process  
 LISTEN   0        128              0.0.0.0:56939           0.0.0.0:*                
 LISTEN   0        128              0.0.0.0:111             0.0.0.0:*                
 LISTEN   0        128              0.0.0.0:20048           0.0.0.0:*                
 LISTEN   0        64               0.0.0.0:32915           0.0.0.0:*                
 LISTEN   0        128              0.0.0.0:22              0.0.0.0:*                
 LISTEN   0        64               0.0.0.0:2049            0.0.0.0:*                
 LISTEN   0        64                 [::]:45837             [::]:*                
 LISTEN   0        128                 [::]:111               [::]:*                
 LISTEN   0        128                 [::]:20048             [::]:*                
 LISTEN   0        128                 [::]:56693             [::]:*                
 LISTEN   0        128                 [::]:22                 [::]:*                
 LISTEN   0        64                 [::]:2049               [::]:*                
 [root@node2 ~]#

挂载

 [root@node2 ~]# mount -t nfs 192.168.59.128:/nfs /media/
 [root@node2 ~]# df -h
 Filesystem           Size Used Avail Use% Mounted on
 devtmpfs             370M     0 370M   0% /dev
 tmpfs               389M     0 389M   0% /dev/shm
 tmpfs               389M   11M 379M   3% /run
 tmpfs               389M     0 389M   0% /sys/fs/cgroup
 /dev/mapper/cs-root   17G  1.9G   16G  12% /
 /dev/sda1           1014M 214M 801M  22% /boot
 tmpfs                 78M     0   78M   0% /run/user/0
 192.168.59.128:/nfs   17G  1.8G   16G  11% /media
 [root@node2 ~]#

开放/nfs/upload目录为172.16.12.0/24网段的数据上传目录,并将所有用户及所属的用户组都映射为nfs-upload,其UID与GID均为300

创建nfs-upload组和用户指定uid,gid为300

 [root@node1 ~]#  groupadd -g 300 nfs-upload
 [root@node1 ~]# useradd -u 300 -g 300 nfs-upload
 [root@node1 ~]# id nfs-upload
 uid=300(nfs-upload) gid=300(nfs-upload) groups=300(nfs-upload)
 [root@node1 ~]#

改变upload目录属组为nfs-upload

 [root@node1 ~]# chown -R 'nfs-upload'.'nfs-upload' /nfs/upload/
 [root@node1 ~]# chmod g+s /nfs/upload/
 [root@node1 ~]#

指定所有用户访问都为匿名且uid gid都为300,exportfs重新加载exports文件

 [root@node1 ~]# vi /etc/exports
 [root@node1 ~]# tail -3 /etc/exports
 /nfs/shared *(ro,all_squash)
 /nfs 192.168.59.129(rw)
 /nfs/upload 172.16.12.0/24(rw,all_squash,root_squash,anonuid=300,anongid=300)
 [root@node1 ~]# exportfs -r
 [root@node1 ~]#

查看导出

 [root@node1 ~]# showmount -e 192.168.59.128
 Export list for 192.168.59.128:
 /nfs/shared *
 /nfs/upload 172.16.12.0/24
 /nfs        192.168.59.129
 [root@node1 ~]#
 

标签:0.0,upload,nfs,node1,NFS,root
From: https://www.cnblogs.com/msl1105/p/17004351.html

相关文章

  • Kubernetes部署StorageClass挂载NFS
    前言只要用过Linux,大概NFS几乎就会是个必学的服务,因此这边要介绍以NFS作为StorageClass后端storage的设定方式,让k8s可以动态的在NFSshare上产生所需要volu......
  • 每天一点基础K8S--K8S中的常用存储方案--emptyDir、hostPath、NFS
    这几天阳了,坐一会儿就腰痛K8S中的常用存储方案背景因为K8S的POD运行了最终的业务,而pod在控制器的管理下可能会出现重建,重建的pod是镜像的新实例,如果一些重要配置文件或......
  • openssh和nfs搭建
    openssh免密登录创建公钥 [root@mashuangle~]#ssh-keygen-trsa Generatingpublic/privatersakeypair. Enterfileinwhichtosavethekey(/root/.ssh/id_......
  • 搭建nfs服务器
    搭建nfs服务器在服务端中安装nfs,并启动[root@liu~]#yum-yinstallnfs-utilsLastmetadataexpirationcheck:0:13:16agoonThu22Dec202207:16:32PMCST.De......
  • kubeasz 安装 K8S 集群启用 NFS 存储问题排查
    目录kubeasz安装Kubernetes集群启用NFS存储,默认情况无法安装使用问题排查集群规划安装Kubernetes集群问题复现配置文件中默认启用nfs存储安装后nfspod无法启动......
  • ubuntu配置nfs
    服务器sudoaptinstallnfs-kernel-server/etc/exports中添加共享目录/home/xpy/cig*(rw,sync,no_root_squash)客户端sudoaptinstallnfs-commonmount-tnfs19......
  • RPC、SQL、NFS属于OSI的哪一层
     第一层:物理层第二层:数据链路层802.2、802.3ATM、HDLC、FRAMERELAY第三层:网络层IP、IPX、ARP、APPLETALK、ICMP第四层:传输层TCP、UDP、SPX第五层:会话层RPC、SQL、N......
  • 使用haneWIN NFS Server搭建nfs服务器,客户机没有写入权限的问题
    背景:Windows电脑上搭建好了nfs服务器:haneWINNFSServer,Linux开发板也成功挂载了共享目录,但是在开发板中没有对共享目录内的内容写的权限。 网上找了挺长时间,最终发现解......
  • NFS服务实现linux硬盘的映射实现文件存储与应用服务的分离
    NFS服务实现linux硬盘的映射实现文件存储与应用服务的分离。实现目标:在服务器A上访问服务器B上指定的文件系统。服务器B配置步骤:1、编辑/etc/exports格式:共享目录指定共享......
  • NFS安装制备器Provisioner
    NFSsubdir外部驱动https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner第一、添加包仓库地址helmrepoaddnfs-subdir-external-provisionerhttps......