Rsync+Inotify-client 实现实时同步

在前面的博文实践记录之-Rsync镜像备份介绍了镜像备份工具Rsync的安装和使用.但在大数据时代,rsync的不足之处也暴露出来.

首先.rsync本身实现不了实时备份.靠系统的crontab实现的话也受限于1分钟.因此这就导致了服务端和客户端数据可能出现不一致,更无法在应用故障时做到数据的完全恢复。其次,rsync在备份时,要扫描所有文件,这样效率就特别低,特别在数据量很大的时候.

不过,结合Inotify可以很好的解决Rsync在这方面的缺陷.基本实现原理是这样:通过使用shell脚本,获取inotifywait输出,然后借助inotifywait的监控文件或目录实时变化去通知rsync做相应的推送或者拉取操作!

Inotify-client的安装和使用查看另一篇博文实践记录之-系统监控工具Inotify-tool

下面实践下Rsync+Inotify-client 实现实时同步.

实验环境:

Master:  Rsync客户端+Inotify服务 IP:192.168.1.33   hostname:RsyncClient-Inotify

Slave: Rsync服务端 IP:192.168.1.34   hostname:RsyncServer

本实验只设置一台Slave ,现实操作可以有多台Slave ,更有保障些;

一、在 SLAVE 机器上部署 rsync 服务端程序

1.安装rsync:  

[[email protected] ~]# yum -y install rsync

2.添加rsync配置文件

[[email protected] ~]# vi /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
ignore errors
read only = false
list = false
hosts allow = 192.168.1.0/24
hosts deny = *
auth users = rsync
secrets file = /etc/rsync.password
[snbo]
path = /test

3、创建 rsync.password 作为用户密码文件

[[email protected] ~]# touch /etc/rsync.password
[[email protected] ~]# chmod 600 /etc/rsync.password 
[[email protected] ~]# vi /etc/rsync.password 
[[email protected] ~]# cat /etc/rsync.password 
rsync:123456

上面的rsync服务的配置文件,表明允许192.168.1.0网段的主机访问,rsync同步模块名为[snbo],将同步过来的文件放入对应path指定的目录/test,如果有多台目标服务器,则每一台都需要进行类似的rsync服务端配置,上面的uid和gid需要换成你服务器的相应的同步用户。

4、创建同步目录

[[email protected] ~]# mkdir /test
[[email protected] ~]# chown root:root /test

5、以守护进程方式启动rsync服务

[[email protected] ~]# rsync --daemon

6、查看rsync服务状态

[[email protected] ~]# lsof -i:873
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   1087 root    3u  IPv4   9007      0t0  TCP *:rsync (LISTEN)
rsync   1087 root    5u  IPv6   9008      0t0  TCP *:rsync (LISTEN)

7、为rsync添加开机自启动

在/etc/rc.local文件里添加一行以下内容:

/usr/bin/rsync --daemon  --config=/etc/rsyncd.conf

补充:

重启rsync的组合命令 :

  pkill rsync  #关闭rsync服务

 rsync --daemon #启动rsync服务

  ps -ef | grep rsync   或 lsof -i:873  #检查是否启动

二、在Master 上配置rsync客户端

      

1、安装Rsync并配置相关权限

在Master上配置rsync客户端相关权限认证(rsync.password):

[[email protected] ~]# yum -y install rsync
[[email protected] ~]# vi /etc/rsync.password
[[email protected] ~]# chmod 600 /etc/rsync.password
[[email protected] ~]# cat /etc/rsync.password 
123456

2、Master上手动测试rsync的同步情况

要确保这一步能成功执行,否则后面的Inotify配置好了也同步不了.

1)创建待同步数据

[[email protected] ~]# mkdir /test
[[email protected] ~]# touch /test/{a,b,c,d}
[[email protected] ~]# ll /test/
total 0
-rw-r--r-- 1 root root 0 Jul 12 06:50 a
-rw-r--r-- 1 root root 0 Jul 12 06:50 b
-rw-r--r-- 1 root root 0 Jul 12 06:50 c
-rw-r--r-- 1 root root 0 Jul 12 06:50 d

2)执行同步命令

[[email protected] ~]# rsync -avzP /test  [email protected]::snbo --password-file=/etc/rsync.password 
sending incremental file list
test/
test/a
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=3/5)
test/b
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=2/5)
test/c
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=1/5)
test/d
           0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=0/5)
sent 213 bytes  received 88 bytes  46.31 bytes/sec
total size is 0  speedup is 0.00

查看RsyncServer的同步目录:

[[email protected] ~]# ll /test/
total 0
-rw-r--r-- 1 root root 0 Jul 12 06:50 a
-rw-r--r-- 1 root root 0 Jul 12 06:50 b
-rw-r--r-- 1 root root 0 Jul 12 06:50 c
-rw-r--r-- 1 root root 0 Jul 12 06:50 d

三、在M1 上配置inotify

1、查看 M1的 内核是否支持inotify

