inotify+rsync服务搭建

hash算法校验

echo 123 > a.txt				
md5sum a.txt > log							将hash算法的校验值写入log文件中
cat log										查看hash算法的校验值
# ba1f2511fc30423bdbb183fe33f3dd0f  a.txt
md5sum -c log								验证hash值是否正确,没有文件内容被更改,hash值显示ok
# a.txt: OK
echo 666 >> a.txt							添加文本文件的内容					
cat a.txt									查看文本文件的内容
# 123
# 666
md5sum -c log								验证hash值是否正确,更改文件内容,hash值显示failed
# a.txt: FAILED
# md5sum: WARNING: 1 computed checksum did NOT match

电子邮件

  1. 进入qq邮箱 =》 设置 =》 账户
    在这里插入图片描述
  2. 邮箱配置文件/etc/mail.rc
vim /etc/mail.rc 								添加电子邮件配置文件
	......
	set from=469040125@qq.com					邮箱名
	set smtp=smtps://smtp.qq.com:465
	set smtp-auth-user=469040125@qq.com
	set smtp-auth-password=jxpscegfgkjucahc			授权码
	set smtp-auth=login
	set ssl-verify=ignore
	set nss-config-dir=/etc/pki/nssdb/

- 发送邮件格式
mail -s "测试文件" 469040125@qq.com<a.txt			标题为"测试文件",发送邮件内容为a.txt

nfs+rsync案例

客户端需求:

  1. 客户端提前准备存放的备份的⽬录,⽬录规则如下:/backup/nfs_172.16.1.31_2018-09-02
  2. 客户端在本地打包备份(系统配置⽂件、应⽤配置等)拷⻉⾄/backup/nfs_172.16.1.31_2018-09-02
  3. 客户端最后将备份的数据进⾏推送⾄备份服务器
  4. 客户端每天凌晨1点定时执⾏该脚本
  5. 客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

服务端需求:

  1. 服务端部署rsync,⽤于接收客户端推送过来的备份数据
  2. 服务端需要每天校验客户端推送过来的数据是否完整
  3. 服务端需要每天校验的结果通知给管理员
  4. 服务端仅保留6个⽉的备份数据,其余的全部删除

客户端

  • 创建客户端需求脚本文件
1. 创建本地备份目录
mkdir /backup/						# 创建本地备份目录		

2. 创建客户端需求脚本文件
vim deploy-client.sh					# 创建客户端脚本文件
	#!/bin/bash
	
	# 创建本地备份目录/backup/nfs_172.16.1.31_2021-04-21
	mkdir -pv /backup/$(hostname)_`hostname -I | awk '{print $2}'`_`date +%F`		

	# 切换至本地备份目录下,将目录/etc/hosts   /etc/resolv.conf打包压缩到本地备份目录下
	cd /backup/$(hostname)_`hostname -I | awk '{print $2}'`_`date +%F`
	tar -cvzf system_file.tar.gz   /etc/hosts  /etc/resolv.conf
	
	# 记录打包压缩号的MD5system_file.tar.gz哈希值(校验文件的完整性),写入md5sum.log文件
	md5sum system_file.tar.gz > md5sum.log
	rsync -avz /backup/$(hostname)_`hostname -I | awk '{print $2}'`_`date +%F` lala@192.168.15.41::nana
	
	# 00 01 * * *  deploy.sh   		 计划任务,每天凌晨1点定时执⾏该脚本
	find /backup -mtime +7 -exec rm -rf {} \;			# 删除备份目录/backup目录下7天之后的数据

服务端

  • 搭建服务端rsync服务
1. 修改配置文件
vim /etc/rsyncd.conf
uid = rsync						
gid = rsync						
port = 873						
fake super = yes				
use chroot = no				
max connections = 200			
timeout = 600					
ignore errors					
read only = false				
list = false					
auth users = lala				
secrets file = /etc/rsync.passwd			
log file = /var/log/rsyncd.log				
#################################################################################
[nana]											
comment = "备份文件的目录"						
path = /lala_bak								

2. 创建启动守护进程时所用的的用户与组
useradd rsync -s /sbin/nologin -M				
# -s指定用户的登陆解释器(/sbin/nologin:禁止用户登陆系统);-M(不创建家目录)

3. 配置虚拟用户lala的密码文件
echo "lala:123" > /etc/rsync.passwd			
# 密码文件格式 用户名:密码
chmod 600 /etc/rsync.passwd				修改虚拟用户密码文件的权限

4. 创建模块[nana]的真实目录
mkdir /lala_bak
chown rsync:rsync /lala_bak				修改备份文件的目录路径的属主和属组

5. 启动守护进程
rsync --daemon				开启守护进程(当前登陆的用户是谁,谁就是这个rsync守护进程的属主)
  • 创建服务端需求脚本文件
1. 创建远程备份目录
mkdir /backup/							# 创建远程备份目录		

2. 修改电子邮件配置文件
vim /etc/mail.rc 								# 添加电子邮件配置文件
	......
	set from=469040125@qq.com					# 指定邮箱名
	set smtp=smtps://smtp.qq.com:465
	set smtp-auth-user=469040125@qq.com				# 指定邮箱名
	set smtp-auth-password=jxpscegfgkjucahc			# 指定授权码
	set smtp-auth=login
	set ssl-verify=ignore
	set nss-config-dir=/etc/pki/nssdb/

