rsync+inotify实现数据实时同步(局域网)

rsync+inotify实现数据实时同步(局域网)

1、简介

1.1 rsync简介及基本命令

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。它可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

  • 可以镜像保存整个目录树和文件系统。
  • 可以很容易做到保持原来文件的权限、时间、软硬链接等等。
  • 无须特殊权限即可安装。
  • 快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件()增量备份。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
  • 安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
  • 支持匿名传输,以方便进行网站镜象。

1、基本语法

rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]host:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

对应于以上六种命令格式,rsync有六种不同的工作模式:

  • 拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup
  • 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src
  • 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data
  • 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@192.168.78.192::www /databack
  • 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www
  • 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://192.168.78.192/www

rsync使用详细参阅

1.2 inotify简介及基本命令

inotify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、权限属性、删除创建、移动等操作,也就是可以监控文件发生的一切变化。

inotify-tools是用c编写的,除了要求内核支持inotify外,不依赖于其他。inotify-tools提供两种工具,一是 inotifywait,它是用来监控文件或目录的变化,二是inotifywatch,它是用来统计文件系统访问的次数。

inotify使用详细参阅

2、安装

2.1 基本需求及目标

操作系统:CentOS 7.X
源服务器:192.168.8.234 (服务器端)
目标服务器:192.168.8.120,192.168.8.121 (客户端)
目的:把源服务器上/home/test目录实时同步到目标服务器的/home/www下。

2.2 rsync客户端安装

1、服务器端安装rsync(120、接收备份文件的服务器)

# 安装rsync服务
[root@localhost sysshell]# yum install rsync
# 网上说xinetd这个是启动rsync的、好像没啥用、可以考虑忽略
[root@localhost sysshell]# yum install xinetd
[root@localhost sysshell]# cd  /etc/xinetd.d/
[root@localhost xinetd.d]# vim rsync
disable = no
[root@localhost xinetd.d]# service xinetd start

2、rsync配置文件编辑

[root@localhost www]# vim /etc/rsyncd.conf
# 通用配置文件
# 日志文件位置,启动rsync后自动产生这个文件,无需提前创建
log file = /var/log/rsyncd.log
# pid文件的存放位置
pidfile = /var/run/rsyncd.pid
# 支持max connections参数的锁文件
lock file = /var/run/rsync.lock
# 用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
secrets file = /etc/rsync.pass
# rsync启动时欢迎信息页面文件位置(文件内容自定义)
motd file = /etc/rsyncd.Motd

# 模块配置
# 自定义模块名称 shengguo
[shengguo]
# rsync服务端数据目录路径
path = /home/www
# 模块名称注释说明
comment = shengguo_rsync
# 设置rsync运行权限为root
uid = root
# 设置rsync运行组权限为root
gid = root
# 默认端口
port=873
# 默认为true,修改为no,增加对目录文件软连接的备份
use chroot = no
# 设置rsync服务端文件为读写权限
read only = no
# 不显示rsync服务端资源列表
list = no
# 最大连接数
max connections = 200
# 设置超时时间
timeout = 600
# 执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
auth users = root,rsync,test
# 允许进行数据同步的服务器端IP地址,可以设置多个,用英文状态下逗号隔开(可以用网段)
hosts allow = 192.168.8.234,192.168.8.107
# 禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开(可以用网段、可用*)
hosts deny = 192.168.21.25

3、创建用户认证文件

# 文件路径见上面的配置文件
[root@localhost www]# vim /etc/rsync.pass
# 格式,用户名:密码,可以设置多个,每行一个用户名:密码
rsync:123456

4、设置文件权限

# 设置文件所有者读取、写入权限
chmod 600 /etc/rsyncd.conf
# 设置文件所有者读取、写入权限(这个好像重要点、没进坑)
chmod 600 /etc/rsync.pass

5、启动rsync

# 我是这种方式启动
rsync --daemon --config=/etc/rsyncd.conf
# xinetd方式启动
/etc/init.d/xinetd start    # 启动
service xinetd stop         # 停止
service xinetd restart      # 重新启动

2.3 rsync服务器端安装

1、安装rsync(234、备份文件所在的服务器)

安装rsync服务,同上面。

2、创建认证密码文件

[root@localhost www]# vim /etc/rsync.pass
# 密码
123456

# 设置文件权限,只设置文件所有者具有读取、写入权限即可
[root@localhost www]# chmod 600 /etc/rsync.pass

2.4 rsync同步文件简单测试

1、同步指定文件(需要手动输入密码)

[root@localhost home]# rsync -avH --port=873 --progress /home/rsync.txt  root@192.168.8.120:/home/www

