一、NFS简介
NFS是Network File System 的缩写以及网络文件系统。NFS主要功能是通过局域网让不同的主机系统之间可以共享文件或者目录。 NFS系统和window 网络共享,网络驱动器类似,只不过Windows用于局域网,NFS用于企业集群架构中,如果是大型网站会,会用到更加复杂的分布式文件系统FastDFS,glusterfs,HDFS,ceph
二、NFS 应用
1 用户访问NFS客户端,将强求转化为函数 2 NFS 通过TCP/IP连接服务端 3 NFS服务端接受请求,会先调用portmap 进程进行端口映射 4 RPc.nfsd 进程用于判断NFS 客户能否链接服务端 5 .Rpc.mount进程用于判断客户端对服务端的操作权限 6 如果通过权限验证,可以对服务端进操作,修改或读取
三、NFS实践
1、服务端
1、安装NFS和rpcbind [root@nfs ~]# yum install nfs-utils rpcbind -y 2、创建挂载点 [root@nfs ~]# mkdir /web/nfs{1..9} 查看创建的目录: ll /web/ 3、配置挂载点 [root@nfs ~]# vim /etc/exports 格式: [挂载点] [可以访问的IP]([权限]) /web/nfs1 172.16.1.0/20(rw,sync,all_squash) 4、关闭selinux和防火墙 [root@nfs ~]# setenforce 0 [root@nfs ~]# systemctl disable --now firewalld 5、启动Nfs和rpcbind服务 [root@nfs ~]# systemctl start nfs-server [root@nfs ~]# systemctl start rpcbind 6、检查服务端是否正常 [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 7、给挂载点授权 [root@nfs ~]# chown -R nfsnobody.nfsnobody /web 查看授权是否成功: ll /web/ total 0 drwxr-xr-x 2 nfsnobody nfsnobody 6 Dec 30 10:20 nfs1 drwxr-xr-x 2 nfsnobody nfsnobody 6 Dec 30 10:20 nfs2 drwxr-xr-x 2 nfsnobody nfsnobody 6 Dec 30 10:20 nfs3 drwxr-xr-x 2 nfsnobody nfsnobody 6 Dec 30 10:20 nfs4 drwxr-xr-x 2 nfsnobody nfsnobody 6 Dec 30 10:20 nfs5 drwxr-xr-x 2 nfsnobody nfsnobody 6 Dec 30 10:20 nfs6 drwxr-xr-x 2 nfsnobody nfsnobody 6 Dec 30 10:20 nfs7 drwxr-xr-x 2 nfsnobody nfsnobody 6 Dec 30 10:20 nfs8 drwxr-xr-x 2 nfsnobody nfsnobody 6 Dec 30 10:20 nfs9
2、客户端
1、安装NFS [root@web01 opt]# yum install -y nfs-utils 2、创建目录 [root@web01 opt]# mkdir /opt/nfs/ ll 3、挂载NFS [root@web01 opt]# mount -t nfs 172.16.1.31:/web/nfs1 /opt/nfs/ 4、测试NFS文件同步功能 [root@web01 opt]# touch nfs/{1..9}.txt [root@web01 opt]# ll nfs/ total 0 -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 1.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 2.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 3.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 4.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 5.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 6.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 7.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 8.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 9.txt [root@nfs ~]# ll /web/nfs1 total 0 -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 1.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 2.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 3.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 4.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 5.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 6.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 7.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 8.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 30 11:08 9.txt
四、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、控制读写 rw、ro 查看是否启动成功了 `systemctl status nfs-server rpcbind 卸载挂载 `umount /opt/nfs/ 查看挂载详情 df -h 删除/opt/nfs/*目录下的所有的内容 rm -rf /opt/nfs/* 2、控制文件权限 root_squash no_root_squash all_squash no_all_squash 3、控制写模式 sync async 4、控制用户 anonuid anongid 统一用户: 1、创建用户 [root@nfs nfs1]# groupadd www -g 666 [root@nfs nfs1]# useradd www -u 666 -g 666 -M -r -s /sbin/nologin 2、修改挂载点权限 [root@nfs nfs1]# chown -R www.www /web/ 3、使用
五、搭建考试系统
搭建WEB服务
1、安装web软件 [root@web01 opt]# yum install httpd php php-devel -y 2、将代码放置于网站的根目录 [root@web01 opt]# cd /var/www/html/ # 上传代码 查看: ll 解压: [root@nfs html]# unzip kaoshi.zip 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、测试 1、上传 172.16.1.7 寻找上传资料 image.baidu.com 查看错误;查看日志 [root@web01 html]# tail -f /var/log/messgges 查看错误日志 [root@web01 html]# tail -f /var/log/httpd/ tail: error reading ‘/var/log/httpd/’: Is a directory tail: /var/log/httpd/: cannot follow end of this type of file; giving up on this name tail: no files remaining [root@web01 html]# tail -f /var/log/httpd/error_log [Thu Dec 30 16:42:29.769337 2021] [suexec:notice] [pid 2534] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe8b:7a67. Set the 'ServerName' directive globally to suppress this message [Thu Dec 30 16:42:29.816757 2021] [lbmethod_heartbeat:notice] [pid 2534] AH02282: No slotmem from mod_heartmonitor [Thu Dec 30 16:42:29.828160 2021] [mpm_prefork:notice] [pid 2534] AH00163: Apache/2.4.6 (CentOS) PHP/5.4.16 configured -- resuming normal operations [Thu Dec 30 16:42:29.828180 2021] [core:notice] [pid 2534] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND' [root@web01 html]# ll total 80 -rw-r--r-- 1 www www 38772 Apr 27 2018 bg.jpg -rw-r--r-- 1 www www 2633 May 4 2018 index.html -rw-r--r-- 1 www www 52 May 10 2018 info.php -rw-r--r-- 1 www www 26995 Dec 30 16:39 kaoshi.zip drwxr-xr-x 2 www www 29 Dec 30 16:52 upload -rw-r--r-- 1 www www 1192 Jan 10 2020 upload_file.php [root@web01 html]# ll /ipload ls: cannot access /ipload: No such file or directory [root@web01 html]# ll /upload ls: cannot access /upload: No such file or directory [root@web01 html]# [root@web01 html]# ll upload total 84 -rw-r--r-- 1 www www 83100 Dec 30 16:52 1_linux.jpg.jpg 2、访问 http://172.16.1.7/upload/1_linux.jpg.jpg 3、同时设置web2 web3 1、安装web软件 [root@web01 opt]# yum install httpd php php-devel -y 2、将代码放置于网站的根目录 [root@web01 opt]# cd /var/www/html/ # 上传代码 [root@web01 html]# scp kaoshi.zip 172.16.1.8:/var/www/html/ [root@web03 html]# unzip kaoshi.zip [root@web02 html]# unzip kaoshi.zip 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 在末行模式输入apache 全部修改成www即可 User www Group www 6、启动web软件 [root@web01 html]# systemctl start httpd 7、测试
配合NFS实现文件共享
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、客户端安装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 5、挂载 [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 6、测试 用web2上传,web3查看