有一段时间没有更新博客了,本来说要把备份的相关说明文档及早更新,结果由于种种原因没有完成相关内容,现在我来完善rsync+inotify的备份相关内容。
目前我的Linux工作环境多在CentOS下进行,版本小于6.5。7.0的界面炫的一塌糊涂,但是公司没有一台服务器运行7.0,给出的方案内否在7.0稳定运行没有确切答案。首先说rsync的配置,我的目标很简单就是让rsync跑起来,然后保证能用,为啥会强调这些呢,因为别的没有人给发饷去做深入的研究,下面开始上干货。
CentOS 6.5安装rsync命令 yuminstall rsync
当然,你也可以谨慎点儿先检查一下rsync是否安装 rpm -qa|grep rsync,下图就是我的检查结果如图Fig.1,显示已安装。
Fig.1 rsync安装检查
如果你觉得不爽,可以直接下载源码编译,如果到了那一步我只有恭喜你的分了,无能为力去指导。按照以上的装好rsync后我们就可以进行inotify的安装了。inotify是一个比较独特理性的,一般情况下不会包含在源里面,所以我就不能再偷懒啦,我们要先下载inotify的.tar.gz的安装包。下载网址:http://sourceforge.net/projects/inotify-tools/
如果打不开可以试试https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
还是打不开就请吐槽天朝的特色吧,实在不行我们有很多国内站点也提供相关文件。
shell命令行下下载文件wget命令
wget--no-check-certificate https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
windows界面浏览器里面你可以通过页面下载 ,只有几百K,会很快。
http://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz/download?use_mirror=nchc&r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Finotify-tools%2F&use_mirror=nchc
Fig.2 Github下载失败
Fig.3 搜狗浏览器下载成功
Fig.2与Fig.3是我下载的测试结果,这次我只下载成功了3.13版本。上传该压缩包到Linux服务器来解压缩,命令如下
tar zxf inotify-tools-3.13.tar.gz
解压缩完成后可以看到如下图Fig.4一个文件和一个文件夹
Fig.4 inotify解压缩
切换到inotify-tools-3.13文件夹, 当然你已可以指定安装目录
./configure --prefix=/usr/local/inotify/
如果想偷点懒,下面的命令最适合你
./configure
然后
make&& make install
inotify安装完成后总要检查一番的,在系统下执行man inotify 、 man inotifywait、man inotifywatch即可得到相应的帮助信息,如果看到类似如图Fig.5的信息 则表示安装完成,当然有时候man inotify没有结果,其他两个都有结果,这样也是可以保证我们的系统正常工作的。
Fig.5 inotify安装完成度检查
Rsync与Inotify-tools都安装完成,下面就是配置了。
首先配置rsyncserver自动启动
vi/etc/xinetd.d/rsync
将disable=yes改为no
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
正常启动启动rsync服务端(独立启动)
[root@server2 ~]##/usr/bin/rsync –daemon
设置开机自动启动
[root@test etc]#chkconfig rsync on
[root@test etc]#chkconfig rsync –list
rsync on
xinetd超级进程启动rsync服务端(有xinetd超级进程启动)
[root@server2 ~]##/etc/init.d/xinetd reload
加入rc.local
在各种操作系统中,rc文件存放位置不尽相同,可以修改使系统启动时把rsync --daemon加载进去。
[root@server2 ~]## vi /etc/rc.local
/usr/bin/rsync --daemon #加入一行
rsync启动检查
[root@server2 ~]# lsof -i :873
COMMAND PIDUSER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 11890root 5u IPv6 3296183346 0t0 TCP *:rsync (LISTEN)
rsync 19978root 0u IPv4 3466833074 0t0 TCP 192.168.0.13:rsync->192.168.0.11:42728 (ESTABLISHED)
rsync 19979root 0u IPv4 3466833074 0t0 TCP 192.168.0.13:rsync->192.168.0.11:42728 (ESTABLISHED)
rsync文件同步目录配置
下面是信息内容。当然/var/rsync目录是要自己创建的,welcome.msg内容可以由你自己定制的。
[root@server2duanhy]# cd /etc/
[root@server2 etc]#cat rsyncd.conf
##file of/etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections =20
motdfile=/var/rsync/welcome.msg
pid file =/var/rsync/rsyncd.pid
lock file =/var/rsync/rsync.lock
log file =/var/rsync/rsyncd.log
#path =/home/duanhy/web/ #欲备份文件夹
#auth users = test #rsync账号
#hosts allow = 192.168.0.11
#ignore errors #以防止因为暂时的资源不足或其它IO错误导致的严重问题
#secrets file =/etc/rsyncd.pass #内容格式为id:passwd
[test]
path= /home/backup/test
comment= analyse
read only = no
allow = *
配置文件名推荐rsyncd.conf
配置检查
配置完成,检查/etc/services中rsync端口号是否存在,若不存在请找下例子正确写入。
[root@test etc]#vim /etc/services
rsync 873/tcp #rsync
rsync 873/udp #rsync
启动守护进程
/usr/local/bin/rsync--daemon
验证启动是否成功
ps -aux | grep rsync
Warning: badsyntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root 9685 0.0 0.0 101392 632 ? Ss Nov24 0:00 rsync --daemon
root 23738 0.0 0.0 103248 876 pts/3 S+ 13:38 0:00 grep rsync
检查端口号,如果防火墙打开了,请放873一马
netstat -an | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp 0 0 :::873 :::* LISTEN
同步文件
如果你没有设置模块,指定上传的目录向服务器上传命令如下,结果如Fig6所示:
rsync-avz web duanhy@192.168.0.13:/home/duanhy/
Fig.6 同步客户端文件到服务器
从服务器向下同步文件命令,结果如图Fig.7所示
rsync -avzduanhy@192.168.0.13:/home/duanhy/web /home/duanhy/
Fig.6 同步服务器文件到客户端
以上方法必须制定服务器同步的路径,如果我们设置了rsync配置模块,我们就可以同步到模块指定路径,实力指定模块名为test,路径为/home/backup/test,命令如下:
同步上传到服务器 rsync -avz /home/duanhy/crm duanhy@192.168.0.13::test
同步到客户端 rsync -avz duanhy@192.168.0.13::test/crm /home/duanhy/
配置带密码的模块
参考(http://www.iteye.com/topic/604436)
如果我们在最初时的时候没有设置密码的话,使用模块是不需要密码的,如果指定模块一味的目录则需要拥有该目录权限用户的密码。带密码的配置,
1、服务器端:要求rsync文件同步目录配置中rsync.conf文件中指定使用密码以及文件目录。配置rsync密码(在上边的配置文件中已经写好路径)/home/rsync.ps(名字随便写,只要和上边配置文件里的一致即可),格式(一行一个用户)
[root@server2 ~]#vi /home/rsync.ps
scihoo:scihoo
2、配置rsync密码文件权限
[root@server2 ~]# chown root.root rsync.ps
[root@server2 ~]# chmod 400 rsync.ps
3、客户端配置密码文件 (注:为了安全,设定密码档案的属性为:600。rsync.ps的密码一定要和rsyncServer密码设定的密码一样)
[root@aj1 home]# virsync.ps
Sciooo
[root@web home]#chown root.root .rsync.ps # 注意必须给权限
[root@web home]#chmod 600 .rsync.ps # 必须修改权限
同步脚本
下面上干货,shell脚本
#!/bin/bash
web=/home/duanhy/web/
/usr/local/bin/inotifywait-mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib$web | while read file
do
/usr/local/bin/rsync -arzuq $web192.168.0.13::web/
echo " ${file} was rsynced">>/home/duanhy/rsync.log 2>&1
done
实现该脚本有赖于inotifywait的检测结果,所以难怪我们监测的文件数目多于inotifywait上限时会出现问题,这是我们就要修改/proc/sys/fs/inotify/max_user_watches文件,我把检测文件数目提高了1000倍,命令如下
原始数据
[root@localhostduanhy]# more /proc/sys/fs/inotify/max_user_watches
8192
echo"8192000">/proc/sys/fs/inotify/max_user_watches
这样我们的inotify就可以保证我们的脚本正常运行了,以上的操作满足了rsync的基础配置,如需对命令进行更深入了解,请参考manrsync、man inotifywait命令展示的手册。
保存shell脚本,命名为inotify_bak.sh,root下sh inotify_bak.sh运行备份脚本,Crt+Z,然后bg,exit,提交到后台运行。