rsync+inotify文件实时同步

1、rsync+inotify文件实时同步

内容:
• rsync 远程同步
• 实战1: 备份/var/www/html 目录
• 实战2: 使用ssh密钥实现无交互备份
• 实战3:配置rsync+inotify实现实时同步
• 实验环境:
服务端:63.cn IP:192.168.10.63
客户端:64.cn IP:192.168.10.64

rsync 远程同步: 一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。
作用:做数据备份
备份方式:
完全备份
增量备份
在这里插入图片描述
scp和rsync区别
当文件数据很大时候 :SCP 无法备份呢大量数据 ;特点 : 先统一信息,像windows复制
RSYNC 边复制,边比较,边统计。

rsync客户端 好处:

优点: 第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。支持增量备份。
选择性的保持 : 符号链接,硬链接,文件属性,权限 及时间 等。
传输前执行压缩。适用于异地备份 ,镜像服务器等应用 。
安全,使用ssh做为传输端口。 sftp ,ssh
官网:http://rsync.samba.org
在这里插入图片描述
首先认识同步数据的方式:
推: 一台主机负责把数据传给其它主机。服务器开销大。适合后端服务器比较少 拉: 所有主机定时去找一主机拉数据 。 可能会导致数据同步缓慢。好处,节省服务器开销
在这里插入图片描述
方法二:
在这里插入图片描述

实战:使用rsync进行数据同步

rsync命令的基本用法:
格式:rsync 【选项】 源文件 目标文件

常见的选项:

-a,–archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD
-r,–recursive 对子目录以递归模式处理
-l,–links 表示拷贝链接文件
-p , --perms 表示保持文件原有权限
-t , --times 表示保持文件原有时间
-g , --group 表示保持文件原有属用户组
-o , --owner 表示保持文件原有属主
-D , --devices 表示块设备文件信息
-z , --compress 表示压缩传输
-H 表示硬连接文件
-A 保留ACL属性信息
-P 显示传输进度
–delete 删除那些目标位置有而原始位置没有的文件

实战1: 备份xuegod63的/var/www/html 目录到xuegod64的/web-back。

开始备份:
63: 创建用于测试的数据

63 ~]# cp -r /boot/grub/ /var/www/html/

备份63的/var/www/html 目录到64的/web-back
注:rsync是基于ssh协议。需要知道对端服务器的root和密码

63 ~]# rsync -azP --delete /var/www/html/  root@192.168.1.64:/web-back

常见的选项:

-a,–archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD
-z , --compress 表示压缩传输
-P 显示传输进度
–delete 删除那些目标位置有而原始位置没有的文件

你打算几点备份?
24点,不行。 业务最不忙的时候。
3:00 人都休息。 找一个人最少的时间去备份。 不是24:00.
每天晚上3点起来备份???

实战2: 使用ssh密钥实现无交互备份。做成脚本,将63上的数据,定期备份到64上。

在63上生成密钥对

63 ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #直接回库
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:  #直接回库
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:   #直接回库
ac:64:7f:6c:54:41:a1:80:4a:ab:79:9a:6d:d1:ef:e0 root@xuegod63.cn
The key's randomart image is:  
+--[ RSA 2048]----+
|       ..  .+.   |
|    . .  . . .   |
|   . o    . .    |
|    o  .   .     |
|   o .o S .      |
|  o oo.o o       |
|   = .o.. +      |
|  o o. ..o       |
|   .  E..        |
+-----------------+

查看生成的公钥和私钥:

63 ~]# ls /root/.ssh/
id_rsa(私钥)  id_rsa.pub(公钥)  known_hosts

将公钥上传到xuegod64 数据源

63 ~]# ssh-copy-id root@192.168.1.64
root@192.168.1.64's password: 
Now try logging into the machine, with "ssh 'root@192.168.1.64'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

相当于你执行了:

63 ~]# scp /root/.ssh/id_rsa.pub   root@192.168.1.64:/root/.ssh/authorized_keys

查看:

64 ~]# ls /root/.ssh/
authorized_keys  known_hosts

