配置rsync+inotify实现实时同步

本节所讲内容:

  • rsync 远程同步
  • 实战1: 备份/var/www/html 目录
  • 实战2: 使用ssh密钥实现无交互备份
  • 实战3:配置rsync+inotify实现实时同步
  • 实验环境:

服务端:xuegod63.cn   IP:192.168.10.63

客户端:xuegod64.cn   IP:192.168.10.64

 

rsync 远程同步: 一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、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。

                                       

开始备份:

xuegod63: 创建用于测试的数据

[root@xuegod63 ~]# cp -r /boot/grub/ /var/www/html/

备份xuegod63的/var/www/html 目录到xuegod64的/web-back

注:rsync是基于ssh协议。需要知道对端服务器的root和密码

[root@xuegod63 ~]# 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密钥实现无交互备份。做成脚本,将xuegod63上的数据,定期备份到xuegod64上。

在xuegod63上生成密钥对

[root@xuegod63 ~]# 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..        |

+-----------------+

 

查看生成的公钥和私钥:

[root@xuegod63 ~]# ls /root/.ssh/

id_rsa(私钥)  id_rsa.pub(公钥)  known_hosts

 

 

将公钥上传到xuegod64 数据源

 

[root@xuegod63 ~]# 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.

 

相当于你执行了:

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

查看:

[root@xuegod64 ~]# ls /root/.ssh/

authorized_keys  known_hosts

 

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

 [root@xuegod63 ~]# ssh root@192.168.1.64

[rget1@xuegod64 ~]# exit

 

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

[root@xuegod64 ~]# 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开始正式并入内核。

[root@xuegod63 ~]# uname -r

2.6.32-220.el6.x86_64

 

安装inotify-tools-3.13.tar:

上传

[root@xuegod63 ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm

rz  上传

sz  下载

 

安装inotify-tools-3.13.tar:

 

[root@xuegod63 ~]# tar -zxvf inotify-tools-3.13.tar.gz

[root@xuegod63 ~]# cd inotify-tools-3.13

[root@xuegod63 inotify-tools-3.13]# ./configure   检查安装环境

[root@xuegod63 inotify-tools-3.13]# make -j 4   #make编译,将源代码编译成二进制,可执行的文件  

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

 

[root@xuegod63 inotify-tools-3.13]# make  install  # 安装

[root@xuegod63 ~]# inotifywait -h  

常用参数:

-e  用来指定要监控哪些事件。

这些事件包括: create创建,move移动,delete删除,modify修改文件内容,attrib属性更改。

-m 表示持续监控

-r  表示递归整个目录

-q 表示简化输出信息。

[root@xuegod63 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/

 

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

[root@xuegod63 ~]# echo aaa > /var/www/html/a.html

[root@xuegod63 ~]# mkdir /var/www/html/test

[root@xuegod63 ~]# cp /etc/passwd /var/www/html/test/

[root@xuegod63 ~]# rm -rf /var/www/html/test/passwd

 

查看变化:

[root@xuegod63 ~]# 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进行同步操作即可。

[root@xuegod63 ~]# inotifywait -mrq -e create,move,delete,modify /var/www/html/

/var/www/html/   CREATE   a.html

 

[root@xuegod63 ~]# 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

[root@xuegod63 ~]# chmod +x a.sh

 [root@xuegod63 ~]# ./a.sh

测试:

创建文件测试

数据已经实时同步。

原文地址:https://www.cnblogs.com/lovehx/p/8622258.html