NFS服务
一、什么是NFS
共享存储,文件服务器
1、基本概述
1、NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
2、NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
2、为什么使用NFS
1、实现多台服务器之间数据共享
2、实现多台服务器之间数据一致
3、NFS的原理
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客户端 |
nfs | 172.16.1.31 | NFS服务端 |
2、服务端(172.16.1.31)
1)关闭防火墙和selinux
setenforce 0
systemctl stop firewalld
2)安装NFS和rpcbind
[root@nfs ~]# yum install nfs-utils rpcbind -y
注:rpcbind是为nfs提供网络
3)创建一个目录,用于存放文件的仓库
[root@nfs ~]# mkdir /data
4)创建一个系统用户,用于权限验证(权限验证时真正验证的是UID)
[root@nfs ~]# useradd www -r -M -s /sbin/nologin -u 996
5)修改NFS的配置文件(作用:指定NFS的仓库及权限)
[root@nfs ~]# vim /etc/exports
[仓库地址] [可以访问的ip](权限)
/data 172.16.1.0/20(rw,all_squash,sync)
语法 | /data | 172.16.1.0/24 | (rw,sync,all_squash) |
---|---|---|---|
含义 | NFS服务端共享的目录 | NFS允许连接的客户端IP | 允许操作的权限 |
6)启动NFS服务
[root@nfs ~]# systemctl start nfs-server rpcbind
#验证启动
[root@nfs ~]# netstat -lntp | grep rpc
7)验证NFS配置
[root@nfs ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/20(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)
8)查看NFS的挂载点是否设置成功
查看指定服务器的挂载点
[root@nfs ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/20
查看本机的挂载点
showmount -e
Export list for nfs:
/data 172.16.1.0/20
9)给服务端设置权限
[root@nfs ~]# chown -R www.www /data/
3、客户端(172.16.1.7)
1)关闭防火墙和selinux
setenforce 0
systemctl stop firewalld
2)安装服务
[root@web01 ~]# yum install nfs-utils rpcbind -y
3)查看挂载点
showmount -e 172.16.1.31
4)挂载使用 (客户端必须安装nfs-utils)
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/ /backup
#验证挂载
[root@web01 ~]# df -h
5)写入数据进行测试
#第一次写入测试
[root@web01 ~]# cd /backup/
[root@web01 backup]# touch 123.txt
================================================
touch: cannot touch ‘123.txt’: Permission denied #没有权限
=================================================
#授权目录
[root@nfs ~]# chown -R www.www /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
注意:挂在失败
1、selinux没关闭
2、防火墙没关闭
3、nfs客户端未安装
[root@web01 ~]# yum install nfs-utils -y
注意:没权限
nfs服务端是root权限
[root@nfs data]# chown nfsnobody.nfsnobody /data/
三、NFS挂载与卸载
1、NFS客户端的配置步骤也十分简单。先使用showmount命令,查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址(权限)”。
2、NFS挂载:客户端的目录仅仅是服务端共享目录的一个入口,可以简单理解为软连接,真正的数据全都是存储在服务端的目录,客户端写入的数据也是在服务端存储的
1、注意事项
1、挂载目录后,原来文件下的内容不会丢失,仅仅是被遮掩盖住,取消挂载后仍然存在
2、取消挂载时不要在挂载的目录下面操作,否则会提示忙碌,切换到其他目录在进行卸载
3、挂载时如果在挂载的目录下,还是可以看到挂载前目录下的文件,需要重新进入目录才会显示挂载后目录的内容
2、挂载
1)客户端查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
2)挂载命令
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /backup
mount #挂载命令
-t #指定挂载的文件类型
nfs #nfs文件类型
172.16.1.31 #服务端的IP地址
:/data #服务端提供的可挂载目录
/backup #本地要挂载到服务端的目录
#挂载后查看挂载
[root@web01 ~]# df -h | grep /backup
172.16.1.31:/data 18G 1.6G 17G 9% /backup
3、卸载
#卸载的两种方式
[root@web01 ~]# umount /backup
[root@web01 ~]# umount 172.16.1.31:/data
#强制取消挂载
[root@web01 ~]# umount -lf /backup
4、开机挂载
#编辑fstab文件
[root@web01 ~]# vim /etc/fstab
172.16.1.31:/data /backup nfs defaults 0 0
#验证fstab是否写正确
[root@web01 ~]# mount -a
四、NFS配置详解
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
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的用户UID,必须存在系统 (常用) |
五、NFS案例1
1、安装web服务软件
[root@web01 ~]# yum install -y httpd php
2、上传代码
[root@web01 ~]# cd /var/www/html
[root@web01 html]# vi index.php
<?php
phpinfo();
3、开启web服务
[root@web01 html]# systemctl start httpd
4、将nfs中的图片,共享到web01上来访问
1、将图片上传至NFS服务器
2、将NFS挂载到web网站对应目录
mount -t nfs 172.16.1.31:/data /var/www/html/img/
3、上传代码
[root@web01 html]# cat index.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<img src="./img/123.png" alt="">
</body>
</html>
4、浏览器访问
六、NFS案例2
1、安装web服务软件
[root@web02 ~]# yum install httpd php -y
2、上传代码
3、将代码复制到网站根目录(/var/www/html)
[root@web02 kaoshi]# cp -r ./* /var/www/html/
4、开启web服务
[root@web02 html]# systemctl start httpd
5、统一用户
1、添加用户
[root@web02 html]# useradd www -r -M -s /sbin/nologin -u 996
2、修改httpd的启动用户
[root@web02 ~]# vi /etc/httpd/conf/httpd.conf
User www
Group www
3、重启WEB服务软件
[root@web02 ~]# systemctl restart httpd
4、修改站点目录的用户
[root@web02 ~]# chown -R www.www /var/www/html
5、关闭selinux
setenforce 0
6、上传的文件共享至web01中
[root@web02 html]# yum install nfs-utils -y
[root@web02 html]# mount -t nfs 172.16.1.31:/data /var/www/html/upload