什么是NFS
共享存储,文件服务器
NFS基本概述
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
为什么使用NFS
1.实现多台服务器之间文件共享
2.实现多台服务器之间数据一致
NFS应用
**1.没有NFS**
1.A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。
2.B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户传的图片。
![]()
有NFS共享存储的时候
1.A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储
2.B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了
![]()
NFS原理
1.用户进程访问NFS客户端目录
2.NFS将请求转化成函数
3.NFS客户端与服务端建立TCP\IP连接
4.NFS服务端接收请求,会调用portmap进行端口映射
5.服务端rpc.nfsd进程进行判断NFS客户端是否可以连接
6.如果可以连接,rpc.mount进程会对客户端进行判断允许的操作
7.都通过则可以对服务端磁盘进行操作
![]()
NFS实践
| 主机 |
ip |
角色 |
| nfs |
172.16.1.31 |
服务端 |
| web01 |
172.16.1.7 |
客户端 |
.服务端
1关闭防火墙
[root@nfs ~]# systemctl stop firewalld
[root@nfs ~]# systemctl disable firewalld
2关闭selinux
[root@nfs ~]# setenforce 0
[root@nfs ~]# vim /etc/selinux/config
SELINUX=disabled
3安装NFS和rpcbind
[root@nfs ~]# yum install -y nfs-utils rpcbind
#如果是centos6需要单独安装rpcbind,centos7可以不单独安装
4配置
NFS服务程序的配置文件为/etc/exports,需要严格按照共享目录的路径 允许访问的NFS客户端(共享权限参数)格式书写,定义要共享的目录与相应的权限,具体书写方式如下图所示。
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
| 语法 |
/data |
172.16.1.0/24 |
(rw,sync,all_squash) |
| 语法含义 |
共享的目录 |
允许连接的客户端网段 |
允许的操作(参数1,参数) |
5创建数据目录
[root@nfs ~]# mkdir /data
6启动NFS
[root@nfs ~]# systemctl start rpcbind nfs-server
#如果是centos6,启动时必须先启动rpcbind,centos7会自动启动
#验证启动
[root@nfs ~]# ps -ef | grep nfs
7验证NFS配置
[root@nfs ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)
客户端
1关闭防火墙
[root@nfs ~]# systemctl stop firewalld
[root@nfs ~]# systemctl disable firewalld
2关闭selinux
[root@nfs ~]# setenforce 0
[root@nfs ~]# vim /etc/selinux/config
SELINUX=disabled
3安装NFS和rpcbind
[root@nfs ~]# yum install -y nfs-utils rpcbind
4查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
5启动rpcbind
[root@web01 ~]# systemctl start rpcbind
6挂载
[root@web01 ~]# mkdir /data
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /data
#验证
[root@web01 ~]# df -h
172.16.1.31:/data 98G 1.2G 97G 2% /data
7写入文件测试
[root@web01 ~]# cd /data
[root@web01 /data]# mkdir dir
mkdir: cannot create direct‘dir’: Permission denied
#权限不足,服务端data目录权限是root
#服务端修改权限
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data/
#客户端再次写入数据
[root@web01 /data]# mkdir dir
[root@web01 /data]# ll
total 0
drwxr-xr-x 2 nfsnobody nfsnobody 6 Aug 13 23:43 dir
NFS使用
1.挂载
NFS客户端的配置步骤也十分简单。先使用showmount命令,查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址”。
查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
挂载命令
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /data
mount #挂载命令
-t #指定挂载的文件类型
nfs #挂载类型是NFS
172.16.1.31 #远端挂载的主机IP
:/data #远端挂载的主机目录
/data #本地要挂载的目录
卸载命令
[root@web01 ~]# umount 172.16.1.31:/data
[root@web01 ~]# umount /data
卸载时需要注意
#卸载时,不要在要卸载的目录里面进行卸载
0
umount.nfs4: /data: device is busy
#强制卸载
[root@web01 /data]# umount -lf /data
**1.卸载时,不要在要卸载的目录里面进行卸载**
**2.执行挂载目录时,本地要挂载的目录尽量不要有数据,如果有数据,不会丢失只是被盖住,取消挂载后仍然存在**
六、NFS配置详解
| nfs共享参数 |
参数作用 |
| rw(常用) |
读写权限 |
| ro(不常用) |
只读权限 |
| root_squash(不常用) |
当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 |
| no_root_squash(不常用) |
当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 |
| all_squash(常用) |
无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 |
| no_all_squash(不常用) |
无论NFS客户端使用什么账户访问,都不进行压缩 |
| sync(常用) |
同时将数据写入到内存与硬盘中,保证不丢失数据 |
| async(不常用) |
优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
| anonuid(常用) |
配置all_squash使用,指定NFS的用户UID,必须存在系统 |
| anongid(常用) |
配置all_squash使用,指定NFS的用户UID,必须存在系统 |
NFS总结
NFS存储优点
1.简单易用,部署方便
2.数据可查,服务稳定
NFS服务缺点
1.存在单点故障, 如果构建高可用维护麻烦web->nfs()->backup
2.NFS数据明文, 并不对数据做任何校验。
3.客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)