网络服务-NFS

1. 什么是 NFS ?

NFS 是 Network File System 的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由 Sun 公司开发, 于 1984 年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端 通过网络访问位于服务器磁盘中的数据,是在类 Unix 系统间实现磁盘文件共享的一种方法
在这里插入图片描述
主要功能是通过网络让不同的机器系统之间可以彼此共享文件和目录。NFS 服务器可以允许 NFS 客户端将远 端 NFS 服务器端的共享目录挂载到本地的 NFS 客户端中。在本地的 NFS 客户端的机器看来,NFS 服务器端共享的目录 就好像自己的磁盘分区和目录一样。一般客户端挂载到本地目录的名字可以随便,但为方便管理,我们要和服务器端 一样比较好

NFS 一般用来存储共享视频,图片等静态数据。
在这里插入图片描述

2.NFS 挂载原理

NFS 是通过网络来进行服务端和客户端之间的数据传输。
两者之间要传输数据就要有相对应的网络端口来进行传 输。
NFS 服务器到底使用什么网络端口来传输数据的,NFS 服务器端其实是随机选择端口来进行数据传输。那 NFS 客户端又是如何知道 NFS 服务器端到底使用的是哪个端口呢?
其实 NFS 服务器时通过远程过程调用(remote procedure call 简称 RPC)协议/服务来实现的。也就是说 RPC 服务会统一管理 NFS 的端口,客户端和服务端通过 RPC 来先沟通 NFS 使 用了哪些端口,之后再利用这些端口(小于 1024)来进行数据的传输。
也就是 RPC 管理服务端的 NFS 端口分配,客户端要传数据,那客户端的 RPC 会先跟服务端的 RPC 去要服务器的端 口,要到端口后再建立连接,然后传输数据。

那 RPC 和 NFS 之间又是如何之间相互通讯的?
首先当 NFS 启动后,就会随机的使用一些端口,然后 NFS 就会向 RPC 去注册这些端口。RPC 就会记录下这些端口。并 且 RPC 会开启 111 端口,等待客户端 RPC 的请求,如果客户端有请求,那服务端的 RPC 就会将记录的 NFS 端口信息告 知客户端。

RPC 和 NFS 的启动顺序是怎样的?
在启动 NFS SERVER 之前,首先要启动 RPC 服务(即 portmap 服务,下同)否则 NFS SERVER 就无法向 RPC 服务区注册, 另外,如果 RPC 服务重新启动,原来已经注册好的 NFS 端口数据就会全部丢失。因此此时 RPC 服务管理的 NFS 程序也 要重新启动以重新向 RPC 注册。
特别注意: 一般修改 NFS 配置文档后,是不需要重启 NFS 的,直接在命令执行

/etc/init.d/nfs reload 
总结:客户端 NFS 和服务端 NFS 通讯过程

1)首先服务器端启动 RPC 服务,并开启 111 端口
2)启动 NFS 服务,并向 RPC 注册端口信息
3)客户端启动 RPC(portmap 服务),向服务端的 RPC(portmap)服务请求服务端的 NFS 端口
4)服务端的 RPC(portmap)服务反馈 NFS 端口信息给客户端。
5)客户端通过获取的 NFS 端口来建立和服务端的 NFS 连接并进行数据的传输。

3. NFS 相关协议及软件安装管理

协议:
RPC(Remote Procedure Call Protocol)——远程过程调用协议
软件:
nfs-utils-* :包括 NFS 命令与监控程序
rpcbind-* :支持安全 NFS RPC 服务的连接

注:通常情况下,是作为系统的默认包安装的 Cent OS6.*之前 rpcbind 叫 portmap

注意:安装好的linux系统里面是默认装好了NFS服务和RPC的服务,只需要配置NFS服务器端的
/etc/exports配置文件 ,设置共享目录的名称和共享主机名称即可,然后先启动RPC服务(默认启动,
一般也不会去主动关闭,因为它不仅仅对NFS服务负责,还对别的服务负责),再启动NFS服务

4. NFS 系统守护进程

nfs: 它是基本的 NFS 守护进程,主要功能是管理客户端是否能够登录服务器
rpcbind: 主要功能是进行端口映射工作。当客户端尝试连接并使用 RPC 服务器提供的服务(如 NFS 服务)时,rpcbind 会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。

5. NFS 服务器的配置

NFS 服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动 NFS 服务器即可。

NFS 服务的配置文件为 /etc/exports,这个文件是 NFS 的主要配置文件,不过系统并没有默认值,所以这个文件不一 定会存在,可能要使用 vim 手动建立,然后在文件里面写入配置内容。

/etc/exports 文件内容格式:

