数据备份系列: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 &

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

啊 这

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

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

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

打赏作者

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

抵扣说明:

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

余额充值