[[email protected] ~]# uname -r
2.6.32-358.el6.x86_64
[[email protected] ~]# ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Jul 12 07:12 max_queued_events
-rw-r--r-- 1 root root 0 Jul 12 07:12 max_user_instances
-rw-r--r-- 1 root root 0 Jul 12 07:12 max_user_watches

2、安装inotify-tool

[[email protected] ~]# yum install make  gcc gcc-c++
[[email protected] ~]#  wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
[[email protected] ~]#  tar xzf inotify-tools-3.13.tar.gz
[[email protected] ~]#  cd inotify-tools-3.13
[[email protected] inotify-tools-3.13]# ./configure
[[email protected] inotify-tools-3.13]# make && make install

3、查看inotify提供的工具

[[email protected] ~]# ll /usr/local/bin/
total 80
-rwxr-xr-x 1 root root 38582 Jul  9 15:25 inotifywait
-rwxr-xr-x 1 root root 40353 Jul  9 15:25 inotifywatch

 Inotify-client的详细使用查看另一篇博文实践记录之-系统监控工具Inotify-tool

四、rsync和inotify-tools做结合

通过脚本,把rsync和inotify做一个结合.实现rsync的实时备份!

现贴出脚本如下:

[[email protected] ~]# cat auto_rsync.sh 
#!/bin/bash
dir=‘/test/‘
des=snbo
host=192.168.1.34
user=rsync
rsyncall=‘/usr/bin/rsync -rpgovz --delete --progress‘
/usr/local/bin/inotifywait -mrq --timefmt ‘%Y%m%d %H:%M:%S‘ --format ‘%T %w %w%f %e‘ -e modify,delete,create,attrib $dir | while read DATE TIME DIR FILE EVENT;
do
$rsyncall $dir [email protected]$host::$des --password-file=/etc/rsync.password && echo $DATE $TIME $FILE was Rsynced:$EVENT >>/var/log/rsync-snbo.log
done

将auto_rsync.sh加入开机启动:

[[email protected] ~]# mv auto_rsync.sh /usr/sbin/
[[email protected] ~]# vi /etc/rc.local 
加入下面一行
sh /usr/sbin/auto_rsync.sh  >>/var/log/rsync.log &

测试:

两台主机提前同步过时间,好作对比.

网络同步时间命令:ntpdate cn.pool.ntp.org && hwclock -w
创建文件:
[[email protected] ~]# touch /test/{1,2,3,4}
[[email protected] ~]# ll --full-time /test/
total 0
-rw-r--r-- 1 root root 0 2014-07-16 11:56:10.023852271 +0800 1
-rw-r--r-- 1 root root 0 2014-07-16 11:56:10.023852271 +0800 2
-rw-r--r-- 1 root root 0 2014-07-16 11:56:10.023852271 +0800 3
-rw-r--r-- 1 root root 0 2014-07-16 11:56:10.023852271 +0800 4
查看RsyncServer目录文件变化
[[email protected] ~]# ll --full-time /test/
total 0
-rw-r--r-- 1 root root 0 2014-07-16 11:56:10.254956293 +0800 1
-rw-r--r-- 1 root root 0 2014-07-16 11:56:10.254956293 +0800 2
-rw-r--r-- 1 root root 0 2014-07-16 11:56:10.254956293 +0800 3
-rw-r--r-- 1 root root 0 2014-07-16 11:56:10.294956574 +0800 4

对比文件的时间,可见同步的效率很高.

测试较大文件同步:

在/test目录下创建一500M大小的文件

[[email protected] ~]# dd if=/dev/zero of=/test/file count=1000000
1000000+0 records in
1000000+0 records out
512000000 bytes (512 MB) copied, 10.5061 s, 48.7 MB/s
[[email protected] ~]# ll --full-time /test/
total 500004
-rw-r--r-- 1 root root         0 2014-07-16 11:56:10.023852271 +0800 1
-rw-r--r-- 1 root root         0 2014-07-16 11:56:10.023852271 +0800 2
-rw-r--r-- 1 root root         0 2014-07-16 11:56:10.023852271 +0800 3
-rw-r--r-- 1 root root         0 2014-07-16 11:56:10.023852271 +0800 4
-rw-r--r-- 1 root root 512000000 2014-07-16 12:05:26.566868352 +0800 file
[[email protected] ~]# ll --full-time /test/
total 500004
-rw-r--r-- 1 root root         0 2014-07-16 11:56:10.254956293 +0800 1
-rw-r--r-- 1 root root         0 2014-07-16 11:56:10.254956293 +0800 2
-rw-r--r-- 1 root root         0 2014-07-16 11:56:10.254956293 +0800 3
-rw-r--r-- 1 root root         0 2014-07-16 11:56:10.294956574 +0800 4
-rw-r--r-- 1 root root 512000000 2014-07-16 12:06:05.143956010 +0800 file

同步时间为30几秒.

