数据备份系列:Rsync 备份实战记录(二)

一、Rsync + Cron 场景使用

        在对数据备份要求实时性不高的情况下,可优先考虑该场景,选择一个合适的时间,对数据进行定时远程增量同步。

        在《数据备份系列:Rsync 备份详解(一)》中我们已经对服务搭建以及远程传输有了了解,接下来就是结合之前的内容进行扩展。

1.1 服务端准备工作

#删除之前测试的数据,在服务端创建两个文件夹,用于接收 linux 和 windows 客户端同步过来的数据
[root@rsync162 backup]# mkdir from_linux_client
[root@rsync162 backup]# mkdir from_windows_client 
[root@rsync162 backup]# ll
总用量 0
drwxr-xr-x. 2 root root 6 4月  24 09:53 from_linux_client
drwxr-xr-x. 2 root root 6 4月  24 09:53 from_windows_client

1.2 windows 客户端配置

(1)在 windows 客户端目录下新建一个 logs 目录,用于传输测试

#进程传输测试
C:\Users\Administrator>C:\soft\cwRsync_5.4.1_x86_Free\rsync.exe -avzp --password-file=/cygdrive/c/soft/cwRsync_5.4.1_x86_Free/passwd.txt --port=9999 /cygdrive/c/soft/cwRsync_5.4.1_x86_Free/logs test@192.168.0.162::proname/from_windows_client

#或者输入
C:\Users\Administrator>C:\soft\cwRsync_5.4.1_x86_Free\rsync.exe -avzp --password-file=C:\soft\cwRsync_5.4.1_x86_Free\passwd.txt --port=9999 /cygdrive/c/soft/cwRsync_5.4.1_x86_Free/logs test@192.168.0.162::proname/from_windows_client

(2)创建执行脚本 

#新建一个文件,重名名为 rsync.bat 编辑内容并保存:
@echo off
C:\soft\cwRsync_5.4.1_x86_Free\rsync.exe -avzp --password-file=/cygdrive/c/soft/cwRsync_5.4.1_x86_Free/passwd.txt --port=9999 /cygdrive/c/soft/cwRsync_5.4.1_x86_Free/logs test@192.168.0.162::proname/from_windows_client

(3)双击测试脚本

#服务端查看接收到的数据
[root@rsync162 from_windows_client]# pwd
/backup/from_windows_client
[root@rsync162 from_windows_client]# ll
总用量 0
drwx------. 2 root 401 106 4月  23 16:06 logs
[root@rsync162 from_windows_client]# ll logs/
总用量 23684
-rwx------. 1 root 401      284 3月  20 17:29 cc.txt
-rwx------. 1 root 401  3328826 4月  13 17:09 cwRsync_5.4.1_XiaZaiBa.zip
-rwx------. 1 root 401 20913856 3月  20 15:52 windows.zip.gz
-rwx------. 1 root 401      286 4月   3 13:10 新建文本文档.txt

(4)创建定时任务

 

 

 1.2 Linux 客户端配置

(1)和 windows 一样新建一个 logs 目录,用于传输测试

#先进行手动测试(手动测试没有问题)
[root@rsync164 ~]# rsync -avz --port 9999 --password-file /etc/rsync.pass /root/logs  test@192.168.0.162::proname/from_linux_client
sending incremental file list
logs/
logs/csp/
logs/csp/command-center.log.2022-05-10.0
logs/csp/command-center.log.2022-05-10.0.1
logs/csp/command-center.log.2022-05-10.0.2
logs/csp/command-center.log.2022-05-11.0
logs/csp/command-center.log.2022-05-11.0.1
logs/csp/command-center.log.2022-05-11.0.1.lck
logs/csp/command-center.log.2022-05-11.0.2
logs/csp/command-center.log.2022-05-11.0.2.lck
logs/csp/command-center.log.2022-05-11.0.3
logs/csp/command-center.log.2022-05-11.0.3.lck
logs/csp/command-center.log.2022-05-11.0.4
logs/csp/command-center.log.2022-05-11.0.lck
logs/csp/command-center.log.2022-05-12.0
logs/csp/command-center.log.2022-05-12.0.lck
logs/csp/command-center.log.2022-05-13.0
logs/csp/command-center.log.2022-05-16.0
logs/csp/command-center.log.2022-05-16.0.lck
logs/csp/command-center.log.2022-05-17.0
logs/csp/command-center.log.2022-05-17.0.lck
logs/csp/command-center.log.2022-05-18.0
logs/csp/command-center.log.2022-05-18.0.lck
logs/csp/command-center.log.2022-05-20.0
logs/csp/command-center.log.2022-05-20.0.lck
logs/csp/command-center.log.2022-05-23.0
logs/csp/command-center.log.2022-05-23.0.lck
......

