一、NFS简介

NFS是Network File System的缩写。
NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本。
NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。
NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致。

NFS结构
NFS服务配置_第1张图片
NFS原理
NFS服务配置_第2张图片

二、服务端配置NFS

在坐实验前,准备两台虚拟机,A服务端(192.168.242.128),B客户端(192.168.242.129)。

1、安装NFS服务

[root@zlinux ~]# yum install -y nfs-utils      //yum工具安装nfs-utils时会一并安装recbind

2、编辑配置文件

[root@zlinux ~]# vim /etc/exports                                 //加入以下内容

/home/nfstestdir 192.168.241.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)

小括号内的权限选项含义:

rw: 读写
ro: 只读
sync: 同步模式,内存数据实时写入磁盘
async :非同步模式
no_root_squash: 客户端挂载NFS共享目录后,root用户不受约束,权限很大
root_squash: 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
all_squash: 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
anonuid/anongid: 和上面几个选项搭配使用,定义被限定用户的uid和gid

3、创建目录并修改权限

[root@zlinux ~]# mkdir /home/nfstestdir
[root@zlinux ~]# chmod 777 /home/nfstestdir/

4、查看服务是否启动

[root@zlinux ~]# netstat -lntp            //111端口说明rpcbind已启动
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      800/nginx: master p 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      781/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1321/master         
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      800/nginx: master p 
tcp6       0      0 :::3306                 :::*                    LISTEN      1331/mysqld         
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::22                   :::*                    LISTEN      781/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1321/master         
[root@zlinux ~]# ps aux |grep rpc          //rpcbind服务已启动
rpc        2476  0.0  0.0  64964  1048 ?        Ss   19:11   0:00 /sbin/rpcbind -w
root       3931  0.0  0.0 112680   972 pts/0    R+   21:02   0:00 grep --color=auto rpc
[root@zlinux ~]# systemctl start nfs                       //启动nfs服务
[root@zlinux ~]# ps aux |grep nfs
root       3983  0.0  0.0      0     0 ?        S<   21:04   0:00 [nfsd4_callbacks]
root       3989  0.0  0.0      0     0 ?        S    21:04   0:00 [nfsd]
root       3990  0.0  0.0      0     0 ?        S    21:04   0:00 [nfsd]
root       3991  0.0  0.0      0     0 ?        S    21:04   0:00 [nfsd]
root       3992  0.0  0.0      0     0 ?        S    21:04   0:00 [nfsd]
root       3993  0.0  0.0      0     0 ?        S    21:04   0:00 [nfsd]
root       3994  0.0  0.0      0     0 ?        S    21:04   0:00 [nfsd]
root       3995  0.0  0.0      0     0 ?        S    21:04   0:00 [nfsd]
root       3996  0.0  0.0      0     0 ?        S    21:04   0:00 [nfsd]
root       4002  0.0  0.0 112680   976 pts/0    R+   21:04   0:00 grep --color=auto nfs
[root@zlinux ~]# systemctl enable nfs                 //设为开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@zlinux ~]# systemctl enable rpcbind

三、NFS客户端设置

先安装好nfs-utils安装包。

1、查看服务端共享目录

[root@zlinux02 ~]# showmount -e 192.168.242.128
Export list for 192.168.242.128:
/home/nfstestdir 192.168.1.0/24

使用showmount -e IP命令,可查看NFS共享情况。

2、在客户端挂载NFS

[root@zlinux02 ~]# mount -t nfs 192.168.242.128:/home/nfstestdir /mnt/
[root@zlinux02 ~]# df -h              //ke可以看到增加了/mnt分区。
文件系统                          容量  已用  可用 已用% 挂载点
/dev/sda3                          26G  2.7G   24G   11% /
devtmpfs                          903M     0  903M    0% /dev
tmpfs                             912M     0  912M    0% /dev/shm
tmpfs                             912M  8.6M  904M    1% /run
tmpfs                             912M     0  912M    0% /sys/fs/cgroup
/dev/sda1                         197M  109M   88M   56% /boot
tmpfs                             183M     0  183M    0% /run/user/0
192.168.242.128:/home/nfstestdir   26G  3.4G   23G   14% /mnt

3、创建测试文件

# 客户端创建查看
[root@zlinux02 ~]# cd /mnt/  
[root@zlinux02 mnt]# touch nfstestfile.txt
[root@zlinux02 mnt]# ls -l
总用量 0
-rw-r--r--. 1 mysql mysql 0 3月  26 21:27 nfstestfile.txt

# 服务端查看
[root@zlinux ~]# ls -l /home/nfstestdir/
总用量 0
-rw-r--r--. 1 mysql mysql 0 3月  26 21:27 nfstestfile.txt

#不管用哪个用户操作,将以1000uid,1000gid 操作
[root@zlinux ~]# id mysql
uid=1000(mysql) gid=1000(mysql) 组=1000(mysql)

四、exportfs命令

exportfs命令常用选项:

-a 全部挂载或者全部卸载
-r 重新挂载
-u 卸载某个目录
-v 显示共享目录

常用组合: exportfs -arv
服务端更改配置文件后,不重启服务,直接执行该命令就可以使更改后的配置文件生效。
注意: 在重启nfs服务之前需要先将所有挂载点卸载,否则将发生程序错误,严重者会拖垮系统。
服务端修改:

[root@zlinux ~]# vim /etc/exports                  //增加一行以下内容

/tmp/ 192.168.242.0/24(rw,sync,no_root_squash)

[root@zlinux ~]# exportfs -arv
exporting 192.168.242.0/24:/tmp
exporting 192.168.242.0/24:/home/nfstestdir

客户端查看:

[root@zlinux02 ~]# showmount -e 192.168.242.128
Export list for 192.168.242.128:
/tmp             192.168.242.0/24
/home/nfstestdir 192.168.242.0/24
[root@zlinux02 ~]# showmount -e 192.168.242.128
Export list for 192.168.242.128:
/tmp             192.168.242.0/24
/home/nfstestdir 192.168.242.0/24

五、NFS客户端问题

客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody
客户端挂载时加上-o nfsvers=3
客户端和服务端都需要
vim /etc/idmapd.conf
把 "#Domain = local.domain.edu" 改为 "Domain = xxx.com" (域名自定义),然后再重启rpcidmapd服务