共享目录    客户端 1(访问权限,用户映射,其他) 客户端 2(访问权限,用户映射,其他)a.共享目录:共享目录是指 NFS 服务器共享给客户机使用的目录b.客户端:客户端是指网络中可以访问这个 NFS 共享目录的计算机客户端常用的指定方式:指定 ip 地址的主机:192.168.0.200 指定子网中的所有主机:192.168.88.0 指定域名的主机:www.atguigu.com 指定域中的所有主机:*.atguigu.com 所有主机:*c.设置输出目录的访问权限、用户映射等。访问权限选项: 设置输出目录只读:ro 设置输出目录读写:rw

用户映射选项:
root_squash:将 root 用户的访问映射为匿名(nfsnobody)用户 uid 和 gid;(默认生效)
no_root_squash:保留管理员权限,以服务器管理员的权限管理;
all_squash:将远程访问的用户及所属组都映射为指定 uid、gid 的匿名用户;
anonuid=xxx:将远程访问的所有用户都映射为指定 uid 的匿名用户;
anongid=xxx:将远程访问的所有用户组都映射为指定 gid 匿名组账户;

其它选项:
sync: 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性(同步);
async:将数据先保存在内存缓冲区中,必要时才写入磁盘(异步);

6. NFS 服务器的启动与停止

1、启动 NFS 服务器
为了使 NFS 服务器能正常工作,需要启动 rpcbind 和 nfs 两个服务,并且 rpcbind 一定要先于 nfs 启动。

# service rpcbind start 
# service nfs start 

2、查询 NFS 服务器状态

# service rpcbind status 
# service nfs status   

3、停止 NFS 服务器
要停止 NFS 运行时,需要先停止 nfs 服务再停止 rpcbind 服务,对于系统中有其他服务(如 NIS)需要使用时,不需要 停止 rpcbind 服务

# service nfs stop 
# service rpcbind stop 

4、设置 NFS 服务器的自动启动状态
设置 rpcbind 和 nfs 服务在系统运行级别 2345 自动启动。

# chkconfig --level 2345 rpcbind on 
# chkconfig --level 2345 nfs on 

5、查看 RPC 服务器开启了哪些端口 rpcinfo –p localhost

7. 实验相关实例

  1. 将NFS服务器的/home/zhangsan共享给192.168.115.0网段,rw权限
# vi /etc/exports 
/home/zhangsan 192.168.115.0 (rw)
  1. 重启rpcbind 和nfs 服务
# service rpcbind restart 
# service nfs restart 
# exportfs 
  1. 服务器端查看nfs共享状态
# showmount -e 本机ip 
查看自己共享的服务 
  1. 客户端查看nfs共享状态
# showmount -e NFS服务器IP

在这里插入图片描述
在这里插入图片描述

8. 相关命令

exportfs命令

如果我们在启动了NFS之后又修改了/etc/exports,是不是还要重新启动nfs呢?这个时候我们就可以用exportfs 命令来使改动立刻生效,该命令格式如下:

在这里插入图片描述
在这里插入图片描述

rpcinfo命令

利用rpcinfo -p 可以查看出RPC开启的端口所提供的程序有哪些
其中nfs 开启的是2049,portmapper(rpcbind) 开启的是111,其余则是rpc开启的

-------------------------------------------------华丽的分割线--------------------------------------------

------------------------------------------------我的最简单实验---------------------------------------------
192.168.197.134上进行配置文件/etc/exports文件的编写,内容:

[root@oracle ~]# cat /etc/exports 
/xiehao 192.168.197.135(rw)

先启动rpc,默认已经启动

[root@oracle ~]# netstat -antp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      13395/smbd          
tcp        0      0 0.0.0.0:55647               0.0.0.0:*                   LISTEN      2097/rpc.statd      
tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      -                   
tcp        0      0 0.0.0.0:21252               0.0.0.0:*                   LISTEN      16832/rpc.mountd    
tcp        0      0 0.0.0.0:875                 0.0.0.0:*                   LISTEN      16827/rpc.rquotad   
tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      13395/smbd          
tcp        0      0 0.0.0.0:35276               0.0.0.0:*                   LISTEN      16832/rpc.mountd    
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1935/rpcbind        
tcp        0      0 0.0.0.0:27667               0.0.0.0:*                   LISTEN      16832/rpc.mountd

先在134服务器的根目录创建共享目录/xiehao,注意xiehao目录的权限为可读可写权限,然后启动nfs服务

[root@oracle ~]# service nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]

在192.168.197.135客户端上进行挂载,先创建一个挂载点,根目录下(随便设置)/nfs:

