一、什么是NFS共享存储
1.NFS基本概述
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS(音频、小说、视频),glusterfs(iso镜像),HDFS, NFS(图片、静态页)解决共享前端web共享。
2.为什么使用NFS
1.为了实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
二、NFS企业应用
1.没有NFS时
A用户上传图片经过负载均衡,上传请求调度至WEB01服务器。
B用户访问A上传的图片时,被负载均衡调度到了WEB02上,由于WEB02上没有A用户上传的图片,所以B用户无法看到。
2.有NFS共享存储的时候
1、A用户上传图片无论被负载均衡调度至WEB01还是WEB02,最终数据都被写入至共享存储;
2、B用户访问A用户上传的图片时,无论被调度至WEB01还是WEB02,最终都会上共享存储访问对应的文件,这样就可以访问到资源了。
三、NFS原理
1.用户进程访问NFS客户端,使用不同的函数对数据进行处理
2.NFS客户端通过TCP/IP连接服务端;
3.NFS服务端接受请求后,会先调用portmap进程进行端口映射;
4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
5.Rpc.mount进程用于判断客户端可以对服务端进行哪些操作;
6.最后如果允许操作,客户端可以对服务端磁盘进行修改。
注意:rpcbind是一个远程调用,使用NFS时必须有rpcbind
四、NFS实践(部署web项目实现共享存储)
环境准备
nfs服务端配置:
1.关闭防火墙和selinux
#关闭firewalld防火墙 [root@nfs ~]# systemctl stop firewalld [root@nfs ~]# systemctl disable firewalld #关闭selinux [root@nfs ~]# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config [root@nfs ~]# setenforce 0 setenforce: SELinux is disabled
2.安装NFS和rpcbind
[root@nfs ~]# yum install -y nfs-utils rpcbind #注意:如果是Centos6系统,一定要手动下载rpcbind,启动时一定先启动rpcbind,再启动nfs
3.创建www用户
[root@nfs ~]# groupadd www -g 666 [root@nfs ~]# useradd www -u 666 -g 666
4.创建共享目录并赋予权限
[root@nfs ~]# mkdir /data [root@nfs ~]# chown -R www:www /data/
5.配置NFS
[root@nfs ~]# cat /etc/exports /data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
6.启动nfs并检验配置文件是否生效
[root@nfs ~]# systemctl start nfs-server [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=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash) #注意:如果出现上面一大串,代表配置文件已生效
客户端web01和web02配置:
1.关闭防火墙和selinux
#关闭firewalld防火墙 [root@web01~]# systemctl stop firewalld [root@web01~]# systemctl disable firewalld #关闭selinux [root@web01~]# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config [root@web01~]# setenforce 0 setenforce: SELinux is disabled
2.安装nfs和rpcbind
[root@web01~]# yum install -y nfs-utils rpcbind
3.安装web服务httpd和PHP并启动
[root@web01 ~]# yum install -y httpd php [root@web01 ~]# systemctl start httpd
4.创建www用户
[root@web02 /var/www/html]# groupadd www -g 666 [root@web02 /var/www/html]# useradd www -u 666 -g 666
5.配置httpd用户
修改httpd.conf配置文件,把User和Group参数修改为www用户
[root@web01 ~]# vim /etc/httpd/conf/httpd.conf User www Group www
6.部署web项目代码
[root@web01 ~]# cd /var/www/html/ [root@web01 /var/www/html]# wget https://www.lixian.fun/data/kaoshi.zip [root@web01 /var/www/html]# unzip kaoshi.zip [root@web01 /var/www/html]# mkdir pic [root@web02 /var/www/html]# vim upload_file.php #更改upload_file.php文件内容如下 $wen="/var/www/html/pic"; [root@web01 /var/www/html]# chown -R www:www /var/www/html/
7.查看服务端有哪些可挂载的挂载点
[root@web01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24
8.挂载
[root@web01 /var/www/html]# systemctl start rpcbind [root@web01 /var/www/html]# mount -t nfs 172.16.1.31:/data /var/www/html/pic/ [root@web01 /var/www/html]# df -h 172.16.1.31:/data 18G 1.5G 17G 9% /var/www/html/pic
9.测试
#在浏览器访问10.0.0.7 并上传文件1_text.txt [root@web01 /var/www/html/pic]# ll total 4 -rw-r--r-- 1 www www 39 Feb 16 21:00 1_text.txt #在web02客户端pic目录上可以看到这个文件 [root@web02 /var/www/html/pic]# ll total 4 -rw-r--r-- 1 www www 39 Feb 16 21:00 1_text.txt #在nfs服务端/data目录也可以看到这个文件 [root@nfs ~]# ll /data/ total 4 -rw-r--r-- 1 www www 39 Feb 16 21:00 1_text.txt