Rsync+Inotify-client 实现实时同步,布布扣,bubuko.com

时间: 2024-10-08 10:31:05

Rsync+Inotify-client 实现实时同步的相关文章

sersync基于rsync+inotify实现数据实时同步

一.环境描述 需求:服务器A与服务器B为主备服务模式,需要保持文件一致性,现采用sersync基于rsync+inotify实现数据实时同步 主服务器A:192.168.1.23 从服务器B:192.168.1.243 实时同步/var/atlassian目录到从服务器. 二.实施 1.从服务器192.168.1.243 rsync服务搭建 1.1安装软件包 wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz tar xf r

利用rsync+inotify实现数据实时同步脚本文件

将代码放在Server端,实现其它web服务器同步.首先创建rsync.shell,rsync.shell代码如下: #!/bin/bash host1=133.96.7.100 host2=133.96.7.101 host3=133.96.7.102 src=/data/www/ dst1=web1 dst2=web2 dst3=web3 user1=web1 user2=web2 user3=web3 /usr/local/inotify/bin/inotifywait -mrq --ti

[转帖]sersync基于rsync+inotify实现数据实时同步

sersync基于rsync+inotify实现数据实时同步 https://www.jianshu.com/p/d532a34e5cc5 前言 提到数据同步就必然会谈到rsync,一般简单的服务器数据传输会使用ftp/sftp等方式,但是这样的方式效率不高,不支持差异化增量同步也不支持实时传输. 原文地址:https://www.cnblogs.com/nbxcnxvcnb/p/12393252.html

Rsync+inotify实现文件实时同步

数据备份.文件备份是运维.DBA等岗位最熟悉不过的话题,这里不介绍数据库的备份,简单介绍一下文件同步工具,这样的工具有很多,Windows环境下有Goodsync.FreeFileSync等,Linux下rsync.unison等,常用的实时同步,是几种工具的组合,经过组合的工具达到文件实时同步的效果. 一.常用实时同步方案 1.NFS网络文件系统 该方案是分布式架构中,解决不同节点对同一资源访问的问题,搭建NFS服务器,将其挂载在不同的节点,每个节点将公用的数据存储在NFS服务器上,实现文件的

rsync+inotify实现上行实时同步

rsync:一款开源备份工具:实现不同主机间镜像同步整个目录树:支持增量备份.权限.压缩等 rsync角色 发起端:负责发起rsync同步,操作客户机(相当于C端) 备份源:负责响应rsync的请求的服务器(相当于S端) 同步的方向 上行同步(上传):备份源提供文档的目标位置(date在发起端),发起端使用用户必须对目录有写入权限 下行同步(下载):备份源负责提供文档原始位置(date在备份源),发起端使用用户只需对data有读取权限即可 搭建rsync备份源 vim /etc/rsyncd.d

rsync + inotify 实现数据实时同步

要求:两台Web服务器实现数据同步(我这里使用的是Centos 6.2-x64) 服务器一:172.16.11.126 服务器二:172.16.11.127 一.配置ssh备份源172.16.11.126(这里推荐使用专用的普通用户,注意相应的权限问题,如遇特殊情况使用root用户也可以,即不用考虑权限问题了. ) 1.新建备份用户rget rput 分别用来上传下载 [root@localhost ~]#  useradd rget [root@localhost ~]#  useradd r

rsync+inotify实现数据实时同步备份

在实际生产环境当中,我们总会遇见需要把一些重要数据进行备份,且随着应用系统规模的增大,对数据的安全性.可靠性.时效性要求还是比较高的, 因此我自己有在用rsync+inotify来实现数据实时同步备份,下面记录下操作步骤,以防日后自己忘记. 实验背景: 操作系统          IP         机器名        角色 CentOS 7.2       172.16.22.1     nginx01        数据源(服务器端) CentOS 7.2       172.16.22

rsync+inotify安装配置 实时同步文件

安装 #安装inotify 工具 [root@localhost ~]# yum install inotify-tools -y 常用命令 [[email protected] ~]# inotifywait -rm /data/ \\实时监控/data的所有事件(包括文件的访问.写入.修改.删除等) [[email protected] ~]# inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w %f' > -e mo

rsync+inotify实现代码实时同步

rsync rsync是lunix系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步. 优点: 1).可以镜像保存整个目录树和文件系统. 2).可以很容易做到保持原来文件的权限.时间.软硬链接等等. 3).无须特殊权限即可安装. 4).快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件.rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽. 5).安全:可以使用s

rsync+inotify实现文件实时同步-步骤详解

实验拓扑(centos7下):192.168.80.181 服务器端(主机名www.aa.com)192.168.80.182 客户端(主机名www.ab.com)1.使用SSH源:安装rsync,服务端和客户端同时安装,只使用客户端命令就OK了.systemctl stop firewalldsetenforce 0yum install -y rsync---以上三句在服务器端和客户端都要执行---------rsync -avz [email protected]:/tmp/ /opt/