Inotify+Rsync实现数据同步

Inotify+Rsync实现数据同步

1 目的

1.	要利用监控服务(inotify),监控同步数据服务器目录中信息的变化
2.	发现目录中数据产生变化,就利用rsync服务推送到本地

2 组件介绍

2.1 Inotify

Inotify是一种强大的,细粒度的。异步的文件系统事件监控机制,linux内核从2.6.13起,加入了 Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,是一种事件驱动机制,它为应用程序监控文件系统事件提供了实时响应事件的机制,而无须通过诸如cron等的轮询机制来获取事件。cron等机制不仅无法做到实时性,而且消耗大量系统资源。相比之下,inotify基于事件驱动,可以做到对事件处理的实时响应,也没有轮询造成的系统资源消耗,是非常自然的事件通知接口,也与自然世界事件机制相符合
inotify软件的参考资料链接:
  https://github.com/rvoicilas/inotify-tools/wiki

2.2 Rsync

Rsync(remote synchronize)是一个远程数据同步工具
特点:
1、可以镜像保存整个目录树和文件系统;
2、可以很容易做到保持原来文件的权限、时间、软硬链接等;
3、无须特殊权限即可安装;
4、优化的流程,文件传输效率高;
5、可以使用rsh、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6、支持匿名传输

3 部署安装

3.1 安装环境

系统版本IP地址
centos6.7192.168.2.2(服务端)
centos6.7192.168.2.112 (客户端)
centos7.8192.168.2.113(客户端)

3.2 部署Rsync服务端

服务端跟客户端防火墙开都需开放873端口

[root:~]$  /sbin/iptables -I INPUT -p tcp --dport 873 -j ACCEPT
[root:~]$  /etc/rc.d/init.d/iptables save
[root:~]$  service iptables restart
1)检测软件是否存在
[root:~]$ rpm -qa|grep rsync
rsync-3.0.6-12.el6.x86_64
2)进行软件配置
[root:~]$ vim /etc/rsyncd.conf 
uid = root
gid = root
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
#log file = /var/log/rsyncd.log
#log format = %t %a %m %f %b
ignore errors
read only = false
list = false
hosts allow = 192.168.2.0/24
auth users = rsync_backup
secrets file = /etc/rsync.password
fake super = yes
[backup]
comment = "backup dir by oldboy"
path = /backup #备份文件夹
[nfs]
comment = "nfsbackup dir by hzs"
path = /DATA2/
3)创建数据备份储存目录,目录修改属主
[root:~]$mkdir /nfsbackup/
4)创建认证用户密码文件并进行授权600
echo "rsync_backup:clsn123" >>/etc/rsync.password
chmod 600 /etc/rsync.password
5)启动rsync服务
[root:/]$ rsync --daemon --config=/etc/rsyncd.conf
[root:/]$ ps -ef|grep rsync

3.3 部署Rsync客户端

1)软件是否存在
[root@backup ~]# rpm -qa |grep rsync
rsync-3.0.6-12.el6.x86_64
2)创建安全认证文件,并进行修改权限600
echo "clsn123" >>/etc/rsync.password
chmod 600 /etc/rsync.password
3) 测试数据传输
[root@nfs01 sersync]# rsync -avz /projects/0_DATA_TRANSFER/  rsync_backup@192.168.2.2::nfs  --password-file=/etc/rsync.password
sending incremental file list
data/
data/.hzs
data/.tar.gz
data/.txt
3.3.1 部署inotify服务

直接手工编译安装,需要到github上进行下载软件包
https://github.com/rvoicilas/inotify-tools/wiki

[root:/]$ tar -zxvf inotify-tools-3.14.tar.gz
[root:/]$ cd inotify-tools-3.14 
[root:/]$ ./configure && make && make install

一共安装了2工具(命令),即inotifywait和inotifywatch

inotifywait : 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生,执行后处于阻塞状态,适合在shell脚本中使用

inotifywatch :收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计
3.3.2 inotify+rsync 功能结合

rsync命令:

rsync -axz /projects/0_DATA_TRANSFER/  rsync_backup@192.168.1.2::nfs  --password-file=/etc/rsync.password

inotify命令:

/usr/local/bin/inotifywait -mrq –format '%w%f' -e create,delete,modify,move /projects/0_DATA_TRANSFER/

编写脚本

#!/bin/bash

Path=/projects/0_DATA_TRANSFER/
backup_Server=192.168.2.2
#检测目录下的文件所是否变动
/usr/local/bin/inotifywait -mrq --format '%w%f' -e create,delete,modify,move --exclude "(.swp|.swpx)"  $Path  | while read line  
time3=$(date "+%Y-%m-%d %H:%M:%S")
ipadress=$(ip a show dev eth0|grep -w inet|awk '{print $2}'|awk -F '/' '{print $1}')
do
    if [ -f $line ];then
       user=$(ls -lh $line | awk '{print $3}')
       #保留拷贝的文件用户和主机IP
       echo "$time3" "$ipadress" "${user}" "$line" "is create" >> /nfs/users/cad/rsync/rsync.log
       #远程拷贝文件到服务端
	   rsync -axz --backup --suffix="."$(date +"%Y%m%d%H%M%S") $Path rsync_backup@$backup_Server::nfs --password-file=/etc/rsync.password
	   拷贝历史文件遗留
       #rsync -axz --backup --suffix="."$(date +"%Y%m%d%H%M%S") $Path rsync_backup@$backup_Server::backup --password-file=/etc/rsync.password 
else
       rsync -axz --delete $Path rsync_backup@$backup_Server::nfs --password-file=/etc/rsync.password
       #rsync -axz --backup --suffix="."$(date +"%Y%m%d%H%M%S") $Path rsync_backup@$backup_Server::backup --password-file=/etc/rsync.password
   fi
done
 

在两台客户端执行后台运行脚本

[root@s8 scripts]# nohup ./rsync-clients.sh &

查看当前脚本运行的进程

[root@s8 scripts]# ps -ef|grep rsync-clients.sh
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值