(2)创建执行脚本

[root@rsync164 ~]# vi rsync.sh
#!/bin/bash
/usr/bin/rsync -avz --port 9999 --password-file /etc/rsync.pass /root/logs  test@192.168.0.162::proname/from_linux_client

(3)授权并测试脚本

#删除服务端数据,授予脚本执行权限
[root@rsync164 ~]# chmod 755 rsync.sh 
#测试执行(过程没有问题)
[root@rsync164 ~]# ./rsync.sh 
sending incremental file list
logs/
logs/csp/
logs/csp/command-center.log.2022-05-10.0
logs/csp/command-center.log.2022-05-10.0.1
logs/csp/command-center.log.2022-05-10.0.2
logs/csp/command-center.log.2022-05-11.0
logs/csp/command-center.log.2022-05-11.0.1
logs/csp/command-center.log.2022-05-11.0.1.lck
logs/csp/command-center.log.2022-05-11.0.2
logs/csp/command-center.log.2022-05-11.0.2.lck
logs/csp/command-center.log.2022-05-11.0.3
logs/csp/command-center.log.2022-05-11.0.3.lck
logs/csp/command-center.log.2022-05-11.0.4
logs/csp/command-center.log.2022-05-11.0.lck
logs/csp/command-center.log.2022-05-12.0
logs/csp/command-center.log.2022-05-12.0.lck
logs/csp/command-center.log.2022-05-13.0
logs/csp/command-center.log.2022-05-16.0
logs/csp/command-center.log.2022-05-16.0.lck
logs/csp/command-center.log.2022-05-17.0
logs/csp/command-center.log.2022-05-17.0.lck
logs/csp/command-center.log.2022-05-18.0
logs/csp/command-center.log.2022-05-18.0.lck
logs/csp/command-center.log.2022-05-20.0
logs/csp/command-center.log.2022-05-20.0.lck
logs/csp/command-center.log.2022-05-23.0
logs/csp/command-center.log.2022-05-23.0.lck
logs/csp/command-center.log.2022-05-25.0
......

#在服务端查看已经传输的文件
[root@rsync162 from_linux_client]# ll
总用量 0
drwxr-xr-x. 5 root root 48 5月  11 2022 logs
[root@rsync162 from_linux_client]# pwd
/backup/from_linux_client
[root@rsync162 from_linux_client]# ll
总用量 0
drwxr-xr-x. 5 root root 48 5月  11 2022 logs
[root@rsync162 from_linux_client]# ll logs/
总用量 20
drwxr-xr-x. 2 root root 16384 1月  28 09:22 csp
drwxr-xr-x. 2 root root    42 5月  10 2022 nacos
drwxr-xr-x. 2 root root    94 5月  12 2022 tecsun-job

(4)创建定时任务

#每台凌晨1点进行数据同步
[root@rsync164 ~]# crontab -e
* 1 * * * /root/rsync.sh

        到此 Rsync + cron 实验完成,过程中会遇到定时任务执行没反应的问题,特别的 windows 下的定时任务,一个是要做好单独运行测试,一个是要点击定时任务运行测试,如果都没有问题就可以了

二、Rsync + Inotify 场景使用

2.1 关于 Inotify

2.1.1 什么是 Inotify

        Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。需要注意的是,使用 Inotify 的系统内核要不低于 2.6.13。

       特定需求下我们是需要对文件数据进行实时增量同步的,而实时同步的优点在于:一旦同步源出现变化,则立即进行同步,无变化则不执行。

        在 Rsync 中,数据同步要么客户端向服务端推送文件,要么客户端从服务端下载文件,这里通过 Inotify 实现远程实时同步,就是用第一种方式。

2.1.2 Inotify 的辅助工具

  • inotifywait: 用于持续监控,实时输出结果
  • innotifywatch: 用于短期监控,任务完成后再出结果

2.2 Windows 客户端 Rsync 结合 Inotify 进行实时增量同步

        前提:服务端搭建请参考《数据备份系列:Rsync 备份详解(一)》

2.2.1 Windows 下 Inotify 的安装

        说明:windows下没有找到现成的 inotify 软件或程序可用,只能自己进行编译,然后结合前面的 cwrsync 进行使用,而要编译 inotify,需要先安装 Cygwin(作用是:Cygwin就是在Windows中增加了一个中间层——兼容POSIX的模拟层,并在此基础上构建了大量Linux-like的软件工具)

