linux 架构之NFS

linux架构之NFS

客户端需求:
	1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02

		[root@db01 ~]# mkdir -p /backup/nfs_172.16.1.31_`date +%F`

	2.客户端在本地打包备份(将etc目录中所有的普通文件打包)拷贝至/backup/nfs_172.16.1.31_2018-09-02

		[root@db01 ~]# tar -czPf /backup/nfs_172.16.1.31_`date +%F`/etc.tar.gz $(find /etc -type f)

	3.客户端最后将备份的数据进行推送至备份服务器
		[root@db01 ~]# cd /backup/nfs_172.16.1.31_`date +%F`
		[root@db01 nfs_172.16.1.31_2021-10-20]# md5sum etc.tar.gz 
		6586c5629e5c3b883bfb417721519f99  etc.tar.gz

		记得启动rsync 

		[root@db01 nfs_172.16.1.31_2021-10-20]#systemctl start rsyncd

		[root@db01 nfs_172.16.1.31_2021-10-20]#rsync -avzP /backup  rsync_backup@172.16.1.41::backup
		或者
		[root@db01 nfs_172.16.1.31_2021-10-20]#rsync -avzP /backup  rsync_backup@172.16.1.41::backup--password-file=/etc/rsync.passwd
	4.客户端每天凌晨1点定时执行该脚本

		chmod +x rsync.sh

		先加个可执行权限,在定时任务

		crontab -e

		0 1 * * * /root/rsync.sh

	5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

		[root@db01 ~]# find /backup/ -ctime +7 -name "nfs" -exec rm -rf {} \;
----------------------------------------------------------------
#客户端脚本

mkdir -p /backup/nfs_172.16.1.31_`date +%F`

tar -czPf /backup/nfs_172.16.1.31_`date +%F`/etc.tar.gz $(find /etc -type f)

cd /backup/nfs_172.16.1.31_`date +%F`

md5sum etc.tar.gz > md5sum.txt

rsync -avzP /backup/  rsync_backup@172.16.1.41::backup

find /backup/ -ctime +7 -name "nfs" -exec rm -rf {} \;
----------------------------------------------------------------
服务端需求:
	1.服务端部署rsync,用于接收客户端推送过来的备份数据

			yum install rsync -y
			
	2.服务端需要每天校验客户端推送过来的数据是否完整?md5sum
		需要客户端配合 推文件之前要创建这个文本然后一起发过去
		验证
			cd/backup/nfs_172.16.1.31_`date +%F`
            [root@rsync nfs_172.16.1.31_2021-10-20]# md5sum -c md5sum.txt 
            etc.tar.gz: OK

	3.服务端需要每天校验的结果通知给管理员
		email
		yum install mailx -y
		vim /etc/mail.rc
		   set from=1617271856@qq.com
            set smtp=smtps://smtp.qq.com:465
            set smtp-auth-user=1617271856@qq.com
            set smtp-auth-password=dettesbjmssvbdec
            set smtp-auth=login
            set ssl-verify=ignore
            set nss-config-dir=/etc/pki/nssdb/
     验证结果
         $?   :代表md5sum验证是否成功
         -eq    :等于号
         $? -eq 等于0,代表成功
     if [$? -eq 0] ;then
     	echo "验证成功" | mail -s "验证结果" 1617271856@qq.com
     else
    	 echo "验证失败" | mail -s "验证结果" 1617271856@qq.com
     fi
	


	4.服务端仅保留6个月的备份数据,其余的全部删除
	find /backup/ -ctime +180 -name 'nfs' -exec rm -rf {} \;
----------------------------------------------------------------
服务端脚本
cd /backup/nfs_172.16.1.31_`date +%F`/
md5sum -c md5sum.txt                                                     
if [$? -eq 0] ;then
    echo "验证成功" | mail -s "验证结果" 1617271856@qq.com
else
    echo "验证失败" | mail -s "验证结果" 1617271856@qq.com
fi    
find /backup/ -ctime +180 -name 'nfs*' -exec rm -rf {} \;
----------------------------------------------------------------


复习

