~一、实验需求,一台或者多台rsync客户端(ip 192.168.1.203),一台rsync服务器(ip 192.168.1.204),也可以叫备份服务器。
二、步骤
2.1
首先配置rsync服务器端,修改/etc/rsyncd.conf (如果没有自己新建一个),如果需要密码验证的话,在新建一个rsync.passwd 的文件。然后新建一个rsync用户,设置其无法登录。命令如下
useradd rsync -s /sbin/nologin
修改rsyncd.conf, rsyncd.conf的配置如下。
uid = rsync #开启rsync服务要使用rsync的用户 gid = rsync #rsync用户的所属组 maxconnections = 10 #最大连接数 use chroot = no log file = /var/log/rsyncd.log #日志存放目录 pid file = /var/run/rsyncd.pid #pid文件存放目录 lock file = /var/run/rsyncd.lock #锁文件存放目录 [mydata] #模块的名字,可以自定义,也可以定义多个模块 path = /data/ #从rsync客户端推送上来的数据存放目录,要修改成rsync能够写入,chmod rsync:rsync /data comment = my backup data. #注释内容 ignore errors = yes #是否忽略错误,有的也可以写成 ignore errors secrets file = /etc/rsync.passwd #设置密码文件所在路径 read only = no #是否只读 auth users = rsync_user #rsync传输使用的用户名。 hosts allow = 192.168.1.0/24 #只允许192.168.1.0 网段 hosts deny = * #拒绝其他的所有网段
修改rsync.passwd文件,内容如下,修改完成后,把rsync.passwd的权限设置成为600,否则会报@ERROR: auth failed on module mydata的错误。
echo "rsync_user:admin" > /etc/rsync.passwd
启动rsync 输入命令
rsync --daemon
2.2
在rsync客户端配置密码文件,在/etc/新建一个rsync.passwd的密码文件,使用命令,
echo "admin" > /etc/rsync.passwd
本地推送目录为/mydata ,使用命令测试一下,是否成功。
touch /mydata/aa rsync -avzP /mydata/ [email protected]::mydata/ --password-file=/etc/rsync.passwd
2.3
在rsync客户端,下载安装inotify-tools源码包。(源码包自己在网上找,这里不发链接了。)
解压源码包并安装
tar fvxz inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ./configure --prefix=/usr/local/inotify make make install
设置用户的环境变量文件.bash_profile,添加inotify的路径,然后用source ~/.bash_profile重新加载环境变量。
PATH=$PATH:$HOME/bin:/usr/local/inotify/bin export PATH unset USERNAME
编写实时监控脚本inotify.sh ,
#!/bin/bash srcdir=/mydata/ #本地推送目录 dsthost=192.168.1.204 #要推送到服务器的IP dstmodule=mydata #要推送到服务器rsync的模块名称 user=rsync_user #使用的用户 passwdfile=/etc/rsync.secrets #用户密码的验证文件 inotify_home=/usr/local/inotify #定义inotify的路径 $inotify_home/bin/inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $srcdir \ | while read files do cd $srcdir rsync -avrz -R --delete ./ --timeout=100 $user@$dsthost::${dstmodule} --password-file=${passwdfile} > /dev/null 2>&1 done exit 0
保存inotify.sh文件,然后运行命令,sh inotify.sh & 使其在后台运行。
至此,实验完成。无论在rsync客户端的/mydata目录中删除,修改,添加,都会和rsync服务器端同步。
=========================================
如果在执行 inotify.sh的时候出现如下错误:
[root@localhost ~]# Failed to watch /var/www/html/; upper limit on inotify watches reached!
Please increase the amount of inotify watches allowed per user via `/proc/sys/fs/inotify/max_user_watches'.
^C
[1]+ Done ./inotify.sh
那是因为/proc/sys/fs/inotify/max_user_watches 内核中的值太小,而你监控的文件比较多,超出内核中的值。解决办法echo 一个更大的值到此参数中。
如果想让rsync上来的文件保护原有的属主和属组,使用-o 和-g 参数,但rsync服务器端配置文件中的uid和gid必须是root。