一、基本概念

NFS是Network File System的缩写,中文意思是网络文件共享系统,它的主要功能是通过网络让不同的主机系统之间可以共享文件或目录

1.1 常见存储类型

中小企业:
FTP:
Samba:windows与linux之间
NFS: linux与linux之间数据传输
大型企业:分布式存储
Moosefs(mfs)比较落伍,初学者比较简单
GlusterFS
FastDFS 企业应用较多

1.2 原理图

image.png

1.3 NFS存储服务作用

1、实现数据共享存储
2、方便数据操作管理
3、节省购买服务器磁盘开销

二、NFS服务部署

RPC:远程过程调用服务程序,相当于租房的中介
image.png

2.1 服务端部署

1、下载安装程序
rpm -qa | grep -E “nfs|rpc”
yum install -y nfs-utils rpcbind
2、编写nfs配置文件
vim /etc/exports
格式:1 2(3)
image.png
1: 设置数据存储的目录 /data
2: 设置网络一个白名单(允许哪些主机连接到存储服务器进行数据存储)
3: 配置存储目录的权限信息,存储目录一些功能
/data 172.16.1.0/24(rw,sync)
3、创建一个目录并修改权限
mkdir /data
chown -R nfsnobody.nfsnobody /data
4、启动服务程序
systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs
systemctl enable nfs

2.2 客户端部署

1、安装nfs服务软件
yum install -y nfs-utils
2、实现远程挂载共享目录
mount -t nfs 172.16.1.31:/data /mnt

2.3 NFS工作原理

服务端:
1、启动rpc端口,开启111端口
2、启动NFS服务
3、实现NFS服务系向RPC做端口注册
补充:检查nfs服务进程与端口注册信息
没有注册时候:
[root@nfs01 ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 51709 status
NFS服务注册之后信息:
[root@nfs01 ~]# rpcinfo -p localhost
program vers proto port service
100024 1 udp 51709 status
100024 1 tcp 58985 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 48718 nlockmgr
100021 3 udp 48718 nlockmgr
100021 4 udp 48718 nlockmgr
100021 1 tcp 43600 nlockmgr
100021 3 tcp 43600 nlockmgr
100021 4 tcp 43600 nlockmgr
客户端:
1、建立TCP网络连接
2、客户端执行挂载命令,进行远程挂载
3、实现数据远程传输存储
NFS服务端的详细配置说明
实现多个网段主机可以进行挂载
第一种方法:
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)
第二种方法:
/data 172.16.1.0/24(rw,sync)
/data 10.0.0.0/24(rw,sync)
总结:共享目录的权限和哪些因素有关
1)和存储目录的本身权限有关(755,属主:nfsnobody)
2)和配置文件中的权限配置有关(rw/ro,xxx_squash anonuid anongid)

2.4 NFS配置参数权限说明

rw —存储目录是否有读写权限
ro —存储目录是否是只读权限
sync 同步方式存储数据,直接将数据保存到磁盘(数据存储安全)
async 异步方式存储数据 直接将数据保存到内存(数据存储快)
image.png
no_root_squash 不要将root用户身份进行转换
root_squash 将root用户身份进行转换
all_squash 将所有用户身份都进行转换
no_all_squash 不要将普通用户身份进转换

2.5 参数操作演示

1、all_squash参数
vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
[xiang@web01 mnt]$ touch xiang_test.txt
[xiang@web01 mnt]$ ll
total 0
-rw-rw-r— 1 nfsnobody nfsnobody 0 Oct 25 14:06 xiang_test.txt
2、no_all_squash参数
vim /etc/exports
/data 172.16.1.0/24(rw,sync,no_all_squash)
[xiang@web01 mnt]$ touch xiang_test2.txt
[xiang@web01 mnt]$ ll
total 0
-rw-rw-r— 1 xiang xiang 0 Oct 25 14:22 xiang_test2.txt
解决权限问题:
chmod o+w /data
3、root_squash参数
vim /etc/exports
/data 172.16.1.0/24(rw,sync,root_squash)
[root@web01 mnt]# touch xiang_test3.txt
[root@web01 mnt]# ll
-rw-r—r— 1 nfsnobody nfsnobody 0 Oct 25 14:26 xiang_test3.txt
4、no_root_squash参数
vim /etc/exports
/data 172.16.1.0/24(rw,sync,no_root_squash)
[root@web01 mnt]# touch xiang_test4.txt
[root@web01 mnt]# ll
-rw-r—r— 1 root root 0 Oct 25 14:27 xiang_test4.txt