1.备份

	1.1、scp
	
		全量备份
	
		1.1.1、推数据
		
			scp [本地文件路径] [用户]@[IP]:[远程服务器路径]
		
		1.1.2、拉数据
		
			scp [用户]@[IP]:[远程服务器路径] [本地文件路径]
	
		1.1.2、参数
		
			-r : 递归
			-p : 不修改文件时间
	
	1.2、rsync

		增量备份
		
		1.2.1、本地备份
			
			rsync [原路径] [新路径]
		
		1.2.2、远程备份
		
			1.2.2.1、推数据
			
				rsync [本地文件路径] [用户]@[IP]:[远程服务器路径]
			
			1.2.2.2、拉数据
			
				rsync [用户]@[IP]:[远程服务器路径] [本地文件路径]
		
		1.2.3、以守护进程方式备份
		
			服务端:
		
				1、修改配置文件
				
					vim /etc/rsyncd.conf
				
				2、创建备份目录
				
					mkdir /backup 
				
				3、创建守护进程的用户名和密码,并修改权
				
					echo "rsync_backup:123456" > /etc/rsync.passwd

					chmod 600 /etc/rsync.passwd
				
				
				4、启动守护进程
				
					useradd rsync -r -M -s /sbin/nologin 
					
					chown rsync.rsync /backup 
				
					systemctl start rsyncd 
		
			客户端:
			
				1、上传文件
				
					rsync -avzP  [文件路径]  rsync_backup@172.16.1.41::backup 
					
2.rsync + inotify
	
		2.1、安装inotify
		
			yum install inotify-tools -y 
		
		2.2、运行inotify + rsync 
		
			inotifywait -mr --format "%Xe %w %f" -e create,modify,delete  [监控路径] | while read line ;do
			
				rsync -avzP [监控路径] rsync_backup@172.16.1.41::backup 
			
			done


nfs基础

#什么是nfs
    NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
    NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
#为什么使用nfs
    实现多台服务器之间数据共享
    实现多台服务器之间数据一致
#nfs原理
    1.用户访问NFS客户端,将请求转化为函数
    2.NFS通过TCP/IP连接服务端
    3.NFS服务端接收请求,会先调用portmap进程进行端口映射
    4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
    5.Rpc.mount进程用于判断客户端对服务端的操作权限
    6.如果通过权限验证,可以对服务端进行操作,修改或读取

主机外网IP内网IP角色
nfs 10.0.0.31 172.16.1.31 NFS服务端
web01 10.0.0.7 172.16.1.7 NFS客户端

1.nfs部署

1、安装nfs服务

	rpcbind是为nfs提供网络

	yum install nfs-utils rpcbind -y  

2、关闭防火墙和selinux

    [root@nfs ~]# setenforce 0
    [root@nfs ~]# systemctl stop firewalld

3、创建一个目录,用于存放文件的仓库

    [root@nfs ~]# mkdir /data

