一、什么是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实践
主机 外网IP 内网IP 角色 nfs 10.0.0.31 172.16.1.31 NFS服务端 web01 10.0.0.7 172.16.1.7 NFS客户端 1.服务端 1)关闭防火墙和selinux # 关闭firewalld防火墙 [root@nfs ~]# systemctl stop firewalld [root@nfs ~]# systemctl disable firewalld # 关闭selinux [root@nfs ~]# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/seliunx/config [root@nfs ~]# setenforce 0 setenforce: SELinux is disabled 2)安装NFS和rpcbind yum install -y nfs-utils rpcbind # centos7实际上只要装nfs-utils就行,rpcbind会一起安装 注意: 如果是Centos6系统,一定要手动下载rpcbind,启动时一定县启动rpcbind,再启动nfs 3)配置NFS 配置NFS服务,配置文件为 /etc/exports,书写格式为: /data 172.16.1.0/24(rw,sync,all_squash) 语法 | /data | 172.16.1.0/24 | (rw,sync,all_squash) 语法含义 | NFS共享的目录 | NFS允许连接的客户端 | 允许的操作(参数1,参数2) # 服务端配置 vim /etc/exports /data 172.16.1.0/24 (rw,sync,all_squash) # 0/24表示172.16.1这个网段都允许 4)创建共享目录 [root@nfs ~]# mkdir /data 5)启动nfs [root@nfs ~]# systemctl start rpcbind nfs-server # 验证启动 [root@nfs ~]# ps -ef |grep nfs root 83009 2 0 23:28 ? 00:00:00 [nfsd4_callbacks] root 83015 2 0 23:28 ? 00:00:00 [nfsd] root 83016 2 0 23:28 ? 00:00:00 [nfsd] root 83017 2 0 23:28 ? 00:00:00 [nfsd] root 83018 2 0 23:28 ? 00:00:00 [nfsd] root 83019 2 0 23:28 ? 00:00:00 [nfsd] root 83020 2 0 23:28 ? 00:00:00 [nfsd] root 83021 2 0 23:28 ? 00:00:00 [nfsd] root 83022 2 0 23:28 ? 00:00:00 [nfsd] root 83329 94603 0 23:29 pts/0 00:00:00 grep --color=auto nfs 6)验证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) 2.客户端操作 1)关闭防火墙和selinux # 关闭firewalld防火墙 [root@nfs ~]# systemctl stop firewalld [root@nfs ~]# systemctl disable firewalld # 关闭selinux [root@nfs ~]# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/seliunx/config [root@nfs ~]# setenforce 0 setenforce: SELinux is disabled 2)安装NFS和rpcbind(因需要showmount命令,该命令在nfs中) yum install -y nfs-utils rpcbind 3)查看挂载点 [root@web01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24 4)挂载 [root@web01 ~]# systemctl start rpcbind # centos7自动启动,6里才需要手动启动(客户端不需要启动nfs) [root@web01 ~]# mount -t nfs 172.16.1.31:/data /backup # -t指定nfs文件类型 [root@web01 backup]# df -h # 查询是否挂载成功 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda3 18G 1.8G 17G 10% / devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.7M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 1014M 127M 888M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 172.16.1.31:/data 18G 1.8G 17G 10% /backup 5)写入数据到挂载目录测试 # 进入挂载目录,创建文件或目录 [root@web01 backup]# touch 1.txt touch: 无法创建"1.txt": 权限不够 # 服务端需要操作 [root@nfs ~]# chown -R nfsnobody.nfsnobody /data/ # 客户端再测试 [root@web01 backup]# mkdir 123 [root@web01 backup]# touch 1.txt [root@web01 backup]# ll 总用量 0 drwxr-xr-x 2 nfsnobody nfsnobody 6 7月 13 01:23 123 -rw-r--r-- 1 nfsnobody nfsnobody 0 7月 13 01:23 1.txt #nfsnobody 该用户在安装nfs之后自动创建,是NFS使用的用户,该用户没有特殊权限,只能操作所有用户都可以读写的文件
3.NFS挂载卸载
挂载
NFS客户端的配置步骤也十分简单,先试用showmount -e命令,查询NFS服务器的远程共享信息,其输出格式为"共享的目录名称允许使用客户端地址"
NFS挂载:客户端当前的目录仅仅是NFS服务端共享目录的一个入口文件,客户端写入的任何东西还是传出在服务端的
注意:
1.挂载目录后,原来目录下的文件不会丢失,取消挂载后数据仍然存在
2.取消目录挂载的时候不要在该目录里面,退出该目录再取消挂载
3.挂载时如果在挂载的目录下,还是可以暂时看到原来目录下的文件,重新进入后才显示挂载点的文件
1)安装客户端工具 yum install -y nfs-utils rpcbind # 客户端安装nfs-utils是为了使用showmount命令 systemctl start rpcbind 2)客户端查看挂载点 [root@web01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24 3)挂载命令 [root@web01 ~]# mount -t nfs 172.16.1.31:/data /backup # -t指定nfs文件类型 mount # 挂载命令 -t # 指定挂载的文件类型 172.16.1.31 # 远端NFS服务器地址 :date # NFS服务器可提供挂载的目录 /backup # 本地要挂载的目录 # 使用df -h可以查看已挂载的目录 [root@web01 backup]# df -h # 查询是否挂载成功 172.16.1.31:/data 18G 1.8G 17G 10% /backup 4)卸载 [root@web01 ~]# umount /backup [root@web01 ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/sda3 18G 1.8G 17G 10% / devtmpfs 476M 0 476M 0% /dev tmpfs 487M 0 487M 0% /dev/shm tmpfs 487M 7.7M 479M 2% /run tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/sda1 1014M 127M 888M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 # 取消目录挂载的时候不要在该目录里面,退出该目录再取消挂载 # 或者强制取消挂载 umount -Lf /backup 5.开机挂载 # 挂载,重新启动服务器会取消,想要一直挂载 # 编辑fstab文件 vim /etc/fstab 172.16.1.31:/data /backup nfs defaults 0 0 # 验证fstab是否写正确 mount -a
五、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,指定匿名用户的uid,用户为系统用户,必须存在 anongid | 配合all_squash,指定匿名用户的gid
六、NFS案例
1.安装http和php服务 [root@web01 backup]# yum install -y httpd php 2.上传代码 rpm -ql httpd|grep html # 查找站点目录 cd /var/www/html rz kaoshi.zip # 把网页文件压缩包放在站点目录下 unzip kaoshi.zip 3.修改上传作业代码 vim upload_file.php $wen="/backup"; 4.启动httpd systemctl start httpd netstat -lntp # 检查端口是否启动
5.测试提交作业代码
1)访问10.0.0.7 2)测试上传文件 3)常见错误 1.文件名字有误 2.显示上传成功,服务器没有文件,一般为权限错误 chown -R apache.apache /backup/ # httpd启动权限为apache,/backup/目录无挂载,为root权限时无法修改,给文件夹赋权apache
6)测试(没有挂载时) 在10.0.0.7的服务器上传 1_nfs.gif 在10.0.0.8的服务器上传 2_nfs.jpg 访问测试 10.0.0.7/pic/1_nfs.gif 访问成功 10.0.0.7/pic/2_nfs.jpg 访问失败 7)挂载共享目录后访问测试 mount -t nfs 172.16.1.31:/data /var/www/html/pic # 重新上传图片 在10.0.0.7的服务器上传 1_nfs.gif 在10.0.0.8的服务器上传 2_nfs.jpg 访问测试 10.0.0.7/pic/1_nfs.gif 访问成功 10.0.0.7/pic/2_nfs.jpg 访问成功
标签:00,27,172.16,nfs,NFS,Linux,挂载,root From: https://www.cnblogs.com/ludingchao/p/17551262.html