2.6 企业应用配置

image.png

2.6.1 squash参数配置

保证网站存储服务器用户数据安全性
no_all_squash 需要进行配置 共享目录权限为www(即哪个普通用户往里面存数据,该目录权限就改为该用户,同时服务端和客户端需要进行创建相同的用户,且id必须相同)
root_squash 需要进行配置 root—-nfsnobody data目录—-www
以上配置为默认配置(很多服务默认配置都是从安全角度出发)
如何查看默认配置
cat /var/lib/nfs/etab —记录了nfs的默认配置
[root@nfs01 ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)
如何让root用户可以操作管理www用户管理的/data目录
root —-root_squash—-www —-操作—-data目录
anonuid=65534,anongid=65534 —-可以指定映射的用户信息
修改映射用户:www=1002
/data 172.16.1.31:/data (rw,sync,anonuid=1002,anongid=1002)

2.6.2 总结:企业中如何编辑nfs配置文件

01.通用方法
/data 172.16.1.0/24(rw,sync)
02.特殊情况(让部分人员不能操作存储目录,可以看目录中的数据)
/data 10.0.0.0/24(ro,sync)
03.修改默认的匿名用户
/data 10.0.0.0/24(ro,sync,anonuid=X,anongid=X)

2.6.3 nfs服务问题

01.nfs服务器重启,挂载后创建数据比较慢
服务重启方式不正确
服务重启:
01:restart 重启服务 强制断开所有连接 用户感受不好
02:reload 重启服务(平滑重启) 强制断开没有数据传输的连接

2.7 nfs客户端详细配置说明

2.7.1 客户端NFS挂载

mount -t nfs 172.16.1.31:/data /mnt
如何实现自动挂载
echo “mount -t nfs 172.16.1.31:/data /mnt”>>/etc/rc.local
利用fstab文件
vim /etc/fstab
172.16.1.31:/data /mnt nfs defaults 0 0
特殊的服务已经开启了
centos6:无法实现网络存储服务自动挂载的原因
根据系统服务启动顺序
按照顺序依次启动
先加载/etc/fstab ->network服务(由于network服务在fstab文件之后,所以会导致nfs无法挂载),从而引入了autofs服务,该程序也会开机自启,启动好之后就会重新加载fstab
centos7:无法实现网络存储服务自动挂载的原因
根据系统服务启动顺序
先加载/etc/fstab—network服务,也会出现centos6相同的问题,在centos7中引入了remote-fs.target服务

2.7.2 客户端mount参数说明

rw —-实现挂载后挂载点目录可读可写(默认)
ro —-实现挂载后挂载点目录可读
suid —-在共享目录中可以让setuid权限位生效(默认)
nosuid —-在共享目录中可以让setuid权限位失效,提供共享目录的安全性
exec —-在共享目录中的执行文件可以直接执行
noexec —-在共享目录中的执行文件不可以直接执行 提高共享目录的安全性
auto —-实现自动挂载 配合mount -a命令实现加载fstab文件自动挂载(默认参数)
noauto —-不可以实现自动挂载
nouser —-禁止普通用户可以卸载挂载点
user —-允许普通用户可以卸载挂载点

2.7.3 客户端如何卸载

umount -ls /mnt —强制卸载挂载点
-l 不退出挂载点目录进行卸载
-f 强制进行卸载操作

2.7.4 NFS服务挂在不上问题排查

服务端进行排查
1、检查NFS进程信息是否注册
rpcinfo -p localhost/172.16.1.31
问题分析:
服务启动顺序不对,没有启动nfs服务
2、检查有没有可用存储目录
showmount -e 172.16.1.31
问题原因:
配置文件编写有问题,重启nfs服务
3、在服务端进行挂载测试
是否能够在存储目录中创建或删除数据
客户端进行排查
1、检查NFS进程信息是否注册
rpcinfo -p localhost/172.16.1.31
问题分析:
服务启动顺序不对,没有启动nfs服务
2、检查有没有可用存储目录
showmount -e 172.16.1.31
问题原因:
配置文件编写有问题,重启nfs服务
网络问题
ping IP
telnet IP 111
如何查看一台服务器开启运行了哪些服务器
[root@nfs01 ~]# ll /etc/systemd/system/multi-user.target.wants/