测试,不输密码直接登录:

63 ~]# ssh root@192.168.1.64
64 ~]# exit

测试,不输密码直接备份:

64 ~]# rm -rf /web-back/*
[root@xuegod63 ~]# rsync -azP --delete /var/www/html/  root@192.168.1.64:/web-back

登录顺序: 服务器A想直接登录B, 把A的公钥上传到B上。
扩展:
快速查找历史命令:
ctrl+R -》 输入历史命令的关键字-》按下右方向键
总结:
1、在xuegod63上生成密钥对
2、将公钥上传到xuegod64 数据源
3、执行备份命令 rsync 实现无交互备份

实战:配置rsync+inotify实现实时同步
把xuegod63.cn服务器上的/var/www/html目录时实同步到xuegod64.cn主机上的/web-back目录中。

inotify概述:

Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
修改windows注册表,安装一些有危险性的软件。 这时,系统或安全卫士会弹出以下窗口:
在这里插入图片描述
使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性、周期过密等问题。

查看是否支持inotify,从kernel 2.6.13开始正式并入内核。

63 ~]# uname -r
2.6.32-220.el6.x86_64

安装inotify-tools-3.13.tar:
上传

63 ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm

rz 上传
sz 下载

安装inotify-tools-3.13.tar:

63 ~]# tar -zxvf inotify-tools-3.13.tar.gz
63 ~]# cd inotify-tools-3.13
63 inotify-tools-3.13]# ./configure   检查安装环境
63 inotify-tools-3.13]# make -j 4   #make编译,将源代码编译成二进制,可执行的文件   

源码编译mysql或内核: make -j 4 快。

63 inotify-tools-3.13]# make  install  # 安装
63 ~]# inotifywait -h   

常用参数:
-e 用来指定要监控哪些事件。
这些事件包括: create创建,move移动,delete删除,modify修改文件内容,attrib属性更改。
-m 表示持续监控
-r 表示递归整个目录
-q 表示简化输出信息。

63 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/

在另一个终端登录,在/var/www/html目录进行相关的操作,然后,回到原来的终端查看监控变化情况。

63 ~]# echo aaa > /var/www/html/a.html
63 ~]# mkdir /var/www/html/test
63 ~]# cp /etc/passwd /var/www/html/test/
63 ~]# rm -rf /var/www/html/test/passwd

查看变化:

63 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/
/var/www/html/ CREATE a.html
/var/www/html/ MODIFY a.html
/var/www/html/ CREATE,ISDIR test
/var/www/html/test/ CREATE passwd
/var/www/html/test/ MODIFY passwd
/var/www/html/test/ DELETE passwd

注:使用inotifywait输出的监控结果中,每行记录中依次包括目录、事件、文件。据此可以识别变动情况。

编写触发式同步脚本
思路: 只要使用inotifywait检测到事件时,自动执行rsync进行同步操作即可。

63 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/
/var/www/html/   CREATE   a.html

63 ~]# cat a.sh 
#!/bin/bash
inotifywait -mrq -e create,move,delete,modify /var/www/html/  | while read a b c
do 	
rsync -azP --delete /var/www/html/ root@192.168.10.64:/web-back
done
63 ~]# chmod +x a.sh
63 ~]# ./a.sh

测试:
创建文件测试
数据已经实时同步。

常见报错

问题一:

@ERROR: chroot failedrsync error: error starting client-server protocol (code 5) atmain.c(1522) [receiver=3.0.3]

原因:
服务器端的目录不存在或无权限。
创建目录并修正权限可解决问题。

问题二:

@ERROR: auth failed on module teersync error: error starting client-server protocol (code 5) atmain.c(1522) [receiver=3.0.3]

原因:
服务器端该模块(tee)需要验证用户名密
码,但客户端没有提供正确的用户名密码,认
证失败。
提供正确的用户名密码解决此问题。

问题三:

@ERROR: Unknown module ‘tee_nonexists’rsync error: error starting client-server protocol (code 5) atmain.c(1522) [receiver=3.0.3]

