NFS服务
一.什么是NFS服务
共享存储,文件服务器
1.基本概述
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
2.为什么使用NFS
1)实现多台服务器之间数据共享
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工作原理
vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
1.用户访问NFS客户端,将请求转化为函数
2.NFS通过TCP/IP连接服务端
3.NFS服务端接收请求,会先调用portmap进程进行端口映射
4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
5.Rpc.mount进程用于判断客户端对服务端的操作权限
6.如果通过权限验证,可以对服务端进行操作,修改或读取
三、NFS实践
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.服务端准备工作
1) 关闭SElinux和防火墙
vim /etc/selinux/config : enforcing -->disabled
setenforce 0
systemctl disable --now firewalld
2) 安装NFS和rpcbind
yum install -y nfs-utils rpcbind
3)配置NFS
#NFS默认的配置文件是 /etc/exports
vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
语法 /data 172.16.1.0/24 (rw,sync,all_squash)
含义 NFS服务端共享的目录 NFS允许连接的客户端IP 允许操作的权限
4) 创建共享目录
mkdir /data
5) 启动服务
systemctl start rpcbind nfs
6)验证启动
netstat -lntp | grep rpc
cat /var/lib/nfs/etab # 验证NFS配置
3.客户端准备工作
1) 关闭SElinux和防火墙
vim /etc/selinux/config : enforcing -->disabled
setenforce 0
systemctl disable --now firewalld
2) 安装NFS和rpcbind
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 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.5M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 99G 2.6G 97G 3% /
/dev/sda1 1014M 168M 847M 17% /boot
172.16.1.31:/data 99G 2.7G 97G 3% /mnt
tmpfs 98M 0 98M 0% /run/user/0
5)写入数据进行测试
#第一次写入测试
[root@web01 ~]# cd /backup/
[root@web01 backup]# touch 123.txt
touch: cannot touch ‘123.txt’: Permission denied #没有权限
#授权目录 在服务端进行授权操作
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data/
#再次创建测试
[root@web01 backup]# touch 123.txt
[root@web01 backup]# ll
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Nov 20 09:26 123.txt
#服务端查看
[root@nfs ~]# ll /data/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Nov 20 09:26 123.txt
四、NFS挂载与卸载
NFS客户端的配置步骤也十分简单。先使用showmount命令,查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址(权限)”。
NFS挂载:客户端的目录仅仅是服务端共享目录的一个入口,可以简单理解为软连接,真正的数据全都是存储在服务端的目录,客户端写入的数据也是在服务端存储的
NFS卸载:
#卸载的两种方式
[root@web01 ~]# umount /backup
[root@web01 ~]# umount 172.16.1.31:/data
#强制取消挂载
[root@web01 ~]# umount -lf /backup
NFS开机自动挂载
1、开机自启动脚本
vim /etc/rc.local
chmod +x /etc/rc.local
echo "mount -t nfs 172.16.1.31:/data/image /mnt" >> /etc/rc.local
2、写入/etc/fstab
1、编写配置文件
172.16.1.31:/data /backup nfs defaults 0 0
2、检查配置文件
1、mount -a :检查语法
2、showmount -e 172.16.1.31 : 检查服务
3、重启测试
#注意事项:
1.挂载目录后,原来文件下的内容不会丢失,仅仅是被遮盖住,取消挂载后仍然存在
2.取消挂载时不要在挂载的目录下面操作,否则会提示忙碌,切换到其他目录再进行卸载
3.挂载是如果在挂载的目录下,还是可以看到挂载前目录下的文件,需要重新进入目录才会显示挂载后目录的内容
五、检查nfs服务是否正常
客户端检测脚本:
#!/bin/bash
IP=172.16.1.31
#监测NFS服务是否正常
showmount -e $IP &>/dev/null
[ $? -eq 0 ] && mount -t nfs $IP:/data /mnt || /usr/bin/bash /root/nfs.sh
ps:nfs.sh脚本如下:
#!/bin/bash
echo "NFS服务异常,请及时处理!" |mail -s "异常报警" 446010175@qq.com >/dev/null 2>&1