NFS-01

NFS – 文件服务器(共享存储)
定义
NFS是Network File System的缩写及网络文件系统。
NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
为何使用 NFS
### NFS使用

1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
###NFS应用

1.没有NFS时
1.A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。
2.B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户传的图片。

在这里插入图片描述
如果有NFS

1.A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储
2.B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了

在这里插入图片描述

vim /etc/exports  -- #配置文件

/data 172.16.1.0/24(rw,sync,all_squash)

在这里插入图片描述

1.用户访问NFS客户端,将请求转化为函数
2.NFS通过TCP/IP连接服务端
3.NFS服务端接收请求,会先调用portmap进程进行端口映射 (111端口)
4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
5.Rpc.mount进程用于判断客户端对服务端的操作权限
6.如果通过权限验证,可以对服务端进行操作,修改或读取

NFS服务

##1.使用NFS解决了什么
     1.为了实现文件共享
     2.为了多台服务器之间数据一致

NFS原理
在这里插入图片描述

NFS实践
环境准备

 主机	     IP	        主机角色              安装软件               条件 

web01	10.0.0.7	rsync客户端            NFS和rpcbind         关闭防火墙和selinux

nfs 	10.0.0.3    rsync服务端            NFS和rpcbind         关闭防火墙和selinux  

# 注:服务端安装 ( NFS和rpcbind)
           
[root@nfs ~]# yum install -y nfs-utils rpcbind

#注意:
Centos6 需要安装rpcbind
Centos7 默认已经安装好了rpcbind,并且默认是开机自启动
服务端配置NFS
#NFS默认的配置文件是
[root@nfs ~]# ll /etc/exports
-rw-r--r--. 1 root root 0 Jun  7  2013 /etc/exports

#配置NFS
[root@nfs ~]# 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	允许操作的权限
服务端创建共享目录
[root@nfs ~]# mkdir /data
服务端启动服务
#Centos7启动

[root@nfs ~]# systemctl start rpcbind nfs

#Centos6启动,一定要先启动rpcbind在启动nfs

[root@nfs ~]# /etc/init.d/rpcbind start

[root@nfs ~]# /etc/init.d/nfs start

##或者

[root@nfs ~]# service rpcbind start
[root@nfs ~]# service nfs start

#验证启动

[root@nfs ~]# netstat -lntp | grep rpc

tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      5824/rpcbind
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      10187/rpc.mountd
tcp        0      0 0.0.0.0:49150           0.0.0.0:*               LISTEN      10149/rpc.statd 
tcp6       0      0 :::111                  :::*                    LISTEN     

服务端验证NFS配置
# 验证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)

# 注:只有有一行内容就正确
客户端操作
1)关闭防火墙和selinux
2)安装服务
[root@web01 ~]# yum install -y rpcbind nfs-utils
挂载 – 临时挂载(mount )
#查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:
/data 172.16.1.0/24

#挂载
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /backup/