原因:
服务器不存在指定模块。
提供正确的模块名或在服务器端修改成你要
的模块以解决问题。

测试
都配置完毕之后就是测试了。在 FreeBSD机器上,输入命令

rsync -vzrtop --delete
/home/andrewy/etc
test@192.168.21.41::backup --password-file=/etc/rsyncd.password

查看同步效果。
注 意 : 我 这 里 是 直 接 以 root 进 行 操 作。rsync 以 delete 操作时要注意,它会完全同步这边的目录与服务器的目录中的文件,这样会产生一个后果,它会删掉服务器中多余的文件。如果是线上机器,请慎之又慎,切记!

2、使用rsync备份(C/S模式)

Remote Synchronize简称rsync,这是一款可以远程同步文件的软件,同步过程采用rsync加密算法保证了文件安全,并且同步的文件可保持原文件的属性(比如权限、时间等)不变。
首先准备两台服务器作为实验环境,按照以下
步骤搭建实验环境。服务器A:配置为rsync服务器(假设IP为
192.168.61.130)。

#安装rsync软件
[root@localhost ~]# yum install rsync

#安装xinetd
[root@localhost ~]# yum yum install xinetd

#配置xinetd、rsync开机自启动
[root@localhost ~]# chkconfig xinetd on
[root@localhost ~]# chkconfig rsync on

#手工创建rsync的配置文件/etc/rsyncd.conf
[root@localhost ~]# cat /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 10
strict mode = yes
port = 873
[backup]
path = /root
comment = Root Dir
ignore errors
read only = yes
list = no
auth users = john
secret file = /etc/rsync.sec

#配置密码文件/etc/rsync.sec并授予600权限
[root@localhost ~]# cat /etc/rsync.sec john:wang001
[root@localhost ~]# chmod 600 /etc/rsync.sec

#重启xinetd以激活rsync
[root@localhost ~]# service xinetd restart

#确认rsync已经运行
[root@localhost ~]# netstat -a | grep rsync
tcp 0 0 *:rsync *:* 

服务器B:配置为rsync客户端(假设IP为
192.168.61.131)

#安装rsync软件
[root@localhost ~]# yum install rsync

#配置rsync客户端密码文件并授予600权限
[root@localhost ~]# cat /etc/rsync.sec
wang001
[root@localhost ~]# chmod 600 /etc/rsync.sec
#创建目录/root/rsync_dir,用于同步服务器A[backup]模块中的文件
[root@localhost ~]# mkdir rsync_dir

#测试同步,把服务器A/root目录中的全部文件同步到本地/root/rsync_dir目录
[root@localhost  ~]#  rsync  -vzrtopg  --progress  --
delete john@192.168.61.130::backup
/root/rsync_dir --password-file=/etc/rsync.sec

最后脚本化以上rsync过程,增加服务器是否存活的判断,并增加日志使rsync过程更加清晰,这样便于在运行出错时排查问题。

#!/bin/bash
RSYNC_SERVER=192.168.61.130
RSYNC_USER=john
RSYNC_MODULE=backup
RSYNC_PASS=/etc/rsync.sec
RSYNC_LOG=/var/run/rsync.log
LOCAL_DIR=/root/rsync_dir
RSYNC=/usr/bin/rsync
PING=/bin/ping
run_rsync() {
echo "Starting Rsync at `date`" | tee -a $RSYNC_LOG
$RSYNC  -vzrtopg  --progress  --
delete $RSYNC_USER@$RSYNC_SERVER::$RSYNC_
MODULE $LOCAL_DIR --password-file=$RSYNC_PASS
echo "Rsync Finished at `date`" | tee -a $RSYNC_LOG
}
test_alive() {
$PING $RSYNC_SERVER -c 3 -w 3
if [ $? -ne 0 ]; then
echo "Server down at `date`" >> $RSYNC_LOG
exit 1
fi
}
test_alive > /dev/null 2>&1
run_rsync
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寰宇001

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

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

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

打赏作者

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

抵扣说明:

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

余额充值