3. 创建服务端需求脚本文件
vim depoly-server.sh					# 创建服务端脚本文件	
	# !/bin/bash
	cd /lala_bak/nfs_172.16.1.31_`date +%F`/			# 切换到模块目录指定的目录下	
	
	md5sum -c md5sum.log						# hash算法校验传输的数据的完整性
	
	# 发送邮件
	mail -s "测试文件" 469040125@qq.com<md5sum.log			# hash算法的效验码通过qq邮箱发送给管理员

	find /backup -mtime +180 -exec rm -rf {} \;				# 删除备份目录文件下6个月以外的数据

chmod a+x depoly-server.sh						# 修改服务端脚本文件权限

修改脚本文件

  • if判断在脚本文件中的简写使用
- 文件,压缩包[ -f 文件名]
mkdir a.txt				
[ -f a.txt ]				判断a.txt文件是否存在
echo $?						查看上一条命令的执行结果
# 0			
rm -rf a.txt				删除a.txt文件
[ -f a.txt ]				判断a.txt文件是否存在	
echo $?						查看上一条命令的执行结果	
# 1

- 目录[ -d 目录名]
mkdir a
[ -d a ]					判断a目录是否存在
echo $?						查看上一条命令的执行结果
# 0
rm -rf a					删除a目录			
[ -d a ]					判断a目录是否存在	
echo $?						查看上一条命令的执行结果
# 1
  • 客户端需求脚本文件修改
vim deploy-client.sh					# 创建客户端脚本文件
	#!/bin/bash
	
	ROOT_DIRECTORY=/backup			
	HOSTNAME=$(hostname)
	LOCALOST=`hostname -I | awk '{print $2}'`
	DATE=`date +%F`
	
	DIR=$ROOT_DIRECTORY/${HOSTNAME}_${LOCALOST}_${DATE}				# 指定本地备份目录
	
	# 判断本地备份目录是否已经存在,不存在则创建本地备份目录
	[ -f $DIR ] || mkdir -pv $DIR			
	
	cd $DIR					# 切换本地备份目录下
	
	# 判断备份目录下的压缩包是否存在,不存在则将目录/var/log/messages打包压缩到本地备份目录下
	[ -f system_file.tar.gz ] || tar -cvzf system_file.tar.gz  /var/log/messages	
		
	# 判断hash校验文件是否存在,将压缩文件system_file.tar.gz的hash校验码写入md5sum.log文件				
	[ -f md5sum.log ] || md5sum system_file.tar.gz > md5sum.log		
	
	rsync -avz $DIR lala@192.168.15.41::nana			# 本地备份目录与远程同步
	
	# 00 01 * * *  deploy.sh
	find /backup -mtime +7 -exec rm -rf {} \;			# 删除本地备份文件6个月以前的数据
  • 服务端需求脚本文件修改
vim depoly-server.sh						# 创建服务端脚本文件	
	# !/bin/bash
	
	ROOT_DIRECTORY=/lala_bak
	CLIENT_HOSTNAME=nfs
	CLIENT_HOST=`hostname -I | awk '{print $2}'`	
	DATE=`date +%F`
	
	# /lala_bak/nfs_172.16.1.31_2021-04-21/
	DIR=${ROOT_DIRECTORY}/${CLIENT_HOSTNAME}_${CLIENT_HOST}_${DATE}				# 指定远程备份目录
	
	cd $DIR							# 切换到远程的备份目录下
	
	md5sum -c md5sum.log				# hash算法校验传输的数据的完整性
	
	# 发送邮件
	mail -s "测试文件" 469040125@qq.com<md5sum.log			# hash算法的效验码通过qq邮箱发送给管理员
	
	find /backup -mtime +180 -exec rm -rf {} \;				# 删除备份目录文件下6个月以外的数据

rsync结合inotify实现实时同步

  • 实时监控同步架构图
    在这里插入图片描述
  • inotify参数详解
inotify参数详解
		-m 持续监控
		-r 递归
		-q 静默,仅打印时间信息
		--timefmt 指定输出时间格式
		--format 指定事件输出格式
		 %Xe 事件
		 %w ⽬录
		 %f ⽂件
		 
-e 指定监控的事件
		 access 访问
		 modify 内容修改
		 attrib 属性修改
		 close_write 修改真实⽂件内容
		 open 打开
		 create 创建
		 delete 删除
		 umount 卸载
  • 监控数据源是否有变化
    执行逻辑 : 监控客户端指定文件路径的变化,如果监控的目录发生变化,那么就执行同步到远程的脚本文件
1. 安装inotify软件
vim /etc/yum.repos.d/epel.repo				# 添加华为云epel源
	[epel]
	name='epel repo'
	baseurl=https://repo.huaweicloud.com/epel/7/x86_64/
	gpgcheck=0

yum clean all					清空缓存
yum makecache					生成新的缓存
yum -y install inotify-tools			下载inotify软件	

2. 创建实时监控脚本文件
vim inotify.sh
	#!/bin/bash
	export RSYNC_PASSWORD=123				# 将服务端密码添加至环境变量,可以实现免交互登陆服务端
	
	inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /var/log/messages | while read line; do /root/deploy-client.sh ; done
	# 监控本地/var/log/messages的文件变化,变化执行客户端脚本/root/deploy-client.sh

- 在后台忽略信号hang up信号启动脚本
nohup ./inotify.sh &
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值