4、创建一个系统用户,用于权限验证(权限验证时真正验证的时UID[root@nfs ~]# useradd www -r -M -s /sbin/nologin -u 996

5、修改NFS的配置文件(作用:指定NFS的仓库及权限)

    NFS的配置文件:/etc/exports

    [root@nfs ~]# vi /etc/exports

    [仓库地址]  [可以访问的IP段](权限) 

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


    [root@nfs data]# vim /etc/exports
    [root@nfs data]# cat /etc/exports
    /data   172.16.1.0/20(rw,all_squash,sync)
#权限分为四个组:
	#控制NFS读写权限
        rw			读写权限 (常用)
        ro			只读权限 (不常用)

	#控制访问NFS时,NFS基于的权限

        root_squash		当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 (不常用)
        no_root_squash	当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 (不常用)
        all_squash		无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 (常用)
        no_all_squash	无论NFS客户端使用什么账户访问,都不进行压缩 (不常用)

    #控制NFS同步方式
        sync	同时将数据写入到内存与硬盘中,保证不丢失数据 (常用),但是会产生延时
        async	优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 (不常用)

    #控制默认的用户(非必须)
        anonuid	配置all_squash使用,指定NFS的用户UID,必须存在系统 (常用)
        anongid	配置all_squash使用,指定NFS的用户UID,必须存在系统 (常用)

6、启动NFS服务

	[root@nfs data]# systemctl start nfs-server rpcbind
	#验证启动
	[root@nfs ~]# ps -ef | grep nfs
	
	showmount -e 检查一下
客户端操作
7、挂载使用(客户端必须安装nfs-utils)
    [root@web01 ~]# yum install nfs-utils -y
    [root@web01 ~]# mount -t nfs 172.16.1.31:/data /opt
  			  

8、查看NFS的挂载点是否设置成功

# 查看指定服务器的挂载点 
    [root@nfs data]# showmount -e 172.16.1.31
    Export list for 172.16.1.31:
    /data 172.16.1.0/20

# 查看本机的挂载点
    [root@nfs data]# showmount -e 
    Export list for nfs:
    /data 172.16.1.0/20

9、给服务端设置权限

	[root@nfs data]# chown nfsnobody.nfsnobody /data/



挂载不上:

    1、selinux没关闭

    2、防火墙没有关闭

    3、nfs客户端未安装
    	[root@web01 ~]# yum install nfs-utils -y

    没权限:

    nfs服务端是root权限
    [root@nfs data]# chown nfsnobody.nfsnobody /data/

2.nfs参数详详情

NFS共享参数参数作用
rw 读写权限 (第一组) 可读可写
ro 只读权限(第一组) 可读
root_squash 当NFS客户端以root访问时,修改权限为NFS服务器的匿名用户(不常用)(第二组)只能root用户访问
no_root_squash 当NFS客户端以root访问时,修改权限为NFS服务器的root用户(几乎不用)(第二组)只能root用户访问
all_squash 当NFS客户端以任意用户访问时,修改权限为NFS服务器的匿名用户(常用)(第二组)任意用户访问
no_all_squash 当NFS客户端以任意用户访问时,不修改权限(不常用)(第二组)
sync 同时将数据写入内存和磁盘(保证数据不丢失)(第三组)
async 优先将数据写入内存,再写入硬盘;效率高,但是会丢失数据(第三组)
anonuid 配合all_squash,指定匿名用户的uid,用户为系统用户,必须存在(第四组)
在/etc/exports加anonuid=uid号
anongid 配合all_squash,指定匿名用户的gid(第四组)
在/etc/exports加anongid=gid号

3.nfs案例

1、安装web服务软件
	[root@web01 ~]# yum install -y httpd php
2、上传代码
cd /var/www/html
vim index.php
    <?php


    phpinfo();
			
3、开启web服务
	[root@web01 html]# systemctl start httpd
将图片上传到web01上访问
   3.1、将图片上传至NFS服务器
   		拖过来就好了
   3.2、将NFS挂载到web网站对应目录
   		[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/img/
   3.3、上传代码
   		<!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/狗.jpg" alt="">
				</body>
				</html>
   3.4、浏览器访问
   		192.168.15.7

4.nfs上传案例

1、安装web服务软件
	[root@web02 ~]# yum install httpd php -y
2、上传代码
	
3、将代码复制到网站根目录(/var/www/html)
	[root@web02 ~]# cp kaoshi/* /var/www/html/

4、开启web服务
[root@web02 html]# systemctl start httpd


5、统一用户(权限)
	useradd www -r -M -s /sbin/nologin -u 996
	
	查找某个软件的配置
	rpm -qc [软件名]

	5.2、修改httpd的启动用户
		[root@web02 etc]# vim /etc/httpd/conf/httpd.conf 
		User www
		Group www

    5.3、重启WEB服务软件

  		[root@web02 etc]# systemctl restart httpd

    5.4、修改站点目录的用户
		[root@web02 etc]# chown -R www.www /var/www/html/
   

    5.5、关闭selinux
		setenforce 0 临时关闭
		
  

   5.6、上传的文件共享至web01中
   		挂载到 172.16.1.31 :/data下
		[root@web02 etc]# mount -t nfs 172.16.1.31:/data /var/www/html/upload
posted @ 2021-10-20 21:15  迪迦张  阅读(43)  评论(0编辑  收藏  举报