[root@135 /]# ll
total 118
dr-xr-xr-x.   2 root root  4096 Jun 10 05:58 bin
dr-xr-xr-x.   5 root root  1024 Apr  4 09:59 boot
drwxr-xr-x.   2 root root  4096 Mar  4  2016 cgroup
drwxr-xr-x   19 root root  3840 Jun 27 07:20 dev
drwxr-xr-x. 113 root root 12288 Jul  4 23:33 etc
drwxr-xr-x.   7 root root  4096 Jun 29 03:29 home
dr-xr-xr-x.  10 root root  4096 Apr  4 09:51 lib
dr-xr-xr-x.   9 root root 12288 Jun  5 00:07 lib64
drwx------.   2 root root 16384 Apr  4 09:47 lost+found
drwxr-xr-x.   2 root root  4096 Jun 29 02:17 media
drwxr-xr-x.   3 root root  4096 Apr  8 18:49 mnt
drwxr-xr-x    2 root root  4096 Jul  4 11:13 nfs
drwxr-xr-x.  14 root root  4096 Jun 19 07:47 opt
dr-xr-xr-x  194 root root     0 Jun 27 07:20 proc
dr-xr-x---.  26 root root  4096 Jul  4 11:14 root
dr-xr-xr-x.   2 root root 12288 Jun 10 05:58 sbin
drwxr-xr-x.   2 root root  4096 Apr  4 09:47 selinux
drwxr-xr-x.   2 root root  4096 Jun 28  2011 srv
drwxr-xr-x   13 root root     0 Jun 27 07:20 sys
drwxrwxrwt.  24 root root  4096 Jul  4 11:09 tmp
drwxr-xr-x.  13 root root  4096 Apr 11 20:49 usr
drwxr-xr-x.  21 root root  4096 Jun 29 02:07 var
[root@135 /]# mount 192.168.197.134:/xiehao /nfs
[root@135 /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              18G   15G  2.4G  86% /
tmpfs                 931M   76K  931M   1% /dev/shm
/dev/sdb1             2.0G  978M  903M  52% /home/newdisk
/dev/sda1             283M   39M  229M  15% /boot
/dev/sr0              3.7G  3.7G     0 100% /opt/cdrom
192.168.197.134:/xiehao
                       18G   16G  1.4G  92% /nfs
此时两边的文件共享目录里面的东西会同步更新

卸载

两种方式:
1.客户端进行卸载 umount:

[root@135 /]# umount 192.168.197.134:/xiehao
[root@135 /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              18G   15G  2.4G  86% /
tmpfs                 931M   76K  931M   1% /dev/shm
/dev/sdb1             2.0G  978M  903M  52% /home/newdisk
/dev/sda1             283M   39M  229M  15% /boot
/dev/sr0              3.7G  3.7G     0 100% /opt/cdrom

2.停止服务器端的共享
在134上nfs服务器端执行,exportfs –au

[root@oracle etc]# exportfs -au
[root@oracle etc]# 

nfs客户端135 就会自动卸载掉共享点:

[root@135 etc]# df -h     
df: `/nfs': Stale file handle
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              18G   15G  2.4G  86% /
tmpfs                 931M   76K  931M   1% /dev/shm
/dev/sdb1              18G   15G  2.4G  86% /home/newdisk
/dev/sda1              18G   15G  2.4G  86% /boot
/dev/sr0               18G   15G  2.4G  86% /opt/cdrom

自动挂载:

自动挂载:/etc/fstab
格式:<server> : </remote/export> </local/directory> nfs < options> 0 0
#192.168.115.10:/home/zhangsan /media/zhangsan nfs defaults 0 0
#mount –a
编辑文件/etc/fstab,其中倒数第五行,为nfs增加的挂载信息

[root@135 etc]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Thu Apr  4 09:47:52 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/sdb1               /home/newdisk                             ext4    defaults        0 0
UUID=1168ee93-db28-457b-b83d-0f3ea7d94754 /                       ext4    defaults        1 1
UUID=a74072fb-d260-443b-bc4a-feaed7e03b00 /boot                   ext4    defaults        1 2
UUID=b981862f-9184-4603-bf13-a4653aceffe9 swap                    swap    defaults        0 0
192.168.197.134:/xiehao /nfs                    nfs     defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 

使用mount -a 来全部加载fstab里面的挂载点信息,便能实现自动挂载

[root@135 etc]# mount -a
[root@135 etc]# df -h   
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              18G   15G  2.4G  86% /
tmpfs                 931M   76K  931M   1% /dev/shm
/dev/sdb1              18G   15G  2.4G  86% /home/newdisk
/dev/sda1              18G   15G  2.4G  86% /boot
/dev/sr0               18G   15G  2.4G  86% /opt/cdrom
192.168.197.134:/xiehao
                       18G   16G  1.4G  92% /nfs

至此,已经完成nfs简单的配置操作
关于用户权限等复杂配置,需要结合前面的配置文档进行练习,暂时不记录

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值