rsync+inotify实现服务器数据实时备份

需求:备份远程服务器指定目录下的数据到另一台服务器指定目录下,要求实时同步。

技术选型:rsync+inotifyrsync+inotify实现服务器数据实时备份_第1张图片

 rsync是一个服务器之间进行文件同步的工具. 具体详情大家可以自行查资料。这里我们可以理解为可以实现文件内容对比的scp工具。如果文件内容没变化则不会发生同步文件的操作, 否则会同步最新内容使得目标服务器的文件内容一致。但是rsync只能做到的只是文件同步,它自身没有能力发现哪些文件内容发生了变化.你执行rsync命令让它同步哪个文件就同步哪个文件,仅此而已。那么我们要做到2台主机之间某个目录或者文件能够达到实时同步效果,需要借助其他工具进行辅助,最好能帮我们监控某个目录下的文件,一旦目录文件发生内容变动(如内容增加、内容减少、删除、修改等等),我们获取通知之后,再执行rsync命令,达到我们实时同步的目的。 

inotify是Linux下的一个工具,inotifywait是其中的一个组件,就能帮我们监控某个目录,一旦文件内容发送变动,我们会获取到一个事件通知,拿到文件的路径。之后我们通过自定义shell脚本,执行rsync命令,实现实时同步的目的。

主机A:被备份的源主机
主机B:备份的目的主机

B服务器(同步数据的目标服务器)

1,vim /etc/rsyncd.conf

rsync+inotify实现服务器数据实时备份_第2张图片

 2,vim /etc/rsync.pass

rsync:123
3,授权

chmod 600 /etc/rsync*

A服务器(源数据服务器)

   # A服务器
   echo '密码' >> /etc//rsync.pass#权限 600
 

rsync命令补充

rsync [选项]  原始位置   目标位置

常用选项				说明
-r				递归模式,包含目录及子目录中的所有文件
-l				对于符号链接文件仍然复制为符号链接文件
-v				显示同步过程的详细信息
-z				在传输文件时进行压缩goD
-p				保留文件的权限标记
-a				归档模式,递归并保留对象属性,等同于-rlpt
-t				保留文件的时间标记
-g				保留文件的属组标记(仅超级用户使用)
-o				保留文件的属主标记(仅超级用户使用)
-H				保留硬链接文件
-A				保留ACL属性信息
-D				保留设备文件及其他特殊文件
--delete		删除目标位置有而原始位置没有的文件
--checksum		根据对象的校验和来决定是否跳过文件

4,以上同步备份完成,在A服务器测试是否同步成功

rsync -az --delete --password-file=/etc/rsync.pass  /data/ rsync@B服务器ip地址::test

到目前为止,rsync 就配置完成了,如果想实现双向同步,只要将 B 配置成服务端,A 配置成客户端,分别启对应的服务即可。

接下来介绍 inotify 监控文件变动,来实现实时同步。

 1,安装

yum install -y inotify-tools

补充  inotifywait events 事件说明:

access:读取文件或目录内容
modify:修改文件或目录内容
attrib:文件或目录的属性改变
close_write:修改真实文件内容   # 重要参数
close_nowrite:文件或目录关闭,在只读模式打开之后关闭的
close:文件或目录关闭,不管读或是写模式
open:文件或目录被打开
moved_to:文件或目录移动到
moved_from:文件或目录从移动
move:移动文件或目录移动到监视目录  # 重要参数
create:在监视目录下创建文件或目录  # 重要参数
delete:删除监视目录下的文件或目录  # 重要参数
delete_self:文件或目录被删除,目录本身被删除
unmount:卸载文件系统

编写 inotify.sh

vim inotify.sh
DIR=/data/
USERNAME=rsync
IP=B服务器ip地址
MODULE=test

inotifywait -mr --format "%Xe %w %f" -e modify,close_write,create,delete ${DIR} | while read line ;
do
        rsync -avzP ${DIR}  ${USERNAME}@${IP}::${MODULE}  --password-file=/etc/rsync.pass &>/dev/null;
done
~                                                                                                                                                                                   
~                                                                                                                                                                                   
~                                                                                                                                                                                   
~                                                                                                                                                                                   
~                                                                                                                                                                                   
~                                      

后台运行 

nohup bash  inotify.sh &

你可能感兴趣的:(运维,服务器)