一、Rsync简介
二、Rsync优点与不足
三、Inotify 简介
四、Rsync+Inotify组合实验案例
一、Rsync简介
Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
二、Rsync优点与不足
优点:
快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。
安全:rsync 允许通过 ssh 协议来加密传输数据。
更少的带宽:rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
特权:安装和执行 rsync 无需特别的权限
缺点:
由于 rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输,所以不适宜传输大数据
Rsync不能实时的去监测文件系统中添加、删除、修改等操作,无法及时的同步数据。
三、Inotify 简介
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
四、Rsync+Inotify组合实验案例
Web IP: 172.16.10.1
Mysql IP: 172.16.10.2
Backup IP: 172.16.10.3
Backup服务器配置
1、安装部署Rsync服务器
1 2 3 4 | [root@localhost ~]# yum install rsync -y [root@localhost ~]# rpm -qa | grep rsync rsync- 3.0 . 6 - 9 .el6.x86_64 [root@localhost ~]# |
2、创建rsync的主配置文件
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 | [root@localhost ~]# vim /etc/rsyncd.conf uid = nobody gid = nobody user chroot = no max connections = 200 timeout = 600 pid file = / var /run/rsyncd.pid lock file = / var /run/rsyncd.lock log file = / var /log/rsyncd.log [web] path=/backup/web ignore errors read only = no list = no hosts allow = 172.16 . 10.0 / 255.255 . 0.0 auth users = test secrets file = /etc/rsyncd.password [mysql] path=/backup/mysql ignore errors read only = no list = no hosts allow = 172.16 . 10.0 / 255.255 . 0.0 auth users = test secrets file = /etc/rsyncd.password |
注释:
第1-2行:指定备份的用户和组,nobody为任何用户
第3行: 此处传输文件时无需chroot到path参数所指定的目录下
第4行: 最大连接数
第5行: 覆盖客户指定的IP超时时间,也就是说rsync服务器不会永远等待一个崩溃的客户端。
第6-8行:指定pid,lock,log的文件
第9行: 指定认证模块名称,注意此模块是对外公布的模块
第10行: 指定备份的路径
第11行: 可以忽略一些无关的IO错误
第12行: 允许可读可写
第13行: 不允许列清单
第14行: 只允许172.16.10.0网段进行同步,拒绝其它IP
第15行: 认证的用户名
第16行: 指定密码文件的存放路径
3、创建备份目录并设置目录的权限并启动rsync服务
1 2 3 4 5 6 7 8 9 10 | [root@localhost ~]# cd / [root@localhost /]# mkdir -pv /backup/web [root@localhost /]# mkdir -pv /backup/mysql [root@localhost /]# chmod -R 777 /backup/ [root@localhost /]# echo "test:test" > /etc/rsyncd.password [root@localhost /]# chmod 600 /etc/rsyncd.password [root@localhost ~]#rsync --daemon --config=/etc/rsyncd.conf #启动服务 [root@localhost ~]# netstat -anpt | grep rsync #rsync监听 873 端口 tcp 0 0 0.0 . 0.0 : 873 0.0 . 0.0 :* LISTEN 1306 /rsync [root@localhost ~]# |
Web服务器与Mysql服务器配置
1、创建认证文件并设置权限 (web与mysql)
1 2 | [root@localhost ~]# echo "test" > /etc/rsyncd.password [root@localhost ~]# chmod 600 /etc/rsyncd.password |
2、服务器进行服务测试(web服务配置成功)
1 2 3 4 5 6 | [root@localhost ~]# rsync -avp /etc/fstab test@ 172.16 . 10.3 ::web --password-file=/etc/rsyncd.password sending incremental file list fstab sent 848 bytes received 27 bytes 1750.00 bytes/sec total size is 779 speedup is 0.89 [root@localhost ~]# |
此时rsync已经配置成功但是不能监控文件的变化此时就需要安装inotify
由于inotify特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否达到了2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify的支持
3、判断内核是否支持inotify:(web与mysql)
1 2 | [root@localhost ~]# uname -r 2.6 . 32 - 358 .el6.x86_64 |
4、检查系统是否支持inotify(Web与Mysql)
1 2 3 4 5 6 | [root@localhost ~]# ll /proc/sys/fs/inotify/ total 0 -rw-r--r-- 1 root root 0 Sep 1 10 : 02 max_queued_events -rw-r--r-- 1 root root 0 Sep 1 10 : 02 max_user_instances -rw-r--r-- 1 root root 0 Sep 1 10 : 02 max_user_watches [root@localhost ~]# |
如果有以上3个文件说明系统默认是支持inotfiy功能的。
5、安装inotfiy-tools工具(Web与Mysql)
1 2 3 4 5 | [root@localhost ~]# wget http: //cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz [root@localhost ~]#tar xf inotify-tools- 3.14 .tar.gz [root@localhost ~]# cd inotify-tools- 3.14 [root@localhost inotify-tools- 3.14 ]# ./configure --prefix=/usr/local/inotify [root@localhost inotify-tools- 3.14 ]# make && make install |
6、创建rsync脚本(web服务器)
1 2 3 4 5 6 7 8 9 10 11 12 | [root@localhost ~]# vim /etc/rsync.sh #!/bin/bash host= 172.16 . 10.3 src=/usr/local/httpd/apache/htdocs des=web user=test /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify, delete ,create,attrib $src \ | while read files
do /usr/bin/rsync -vzrtopg -- delete --progress --password-file=/etc/rsyncd.password $src $user@$host::$des echo "${files} was rsynced" >>/tmp/rsync.log 2 >& 1 done |
创建rsync脚本(Mysql服务器)
1 2 3 4 5 6 7 8 9 10 11 12 | [root@localhost ~]# vim /etc/rsync.sh #!/bin/bash host= 172.16 . 10.3 src=/data des=mysql user=test /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify, delete ,create,attrib $src \ | while read files
do /usr/bin/rsync -vzrtopg -- delete --progress --password-file=/etc/rsyncd.password $src $user@$host::$des echo "${files} was rsynced" >>/tmp/rsync.log 2 >& 1 done |
注释:
--timefmt:指定时间的输出格式。
--format:指定变化文件的详细信息。
7、设置脚本权限(Web与Mysql)
1 | [root@localhost inotify-tools- 3.14 ]# chmod 764 /etc/rsync.sh |
8、Web服务器测试
1 2 3 4 5 6 7 | [root@localhost inotify-tools- 3.14 ]# bash -x /etc/rsync.sh + host= 172.16 . 10.3 + src=/usr/local/httpd/apache/htdocs + des=web + user=test + read files + /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify, delete ,create,attrib /usr/local/httpd/apache/htdocs |
此时脚本处于监控状态:
Web服务器创建文件检查是否能及时同步
1 2 | [root@localhost ~]# cd /usr/local/httpd/apache/htdocs/ [root@localhost htdocs]# touch abc |
查看脚本状态:
在Mysql服务器上测试同理,此处省略。。
9、让脚本开机时自动启动(web与mysql)
1 | [root@localhost inotify-tools- 3.14 ]# echo "/etc/rsync.sh " >> /etc/rc.local |
至此整个实验过程告一段落。在此实验中遇到的问题,总结如下:
同步时遇到的问题:
rsync: failed to connect to 172.16.10.2: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]
故障原因:
服务没有启动
解决办法:
1 | rsync --daemon --config=/etc/rsyncd.conf |