#验证挂载
[root@web01 ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda3           18G  1.6G   17G   9% /
devtmpfs           476M     0  476M   0% /dev
tmpfs               98M     0   98M   0% /run/user/0
172.16.1.31:/data   18G  1.6G   17G   9% /backup

挂载完测试

##写入数据进行测试

#第一次写入测试
[root@web01 ~]# cd /backup/
[root@web01 backup]# touch a.txt
touch: cannot touch ‘a.txt’: Permission denied    #没有权限



服务端授权 --- 切记    默认用户 nfsnobody

#授权目录
[root@nfs ~]# chown -R nfsnobody.nfsnobody /data/

###第二次写入测试     ---客户端操作  --切记   

[root@web01 backup]# touch a.txt  或者 echo "123" >a.txt
[root@web01 backup]# touch ab.txt
[root@web01 backup]# ll
total 4
-rw-r--r-- 1 nfsnobody nfsnobody 0 Mar 27 13:38 ab.txt
-rw-r--r-- 1 nfsnobody nfsnobody 4 Mar 27 13:34 a.txt

#服务端查看
[root@nfs ~]# ll /data/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Nov 20 09:26 123.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Mar 27 13:38 ab.txt

客户端NFS挂载与卸载

NFS客户端的配置步骤也十分简单。先使用showmount命令,查询NFS服务器的远程共享信息,其输出格式为“共享的目录名称 允许使用客户端地址(权限)”。

NFS挂载:客户端的目录仅仅是服务端共享目录的一个入口,可以简单理解为软连接,真正的数据全都是存储在服务端的目录,客户端写入的数据也是在服务端存储的

#.注意事项

1.挂载目录后,原来文件下的内容不会丢失,仅仅是被遮盖住,取消挂载后仍然存在

2.取消挂载时不要在挂载的目录下面操作,否则会提示忙碌,切换到其他目录再进行卸载

3.挂载是如果在挂载的目录下,还是可以看到挂载前目录下的文件,需要重新进入目录才会显示挂载后目录的内容

客户端挂载与卸载–事项

# 客户端安装
1.rpcbind:
	为了连接服务端的进程
	
2.nfs-utils
	为了使用showmount命令

# 客户端查看挂载点

[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24

# 挂载命令
[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

# 卸载

#卸载的两种方式
[root@web01 ~]# umount /backup 
[root@web01 ~]# umount 172.16.1.31:/data

#强制取消挂载
[root@web01 ~]# umount -lf /backup
永久挂载
## 1.开机挂载

#编辑fstab文件
[root@web01 ~]# vim /etc/fstab
172.16.1.31:/data /backup nfs defaults 0 0

#验证fstab是否写正确
[root@web01 ~]# mount -a

了解后2个挂载

#  2.自动挂载
	开机自动执行:/etc/rc.local
	chmod +x /etc/ec.local
#  3.查询设备UUID

服务端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案例
环境准备

 主机	     IP	           主机角色              安装软件               条件 

web01	10.0.0.7	  rsync客户端            httpd 和php          关闭防火墙和selinux

web02	10.0.0.8	  rsync客户端            httpd 和php          关闭防火墙和selinux

nfs 	172.16.1.31   rsync服务端                -                关闭防火墙和selinux  

#注意:web端安装http和php
  
  客户端外网 -- 服务端内网
[root@web01 ~]# yum install -y httpd php
[root@web02 ~]# yum install -y httpd php

# 上传代码
[root@web01 ~]# rz (rz -E)
[root@web01 ~]# ll
-rw-r--r--  1 root root    26995 Aug 23 10:35 kaoshi.zip

# 解压代码
#找到httpd服务的站点目录
[root@web01 ~]# rpm -ql httpd | grep html
/var/www/html

#解压代码至站点目录
[root@web01 ~]# unzip kaoshi.zip -d /var/www/html/

5.启动httpd
[root@web01 ~]# systemctl start httpd

#查看启动
[root@web01 ~]# netstat -lntp | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      7530/httpd         
[root@web01 ~]# ps -ef | grep httpd
root       7530      1  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     7531   7530  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     7532   7530  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     7533   7530  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     7534   7530  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     7535   7530  0 10:39 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root       7543   7262  0 10:40 pts/0    00:00:00 grep --color=auto httpd

### 访问页面测试

http://10.0.0.7/      #---启动httpd    systemctl start httpd
http://10.0.0.8/      #---启动httpd     systemctl start httpd

#必须把文件放在两台客服端/var/www/html下
[root@web02 html]# ll
total 4
-rw-r--r-- 1 root root 890 Mar 27 15:18 a.sh

在这里插入图片描述

上传文件失败

#显示上传文件成功,但是服务器上没有文件
[root@web01 html]# ll /var/www/html/upload
ls: cannot access /var/www/html/upload: No such file or directory

#为什么找这个文件,因为代码里写的上传文件地址就是这个目录
#原因:代码不严谨,没有判断目录权限,目录权限不足,导致上传失败
#授权
[root@web01 html]# chown -R apache.apache /var/www/html/
#重新上传成功
测试(没有挂载)
在10.0.0.7服务器上传 1.png
在10.0.0.8服务器上传 2.png

#访问
http://10.10.0.7/png/1.png               访问成功
http://10.10.0.8/png/1.png            	 访问失败
http://10.10.0.8/png/2.png	             访问成功
http://10.10.0.7/png/2.png               访问失败

#在没有挂载的情况下,文件无法实现共享,在哪台机器上传就只能在哪台机器访问
挂载
http://10.10.0.7/png/1.png               访问成功
http://10.10.0.8/png/1.png            	 访问失败
http://10.10.0.8/png/2.png	             访问成功
http://10.10.0.7/png/2.png               访问失败# web端挂载目录
1.先同步多台web的文件
[root@web01 html]# rsync -avz png/ 172.16.1.31:/data
[root@web02 html]# rsync -avz png/  172.16.1.31:/data

2.找到需要挂载的目录
/var/www/html/upload #根据apache属猪属组来生成,需网页上传一个图片文件来自动生成,即客户端访问的地址10.0.0.7或10.0.0.8 ~~考试文件上传的页面来进行上传,上传成功即可生成此目录

3.挂载
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/png
[root@web02 html]# mount -t nfs 172.16.1.31:/data /var/www/html/png

#再次访问测试(挂载后)
#访问
http://10.10.0.7/png/1.png               访问成功
http://10.10.0.8/png/1.png            	 访问成功
http://10.10.0.8/png/2.png	             访问成功
http://10.10.0.7/png/2.png               访问成功8.
附精简版:NFS+Rsync+Inotify(四台虚拟机数据实时同步备份)

在这里插入图片描述

统一用户
工具/发送键输入到所有会话
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666

然后4台机器输入同样的内容

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TBNPmjye-1616925790160)(C:\Users\17155\AppData\Local\Temp\1616836233264.png)]

1.服务器创建统一用户
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666

[root@web02 ~]# groupadd www -g 666
[root@web02 ~]# useradd www -u 666 -g 666

[root@nfs ~]# groupadd www -g 666
[root@nfs ~]# useradd www -u 666 -g 666

[root@backup ~]# groupadd www -g 666
[root@backup ~]# useradd www -u 666 -g 666

2.需要修改用户的服务
httpd
nfs
rsync

3.修改httpd的用户  web01 与web02都需要修改并重启httpd

#找到配置文件
[root@web01 ~]# rpm -qc httpd
/etc/httpd/conf/httpd.conf

#修改配置文件
[root@web01 ~]# vim /etc/httpd/conf/httpd.conf
### /apache搜索

 User www
 Group www

#重启服务
[root@web01 ~]# systemctl restart httpd

#确认启动用户
[root@web01 ~]# ps -ef | grep httpd
root       7768      1  1 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
www        7769   7768  0 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
www        7770   7768  0 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
www        7771   7768  0 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
www        7772   7768  0 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
www        7773   7768  0 11:49 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND

4.修改nfs服务的用户         yum -y install inotify-tools(软件包)

[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

#授权/data目录
[root@nfs ~]# chown -R www.www /data/

#重启服务
[root@nfs ~]# systemctl restart 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=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
 
5.修改rsync用户

#修改配置
[root@backup ~]# vim /etc/rsyncd.conf
uid = www
gid = www

#重启服务
[root@backup ~]# systemctl restart rsyncd

#目录重新授权
[root@backup ~]# chown -R www.www /backup/

NFS小结
##.NFS存储优点

1.NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求
2.NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见

### .NFS存储缺点

1.存在单点故障, 如果构建高可用维护麻烦  web -> nfs -> backup
2.NFS数据明文, 并不对数据做任何校验
3.客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)

### .NFS应用建议

1.生产场景应将静态数据尽可能往前端推, 减少后端存储压力
2.必须将存储里的静态资源通过CDN缓存 jpg\png\mp4\avi\css\js
3.如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用

在这里插入图片描述

作业

题目要求

题目:两台web服务器:web01和web02

 一台nfs服务器挂载web服务器的文件目录

一台backup服务器实时同步nfs挂载目录下的内容
细部作业
1、web01与web02客户端操作
web01与web02各自执行:
关闭防火墙和selinux 
[root@web01 ~] yum install -y nfs-utils rpcbind httpd php 
[root@web01 ~] groupadd www -g 666 [root@web01 ~]# useradd www -u 666 -g 666
[root@web01 ~] systemctl start httpd #启动httpd服务  

[root@web01 ~] netstat -lntp |grep 80 #查看服务端口号
tcp6       0      0 :::80                   :::*                    LISTEN      1164/httpd 

上传考试压缩包,并解压:
[root@web01 ~] unzip kaoshi.zip -d /var/www/html 
[root@web01 ~] chown -R apache.apache /var/www/html#修改/var/www/heml属主属组为apache 

在浏览器上传文件,会自动生成upload文件夹
[root@web01 html] chown -R www.www /var/www/html 修改/var/www/heml属主属组为www
[root@web01 html] mount -t nfs 172.16.1.31:/data /var/www/html/upload 
	#挂载,前提nfs服务端的共项目录也要修改权限为www
[root@web01 html] df -h 文件系统
容量  已用  可用 已用% 挂载点 /dev/sda3           18G  1.4G   17G    8% / devtmpfs           479M     0  479M    0% /dev tmpfs              489M     0  489M    0% /dev/shm tmpfs              489M  6.8M  482M    2% /run tmpfs              489M     0  489M    0% /sys/fs/cgroup /dev/sda1         1014M  119M  896M   12% /boot tmpfs        98M     0   98M    0% /run/user/0 172.16.1.31:/data   18G  1.3G   17G    8% /var/www/html/upload              

此时在浏览器在上传文件就实现了web02和web02的/var/www/html/upload内容和nfs/data同步

2、nfs服务端操作:
关闭防火墙和selinux 
[root@nfs ~] yum install -y nfs-utils rpcbind httpd php

[root@nfs ~] vim /etc/exports /data #修改服务配置文件172.16.1.0/24(rw,sunc,all_squash,anonuid=666,anongid=666)              

[root@nfs ~] groupadd www -g 666 
[root@nfs ~] useradd www -u 666 -g 666 #创建用户www指定uid666,gid666:
[root@nfs ~] mkdir /data #创建共享目录
[root@nfs ~] systemctl restart rpcbind nfs 启动服务,验证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=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
[root@nfs ~] chown -R www.www /data #修改/data属主属组

3、nfs作为客户端操作:
[root@nfs ~] yum install inotify-tools rsync -y              
[root@nfs ~] vim rsync_inotify.sh #编写实时备份脚本
#!/bin/bash 
export RSYNC_PASSWORD=123456 #指定密码环境变量 
dir=/backup 
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir |while read line;
do
cd $dir && rsync -az -R --delete . rsync_backup@172.16.1.41::backup  >/dev/null 2>&1 
done &              

[root@nfs ~] echo "123456" > /etc/rsync.passwd #写密码文件,修改600权限
[root@nfs ~] chmod 600 /etc/rsync.passwd #启动rsync服务,运行脚本
[root@nfs ~] systemctl start rsyncd       

4、backup服务端操作:
[root@backup ~] yum install rsync -y              
[root@backup ~] vim /etc/rsyncd.conf #改配置文件
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup

[root@backup ~] groupadd www -g 666 
[root@backup ~] useradd www -u 666 -g 666 #创建用户
[root@backup ~] echo "123456" > /etc/rsync.passwd #写密码文件
[root@backup ~] chmod 600 /etc/rsync.passwd #修改权限600
[root@backup ~] mkdir /backup #创建/backup,修改权限www
[root@backup ~] chown -R www.www /backup              
[root@backup ~] systemctl start rsyncd    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FikL919

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值