具体可参考知乎说明:Cygwin系列

(1)安装 Cygwin 过程

a.下载链接:官网下载

 b.双击安装

注意:Cygwin 对部分 windows 已经弃用,如经典的 Windows Server 2008,本次实验使用的是 windows 10 系统。

步骤:下一页》从互联网安装》选择安装根目录》选择软件包目录》使用系统代理设置》选择可用下载站点》选择安装软件包

 c.点开all》点开Devel》选择make版本》下一页执行安装》等待完成安装》完成安装》最后在系统的环境变量path中添加变量环境,默认安装的话是 C:\cygwin64\bin

(如果要安装其他的软件,重新运行安装软件进行选择即可)

 d.下载:inotify-win-master.zip 文件并解压(下载地址:GitHub下载)

e.进入解压目录进行编译(前提是系统要安装 .NET Framework 执行完会生成 inotifywait.exe 执行文件)

C:\soft\cwRsync_5.4.1_x86_Free\inotify-win-master>C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:inotifywait.exe src\*.cs

C:\soft\cwRsync_5.4.1_x86_Free\inotify-win-master>inotifywait.exe
Usage: inotifywait [options] path [...]

Options:
-r/--recursive:  Recursively watch all files and subdirectories inside path
-m/--monitor:    Keep running until killed (e.g. via Ctrl+C)
-q/--quiet:      Do not output information about actions
-e/--event list: Which events (create, modify, delete, move) to watch, comma-separated. Default: all
--format format: Format string for output.
--exclude:       Do not process any events whose filename matches the specified regex
--excludei:      Ditto, case-insensitive

Formats:
%e             : Event name
%f             : File name
%w             : Path name
%T             : Current date and time

 

2.3 Linux 客户端 Rsync 结合 Inotify 进行实时增量同步

2.3.1 Linux 下 Inotify 的安装

[root@rsync164 ~]# yum install -y inotify-tools

2.3.2 Linux 下 rsync+inotify 脚本操作

(1)inotify 将监控事件结果通过脚本来执行 while 循环内的 rsync 同步请求操作

[root@rsync164 ~]# vi rsync_inotify.sh 
#/bin/bash
#rsync服务器
server=192.168.0.162
#传输用户
user=test
#密码文件
passwd=/etc/rsync.pass
#同步源文件(监控文件)
src=/opt/logs
#同步目标目录
dst=from_linux_client
#进行数据同步(提醒:生产环境中 --delete 参数要慎用)
rsync -azrtopg --delete --port 9999 --password-file $passwd $src $user@$server::proname/$dst
#监测 create,move,delete,modify 事件
/usr/bin/inotifywait -mrq -e create,move,delete,modify  $src | while read files;do
   rsync -azrtopg --delete --port 9999 --password-file $passwd $src $user@$server::proname/$dst
done

(2)客户端执行脚本测试

[root@rsync164 ~]# ll /opt/logs/
total 12
-rw-r--r-- 1 root root 1231 May  8 17:57 1.log
-rw-r--r-- 1 root root   21 May  8 17:58 2.log
-rw-r--r-- 1 root root   46 May  8 18:02 3.log
[root@rsync164 ~]# ./rsync_inotify.sh
#出现如下信息,说明密码错了,注意自己使用的用户和密码
[root@rsync164 ~]# ./rsync_inotify.sh  
@ERROR: auth failed on module proname
rsync error: error starting client-server protocol (code 5) at main.c(1656) [sender=3.1.2]

(3)服务端查看接收文件信息

[root@rsync162 ~]# ll /backup/from_linux_client/
总用量 0
[root@rsync162 ~]# ll /backup/from_linux_client/
总用量 0
drwxr-xr-x. 2 root root 63 5月   8 2023 logs
[root@rsync162 ~]# ll /backup/from_linux_client/logs/
总用量 12
-rw-r--r--. 1 root root 1231 5月   8 2023 1.log
-rw-r--r--. 1 root root   21 5月   8 2023 2.log
-rw-r--r--. 1 root root   46 5月   8 2023 3.log

(4)客户端对监控的目录做变化,对比服务端接收情况

