1、环境及相关软件介绍
操作系统:Ubuntu12.04_x64
源服务器(推送):192.168.18.10
目标服务器(备份):192.168.18.20
rsync:
rsync是unix系统下的数据镜像备份工具,是一款快速增量备份工具(远程同步),支持本地复制,或者与其他SSH(安全传输)、rsync主机同步。
rsync有以下常用的参数:
-v,--verbose 显示同步过程的详细信息
-a,--archive 归档模式,表示以递归方传输文件,并保持所有文件属性,等同于-rlptgoD
-r,--recursive 对子目录以递归模式处理
-z,--compress 对备份的文件在传输时进行压缩处理
-l,--links 保留软连接
-H,--hard-links 保留硬链接
--delete 删除那些DST中SRC没有的文件(源服务器删除文件,目标服务器也同时删除)
--progress 显示备份过程,等同于-P
--port=PORT 指定rsync服务端口
--exclude=FILE 排除目录或文件,多个目录或文件写多个--exclude
inotify:
inotify是一个Linux特性,它监控文件系统操作,比如读取、写入和创建,当文件系统有变化时,则会触发inotify。inotify提供inotify-tools工具,这个工具包含两个功能,一个是inotifywait,用来监控文件系统变化的事件,另一个是inotifywatch,用来统计文件系统访问的次数。我们这次使用inotifywait结合rsync实现实时同步功能。
inotifywait有以下常用参数:
-m,--monitor 一直保持监听事件
-r,--recursive 递归监控目录
-q,--quiet 打印触发的事件
--timefmt 指定时间格式,用于-format选型中的%T格式
--format 指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%T 使用由—timefmt定义的时间格式
inotifywait常用监听事件:
access 文件或目录读取
modify 文件或目录更改
attrib 文件或目录属性更改
move 文件或目录移动
create 文件或目录创建
delete 文件或目录删除
2、目标服务器安装与配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# sudo apt-get install rsync #ubuntu系统默认已安装
# sudo cp/usr/share/doc/rsync/examples/rsyncd.conf /etc/
# sudo vi /etc/rsyncd.conf
# 以下是全局配置
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/lock/rsyncd
#以下是模块选项配置
[home] #模块名,在源服务器指定这个名字
comment = sync rsync/home #描述信息
path = /home/rsync #备份目录
use chroot=no #不使用chroot,不用root权限
read only = no #设置本地备份目录为读写权限
uid=root
gid=root
max connections=10 #客户端最大连接数
auth users = rsync #指定数据同步用户
secrets file = /etc/rsyncd.pass #指定数据同步用户信息文件
hosts allow=192.168.18.0/24 #允许连接的客户端
ignore errors = yes #忽略出现I/O错误
timeout = 600
#创建认证文件
1
2
3
4
5
6
7
8
9
# sudo vi /etc/rsyncd.pass
rsync:123456 #格式是用户名:密码
# sudo chmod 600 /etc/rsyncd.pass #属主要有权限读这个文件,否则会报没权限
# sudo /etc/init.d/rsync start #如果启动报如下错误,则根据提示打开/etc/default/rsync文件,将RSYNC_ENABLE=false该为RSYNC_ENABLE=true,再重启即可。
* rsync daemon not enabled in/etc/default/rsync, not starting...
#,查看是否启动,有rsync监听端口说明正常:
# sudo netstat -antp |grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 29605/rsync
3、源服务器安装与配置
1
2
3
4
5
# sudo apt-get install rsync inodify-tools
#rsync不用配置,因为我们只使用rsync命令,紧接着创建认证文件
# sudo vi /etc/rsyncd.pass
123456 #只写密码
# sudo chmod 600/etc/rsyncd.pass
#此时基本配置完成,测试下是否能推送吧!
1
2
3
4
5
6
# rsync -avzP --password-file=/etc/rsyncd.pass --delete /home/rsync rsync@192.168.18.20 ::home #home即是目标服务器上rsync里面的模块名
sending incremental file list
rsync/a
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=5/7)
sent 354 bytes received 126 bytes 960.00 bytes/sec
total size is 0 speedup is 0.00
#出现以上信息说明同步正常,接下来,就该编写Shell脚本,使用inotifywait做实时监控源目录,加 个while循环判断源目录是否有触发,如果有变化则执行rsync同步,并记录日志:
1
2
3
4
5
6
7
8
9
# vi inotify_rsync.sh
#!/bin/bash
SRC='/home/rsync'
DST='rsync@192.168.18.20::home'
/usr/bin/inotifywait -mrq --timefmt'%y-%m-%d %H:%M' --format '%T %w %f %e' -e create,delete,move,modify $SRC|while read files
do
rsync -avzP --password-file=/etc/rsyncd.pass --delete $SRC $DST
echo "$files was rsynced.">> /tmp/rsync.log
done
4、测试实时同步
#先打印形式查看脚本执行情况
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# bash -x inotify_rsync.sh
+ SRC=/home/rsync/ #目录结尾一定要加个/,否则会再目标服务器再创建个目录
+DST=rsync@192.168.18.213::home
+ read files
+ /usr/bin/inotifywait -mrq--timefmt '%y-%m-%d %H:%M' --format '%T %w%f %e' -ecreate,delete,move,modify,attrib /home/loongtao
+ rsync -avzP --password-file=/etc/rsyncd.pass --delete /home/rsync rsync@@192.168.18.213::home
sending incremental file list
rsync/
rsync/test.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=2/11)
sent 349 bytes received 32 bytes 762.00 bytes/sec
total size is 9380 speedup is 24.62
+ echo '15-04-24 13:33/home/rsync/test.txt CREATE was rsynced.'
+ read files
+ rsync -avzP--password-file=/etc/rsyncd.pass --delete /home/rsync rsync@192.168.18.213 ::home
sending incremental file list
sent 310 bytes received 10 bytes 640.00 bytes/sec
total size is 9380 speedup is 29.31
+ echo '15-04-24 13:33/home/rsync/test.txt ATTRIB was rsynced.'
+ read files
#可以看到以上信息,无任何报错,说明已经推送成功。
然后,把脚本放到后台运行:
# chmod +x inotify_rsync.sh
# ./inotify_rsync.sh &
#此时当源服务器/home/rsync目录文件有更新,则会同步到目标服务器/home/rsync目录
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com