利用rsync和inotify机制可以实现触发式的数据备份,也就是实时备份。本地的某个文件一旦发生变化,就会自动同步到远程的备份源服务器上。而不是某个时间段执行备份。

实验前要解决三点问题:

① 谁是备份源,谁是发起端。(发送链接请求的是发起端,回应请求的是备份源)

② 怎么察觉本地的文件发生了变化。(交给inotify机制,Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。)

③ 怎么根据目录或文件的变化实现发送“备份的请求”从而实现远程备份的目的。

这里就要编写脚本来实现这个功能。

另外,还要解决从监控文件到远程备份整个过程中交互式的操作,这里用户的交互式认证就要改为秘钥的验证方式。

先来看一下我的实验环境 两台红帽6 

发起端: 192.168.2.1

备份源: 192.168.2.2

下面是各个主机的操作

发起端:192.168.2.1

1.要监控目录或文件的状态,要利用inotify-tools工具 解压安装

rsync+inotify实时同步参考步骤_服务器

make &&  make install 执行编译安装

2.创建要监测的目录,也就是要执行备份的目录 mkdir /abc 随便创建的 并要有其他用户的读取权限

rsync+inotify实时同步参考步骤_Linux_02

3.创建要链接时的ssh 秘钥 并用备份源(也就是2192.168.2.2)上的用户拷贝过去

-t 是指定秘钥的加密类型,执行过程中直接回车,不要设置任何信息(相当于密保的一个更安全的密码)

生成的秘钥在用户宿主目录下的 .ssh/下

rsync+inotify实时同步参考步骤_监控_03

创建过程

rsync+inotify实时同步参考步骤_接口_04

然后用ssh-copy-id 命令把秘钥复制到备份源上 robin用户是备份源主机上事先有的

rsync+inotify实时同步参考步骤_接口_05

测试用ssh登陆远程主机是否还用交互式方式验证

rsync+inotify实时同步参考步骤_服务器_06

4.编写脚本一会再说 先到备份源上配置

备份源:192.168.2.2

备份源是提供数据备份时提供的位置(路径)

我就创建根目录下的BK目录了 (根据实际情况而定,真是环境肯定是个安全可靠的位置)

并给与robin 写入的权限 (robin用户是实现创建好的)为了目录的安全,建议更改目录的属主和属组,并设置setfacl 限制

rsync+inotify实时同步参考步骤_Linux_07

做好后,再回到发起端上配置脚本。

在配置脚本之前先了解一下inotifywait命令的使用。

”-e”用来指定要监控哪些事件(create,move,delete,modify,attrib 是指监听”创建 移动 删除 写入 属性更改” 事件),选项”-m”表示持续监控,”-r”表示递归整个目录,”-q”表示简化输出信息。

其他选项的含义:

-a 存档模式

-h 保存硬连接

-z 压缩文件数据在传输

-t 维护修改时间

--delete 删除于多余文件

执行后会占用一个终端,表示在检测/abc 目录的变化

rsync+inotify实时同步参考步骤_时间段_08

编写脚本

第一行不解释

第二行 定义检测目录的变量 直接把监测/abc目录的命令赋值给变量INOTIFY_CMD

第三行 定义执行备份的命令赋值给变量RSYNC_CMD

第四行 先执行变量INOTIFY_CMD 并利用grep 把执行变量后的值在赋给变量$AA $BB $CC

第五行 do 循环开始

第六行 利用if判断语句判断是否含有*rsync*的进程 如果有 执行第七行的RSYNC_CMD变量并用八九行弹出提示信息(随意)

第十行if判断结束

十一行 do结束

rsync+inotify实时同步参考步骤_Linux_09

执行脚本后 凡是/abc 目录下发生变化 (创建 移动 删除 写入 属性更改)

就会弹出echo 后面的信息 并向备份源备份 如图:

rsync+inotify实时同步参考步骤_监控_10

192.168.2.2:/BK

rsync+inotify实时同步参考步骤_监控_11

给予脚本x执行权限 ,并写到用户的登陆的脚本中 这样用户一登陆脚本就会执行。

rsync+inotify实时同步参考步骤_接口_12

!注意如果是字符终端下 脚本会占用终端。切换终端即可

   END