#a.客户端新增4.log文件
[root@rsync164 logs]# ll
total 16
-rw-r--r-- 1 root root 1231 May  8 17:57 1.log
-rw-r--r-- 1 root root   21 May  8 17:58 2.log
-rw-r--r-- 1 root root   46 May  8 18:02 3.log
-rw-r--r-- 1 root root   10 May  8 18:14 4.log
#服务端文件变化,可以看到服务端也新增了4.log文件
[root@rsync162 ~]# ll /backup/from_linux_client/logs/
总用量 16
-rw-r--r--. 1 root root 1231 5月   8 2023 1.log
-rw-r--r--. 1 root root   21 5月   8 2023 2.log
-rw-r--r--. 1 root root   46 5月   8 2023 3.log
-rw-r--r--. 1 root root   10 5月   8 2023 4.log

#b.客户端修改3.log内容(如新增)
[root@rsync164 logs]# ll
total 16
-rw-r--r-- 1 root root 1231 May  8 17:57 1.log
-rw-r--r-- 1 root root   21 May  8 17:58 2.log
-rw-r--r-- 1 root root  129 May  8 18:29 3.log
-rw-r--r-- 1 root root   10 May  8 18:14 4.log
#服务端文件变化,可以看到3.log文件大小也变了
[root@rsync162 ~]# ll /backup/from_linux_client/logs/
总用量 16
-rw-r--r--. 1 root root 1231 5月   8 2023 1.log
-rw-r--r--. 1 root root   21 5月   8 2023 2.log
-rw-r--r--. 1 root root  129 5月   8 2023 3.log
-rw-r--r--. 1 root root   10 5月   8 2023 4.log

#c.客户端删除2.log文件
[root@rsync164 logs]# rm 2.log 
rm: remove regular file ‘2.log’? y
#服务端查看文件变化,可以看到2.log也没了(--delete参数起的作用)
[root@rsync162 ~]# ll /backup/from_linux_client/logs/
总用量 12
-rw-r--r--. 1 root root 1231 5月   8 2023 1.log
-rw-r--r--. 1 root root  129 5月   8 2023 3.log
-rw-r--r--. 1 root root   10 5月   8 2023 4.log

(5)后台运行持续监控脚本

[root@rsync164 ~]# ./rsync_inotify.sh &

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/18640.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙学习总结

