您现在的位置是:首页 >其他 >数据备份系列:Rsync 备份详解(二)网站首页其他

数据备份系列:Rsync 备份详解(二)

啊 这 2024-06-11 18:01:02
简介数据备份系列: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:UsersAdministrator>C:softcwRsync_5.4.1_x86_Free
sync.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:UsersAdministrator>C:softcwRsync_5.4.1_x86_Free
sync.exe -avzp --password-file=C:softcwRsync_5.4.1_x86_Freepasswd.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:softcwRsync_5.4.1_x86_Free
sync.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 Linux 客户端 Rsync 结合 Inotify 进行实时增量同步

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

(1)Inotify 的安装

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

(2)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

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

[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]

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

[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

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

#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 &

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。