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

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

技术选型:rsync+inotify

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

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

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

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

1,vim /etc/rsyncd.conf

 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 &

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现实时同步,可以结合使用rsyncinotify工具。 首先,使用rsync命令进行初始的文件同步。你可以使用如下命令: ``` rsync -avz --delete source_directory/ destination_directory/ ``` 这将同步源目录(source_directory)中的文件到目标目录(destination_directory)。-a`选项表示使用归档模式,保持文件属性和权限不变。`-v`选项表示输出详细的同步信息。`-z`选项表示启用压缩来加快传输速度。`--delete`选项表示删除目标目录中不存在于源目录中的文件。 接下来,你可以使用inotify工具监控源目录的文件变化,并在有变更时自动触发rsync命令进行实时同步。inotify是Linux内核提供的一种机制,可以监视文件系统中的事件,如文件或目录的创建、修改、删除等。 你可以使用inotifywait命令来监控文件系统事件,并在事件发生时执行rsync命令。以下是一个示例: ``` #!/bin/bash SOURCE_DIR="/path/to/source_directory" DESTINATION_DIR="/path/to/destination_directory" inotifywait -m -r -e modify,create,delete,move "$SOURCE_DIR" | while read path action file; do rsync -avz --delete "$SOURCE_DIR/" "$DESTINATION_DIR/" done ``` 上述脚本监视源目录中的修改、创建、删除和移动事件,并在事件发生时执行rsync命令进行同步。你可以将脚本保存为一个.sh文件,并使用`chmod +x script.sh`命令赋予执行权限。 这样,当源目录中的文件发生变化时,inotify会捕捉到事件并触发rsync命令进行实时同步到目标目录。 请注意,以上示例仅为演示目的,并没有考虑到错误处理、日志记录等方面。在实际应用中,你可能需要对脚本进行适当的修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值