控件 button 源码所在路径,小编也只是猜测,还没搞懂鸿蒙上层app到底层的玩法,网上也没相关资料,找源码真是费劲(不是简单的下载个源码的压缩包,而是找到里面的控件比如Button,或者UIAbility实现的源码&…

基于python语言dlib库和opencv库的视频眨眼检测

功能说明: 基于python编程语言,使用dlib 和opencv开发的视频眨眼检测。 环境: * python 3.6.8 * opencv 3.4.2.16 * dlib 19.7.0 原理: 1.使用opencv-python读取处理视频图像 2.使用线程机制处理人脸检测关键点 3.根…

elk生命周期删除日志

elk版本:7.14 一、简介 ELK日志我们一般都是按天存储,例如索引名为"prodlog-2023-05-08",因为日志量所占的存储是非常大的,我们不能一直保存,而是要定期清理旧的,这里就以保留7天日志为例。 自…

UDP通信机制详解

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

opencv_c++学习(五)

Mat类数值存储方式 上图为opencv中三通道数据的存储方式,反映到图像上则为空间维度为3*3,通道为3的图像。 Mat类的属性 Mat类的属性如上,在这里我们解释一下step。step是行列数与数据类型的字节数相乘的数据。 Mat类元素读取 在Mat中&…

[GFCTF 2021] day2

Baby_Web 查看源码发现 <!--源码藏在上层目录xxx.php.txt里面&#xff0c;但你怎么才能看到它呢?--> 然后抓包看中间件&#xff0c;Apache/2.4.49 (Unix) 存在目录穿越漏洞 curl http://node4.anna.nssctf.cn:28805/cgi-bin/.%2e/.%2e/.%2e/.%2e/var/www/index …

Linux LED 驱动开发实验

1、LED 灯驱动原理 Linux 下的任何外设驱动&#xff0c;最终都是要配置相应的硬件寄存器。LED 灯驱动最 终也是对 I.MX6ULL 的 IO 口进行配置&#xff0c;在 Linux 下编写驱动要符合 Linux 的驱动框架。I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 GPIO1_IO03 这个引脚上&…

一起Talk Android吧(第五百四十二回:无进度值ProgressBar)

文章目录 概念介绍使用资源文件实现使用默认设置修改风格使用动画资源 使用代码实现经验总结 各位看官们大家好&#xff0c;上一回中咱们说的例子是"ProgressBar总结",本章回中介绍的例子是" 无进度值ProgressBar"。闲话休提&#xff0c;言归正转&#xf…

基于磁盘的Kafka为什么这么快

基于磁盘的Kafka为什么这么快 原创 Wyman 大数据技术架构 2019-05-23 18:04 Kafka是大数据领域无处不在的消息中间件&#xff0c;目前广泛使用在企业内部的实时数据管道&#xff0c;并帮助企业构建自己的流计算应用程序。Kafka虽然是基于磁盘做的数据存储&#xff0c;但却具有…

从FPGA说起的深度学习(九)- 优化最终章

这是新的系列教程&#xff0c;在本教程中&#xff0c;我们将介绍使用 FPGA 实现深度学习的技术&#xff0c;深度学习是近年来人工智能领域的热门话题。 在本教程中&#xff0c;旨在加深对深度学习和 FPGA 的理解。 用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为…

CTFHub-Git泄露-Log

前言 git是一个版本控制工具&#xff0c;通过泄露的.git文件可还原代码 题目如下 wp 1. dirsearch目录扫描 发现存在git泄露&#xff0c;根据提示下载对应git利用工具GitHack&#xff0c;这个工具的特点是能还原历史版本 2. 使用工具下载源码 tips: 最好在linux中操作&…

RabbitMQ、RabbitMQ发布/订阅模式

1.RabbiMQ RabbitMQ是一个消息中间件 MQ的基本结构 1.1RabitMQ安装 参考&#xff1a;Docker安装 Docker中部署RabbitMQ 2.入门案例 2.1.publisher实现 package cn.itcast.mq.helloworld;import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; im…

算法记录 | Day53 动态规划

1143.最长公共子序列 思路&#xff1a; 本题和动态规划&#xff1a;718. 最长重复子数组 (opens new window)区别在于这里不要求是连续的了&#xff0c;但要有相对顺序&#xff0c;即&#xff1a;“ace” 是 “abcde” 的子序列&#xff0c;但 “aec” 不是 “abcde” 的子序…

力扣sql中等篇练习(十六)

力扣sql中等篇练习(十六) 1 不同性别每日分数统计 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # 分数是往后累加的 SELECT s2.gender,s2.day,sum(s1.score_points) total FROM Scores s1 CROSS JOIN Scores s2 ON s2.gen…

细谈抽象类

目录 抽象类 1.抽象类是被abstract修饰的类 2.抽象类中的抽象方法 3.抽象类中可以有和普通类一样的成员变量和成员方法 4.抽象类不能被实例化 5.那么抽象类不能被实例化要它有何用&#xff1f;&#xff1f;&#xff1f; 6.注意&#xff1a; 抽象类 如果一个类中没有包含足…

Web3.0介绍与产业赛道(去中心化,金融与数字资产,应用与存储,区块链技术)

文章目录 1、web3.0时代——区块链技术2、产业赛道&#xff1a;去中心化金融与数字资产3、产业赛道&#xff1a;去中心化应用与存储4、区块链&#xff1a;基础设施与区块链安全和隐私 1、web3.0时代——区块链技术 Web3.0是什么 Web3.0是指下一代互联网技术&#xff0c;它将在…

测试2:基础

目录 1.软件测试的生命周期 2.描述BUG 3.定义bug的级别 1.Blocker(崩溃) 2.Critical(严重) 3、Major&#xff08;一般&#xff09;&#xff1a; 4、Minor&#xff08;次要&#xff09;&#xff1a; 4.BUG的生命周期 1.软件测试的生命周期 需求分析,测试计划,测试设计,测…

【上进小菜猪】使用Ambari提高Hadoop集群管理和开发效率:提高大数据应用部署和管理效率的利器

&#x1f4ec;&#x1f4ec;我是上进小菜猪&#xff0c;沈工大软件工程专业&#xff0c;爱好敲代码&#xff0c;持续输出干货&#xff0c;欢迎关注。 介绍 Hadoop是一种开源的分布式处理框架&#xff0c;用于在一组低成本硬件的集群上存储和处理大规模数据集。Ambari是一种基…

【分布式搜索引擎03】

分布式搜索引擎03 11.9.数据聚合11.9.1.聚合的种类11.9.2.DSL实现聚合11.9.2.1.Bucket聚合语法11.9.2.2.聚合结果排序11.9.2.3.限定聚合范围11.9.2.4.Metric聚合语法11.9.2.5.小结 11.9.3.RestAPI实现聚合11.9.3.1.API语法11.9.3.2.业务需求11.9.3.3.业务实现 11.10.自动补全&a…

大学毕业设计使用python制作

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…