2、同步指定文件或文件夹

[root@localhost home]# rsync -avH --port=873 --progress --password-file=/home/wwwroot/rsync-pass.txt /home/rsync.txt  root@192.168.8.120/home/www

2.5 服务器端安装inotify

最新文件参阅地址及下载地址从下面去找。

inotify github地址

本版本inotify下载地址

1、下载及安装

[root@localhost local]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[root@localhost local]# tar -zxvf inotify-tools-3.14.tar.gz
[root@localhost local]# cd inotify-tools-3.14/
[root@localhost local]# ./configure --prefix=/usr/local/inotify
[root@localhost local]# make && make install

2、脚本编辑测试

[root@localhost local]# vim inotyfy.sh

#!/bin/bash
host=192.168.1.120
src=/home/www
des=web
user=rsync
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %e %f' -e modify,delete,create,attrib \
${src} | while read files
do
#    /usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd ${src} ${user}@${host}::${des}
#    echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
    echo ${files}
done

脚本作用:尝试inotify的基本用法和验证脚本的某些功能,便于自定义改变脚本内容。

输出如是:

[root@localhost www]# ./test.sh
18-01-16 10:34 /home/www/ CREATE daocoder.txt
18-01-16 10:34 /home/www/ ATTRIB daocoder.txt
18-01-16 10:34 /home/www/ CREATE .daocoder.txt.swp
18-01-16 10:34 /home/www/ CREATE .daocoder.txt.swx
18-01-16 10:34 /home/www/ DELETE .daocoder.txt.swx
18-01-16 10:34 /home/www/ DELETE .daocoder.txt.swp
18-01-16 10:34 /home/www/ CREATE .daocoder.txt.swp
18-01-16 10:34 /home/www/ MODIFY .daocoder.txt.swp
18-01-16 10:34 /home/www/ ATTRIB .daocoder.txt.swp
18-01-16 10:34 /home/www/ MODIFY .daocoder.txt.swp

3、服务器端脚本编写

[root@localhost www]# vim inotyfy.sh

#!/bin/bash

# 待同步目录
srcdir=/home/www/test/
# 目标服务器rsync同步目录模块名称
dstdir=shengguo
# 不需要同步的目录,如果有多个,每一行写一个目录,使用相对于同步模块的路径;
# 例如:不需要同步/home/www/test/目录下的a目录和b目录下面的b1目录,exclude.list文件可以这样写
# a/
# b/b1/
excludedir=/usr/local/inotify/exclude.list
# 目标服务器rsync同步用户名
rsyncuser=rsync
# 密码存放路径
rsyncpassdir=/home/wwwroot/rsync-pass.txt
# 目标服务器ip地址
dstip="192.168.8.120"

/usr/local/inotify/bin/inotifywait -mrq --timefmt '%y-%m-%d %H:%M' --format '%T %w %e %f' -e modify,delete,create,attrib ${srcdir} | while read file
do
    for ip in ${dstip}
        do
#            rsync -avH --port=873 --progress --delete --password-file=${rsyncpassdir} --exclude-from=${excludedir}  ${srcdir} ${rsyncuser}@${ip}::${dstdir}
            rsync -avH --port=873 --progress --password-file=${rsyncpassdir}  ${srcdir} ${rsyncuser}@${ip}::${dstdir}
            echo "${dstip} ${file} was rsynced" >> ./rsync.log 2>&1
        done
done

4、inotify服务加入后台守护进程并开机自启动

# 编辑,在最后添加一行
vi /etc/rc.d/rc.local
# 设置开机自动在后台运行脚本
sh /usr/local/inotify/inotyfy.sh &

3、爬坑概要

1、rsync服务未启动

rsync: failed to connect to 192.168.1.144 (192.168.1.144): Connection refused (111)。

可能是rsync服务没启动,解决办法如下:

a、telnet 192.168.xxx.xxx 873 检测端口。

b、ps -aux | grep rsync 找找进程服务是否存在。

c、netstat -lunpt 查看服务的端口列表。

上面查看后没有rsync服务的话,手动启动rsync服务。

[root@localhost local]# rsync --daemon --config=/etc/rsyncd.conf

2、用户认证错误

Password:
  @ERROR: auth failed on module shengguo
  rsync error: error starting client-server protocol (code 5) at main.c(1516) [sender=3.0.9]

配置文件错误,两方面:一检查服务器端与客户端的密码文件配置,客户端是用户名:密码的形式,服务器端是直接密码;二检查配置文件注释不要与配置同行(我是这个坑)。

4、参考目录

首推荐全局文件:rsync+inotify实现数据实时同步

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342