linux共享文件之NFS
目录
一、什么是NFS
1.基本概述
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
2.为什么使用NFS
- 实现多台服务器之间数据共享
- 实现多台服务器之间数据一致
1.没有NFS时
1.A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。
2.B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户传的图片。
2.如果有NFS
1.A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储
2.B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了
3.NFS应用
- 用户访问NFS客户端,将请求转化为函数
- NFS通过TCP/IP连接服务端
- NFS服务端接收请求,会先调用portmap进程进行端口映射
- Rpc.nfsd进程用于判断NFS客户端能否连接服务端
- Rpc.mount进程用于判断客户端对服务端的操作权限
- 如果通过权限验证,可以对服务端进行操作,修改或读取
二、NFS搭建
1.环境准备
主机 | ip | 角色 |
---|---|---|
web01 | 172.16.1.7 | NFS客户端 |
nfs | 172.16.1.31 | NFS服务端 |
2.服务端
1、安装NFS和rpcbind
[root@nfs ~]# yum install nfs-utils rpcbind -y
2、创建挂载点
[root@nfs ~]# mkdir -p /web/nfs1 # 这是服务器的共享文件夹 是可以随便取名的
3、创建用户
[root@nfs nfs1]# groupadd www -g 666
[root@nfs nfs1]# useradd www -u 666 -g 666 -M -r -s /sbin/nologin
4、配置挂载点
[root@nfs ~]# vim /etc/exports
格式:
[挂载点] [可以访问的IP]([权限])
/web/nfs1 172.16.1.0/20(rw,sync,all_squash,anonuid=666,anongid=666)
5、给挂载点授权
[root@nfs ~]# chown -R www.www /web
6、关闭selinux和防火墙
[root@nfs ~]# setenforce 0
[root@nfs ~]# systemctl disable --now firewalld
7、启动Nfs和rpcbind服务
[root@nfs ~]# systemctl start nfs-server
[root@nfs ~]# systemctl start rpcbind
8、检查服务端是否正常
[root@nfs ~]# showmount -e [服务端的地址,默认是本机地址]
[root@nfs ~]# showmount -e
Export list for nfs:
/web/nfsv1 172.16.1.0/20
[root@nfs ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/web/nfsv1 172.16.1.0/20
[root@nfs ~]# cat /var/lib/nfs/etab
3.客户端
1、安装NFS
[root@web01 opt]# yum install -y nfs-utils
2、创建用户
[root@nfs nfs1]# groupadd www -g 666
[root@nfs nfs1]# useradd www -u 666 -g 666 -M -r -s /sbin/nologin
3、创建目录
[root@web01 opt]# mkdir /opt/nfs/ # 这是客户端的共享文件夹 是可以随便取名的
4、挂载NFS
[root@web01 opt]# mount -t nfs 172.16.1.31:/web/nfs1 /opt/nfs/
5、测试NFS文件同步功能
在web01里的/opt/nfs/里创建文件查看NFS里的/web/nfs1路径下有没有生成相应的文件
三、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的用户GID,必须存在系统 (常用) |
四、搭建考试系统
1.环境准备
主机 | ip | 身份 |
---|---|---|
web01 | 172.16.1.7 | NFS客户端 |
web02 | 172.16.1.8 | NFS客户端 |
web03 | 172.16.1.9 | NFS客户端 |
nfs | 172.16.1.31 | NFS服务端 |
2.搭建WEB服务
1、安装web软件
[root@web01 opt]# yum install httpd php php-devel -y
2、将代码放置于网站的根目录
[root@web01 opt]# cd /var/www/html/
# 把文件拉进linux,并解压文件
3、授权
[root@web01 html]# chown -R www.www /var/www/html
4、关闭selinux和防火墙
[root@nfs ~]# setenforce 0
[root@nfs ~]# systemctl disable --now firewalld
5、修改web软件的用户
[root@web01 html]# vim /etc/httpd/conf/httpd.conf
User www
Group www
6、启动web软件
[root@web01 html]# systemctl start httpd
7、创建并授权存储目录
[root@web01 html]# mkdir upload
[root@web01 html]# chown www.www upload
7、测试
1、上传文件
直接拖拽至linux上
2、访问
http://172.16.1.7/upload/1_linux.jpg
3.服务端
1、修改NFS配置文件
[root@nfs nfs1]# vim /etc/exports
/web/upload 172.16.1.0/20(rw,sync,all_squash,anonuid=666,anongid=666)
2、创建挂载点
[root@nfs nfs1]# mkdir /web/upload
[root@nfs nfs1]# chown www.www /web/upload
3、重启NFS
[root@nfs nfs1]# systemctl restart nfs-server rpcbind
4.客户端
1、客户端安装NFS软件
[root@web01 html]# yum install nfs-utils -y
[root@web02 html]# yum install nfs-utils -y
[root@web03 html]# yum install nfs-utils -y
2、挂载
[root@web01 html]# mount -t nfs 172.16.1.31:/web/upload /var/www/html/upload
[root@web02 html]# mount -t nfs 172.16.1.31:/web/upload /var/www/html/upload
[root@web03 html]# mount -t nfs 172.16.1.31:/web/upload /var/www/html/upload
3、测试
用web2上传,web3查看
五、NFS小结
0.特别注意
nfs服务器设置好配置后,就可以让其他客户端去挂载,然后就可以去共享文件。所有的共享文件是保存在NFS上的,客户端只是能看到文件并使用,并不会占用客户端的资源,并且共享的文件是客户端挂载后传入的文件,之前存在的文件并不会共享,反而在挂在后会隐藏,取消挂载就会再次出现
1.NFS存储优点
- NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求
- NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见
2.NFS存储局限
- 存在单点故障, 如果构建高可用维护麻烦 web -> nfs -> backup
- NFS数据明文, 并不对数据做任何校验
- 客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)
3.NFS永久挂载
1、通过开机自启动脚本挂载
[root@web01 html]# vim /etc/rc.local
/usr/bin/mount -t nfs 172.16.1.31:/web/upload /var/www/html/upload
[root@web01 html]# chmod +x /etc/rc.d/rc.local
2、通过/etc/fstab配置文件
[root@web02 ~]# vim /etc/fstab
# 挂载点 挂载的目录 类型 设置默认权限 0 不备份 1 备份 0 不检查 1 检查
172.16.1.31:/web/upload /var/www/html/upload nfs defaults 0 0
[root@web02 ~]# mount -a
# 第2种方法要确保服务器是开启的,不然客户端是无法开启的。