实现在服务器上当某一个特定的文件夹内有增、删、改等操作时,将该操作的结果实时同步到该服务器的备份目录中,或者同步到远程的备份服务器中。
使用的软件:
rsync
作用:rsync的主要功能就是进行文件的同步。
inotify
作用:inotify的主要功能是文件和目录的操作监控,当用户进行文件的编辑、创建和修改时,inotify会根据配置,运行相应的命令或脚本。
一、服务器安装rsync
wget http://www.samba.org/ftp/rsync/rsync-3.0.9.tar.gz
tar -zxvf rsync-3.0.9.tar.gz –C /usr/src
cd /usr/src/rsync-3.0.9
./configure --prefix=/usr/local/rsync --disable-ipv6
make && make install
二、配置rsync服务
cd /usr/local/rsync/
mkdir etc var
创建rsync的配置文件:
vim /usr/local/rsync/etc/rsyncd.conf
log file = /usr/local/rsync/var/rsyncd.log  #设定rsync日志的路径
pid file = /usr/local/rsync/var/rsyncd.pid  #设定rsync进程的PID文件路径
lock file = /usr/local/rsync/var/rsyncd.lock  #设定rsync进程锁文件路径
#secrets file = /usr/local/rsync/etc/rsyncd.pas  #设定rsync用户和密码文件的路径
motd file = /usr/local/rsync/etc/rsyncd.motd  #设定欢迎信息文件的路径
hosts allow = 192.168.1.0/24  #允许那些主机或网段访问rsync服务器
#hosts deny = #拒绝那些主机或网段访问rsync服务器
list = yes 
uid = root 
gid = root 
use chroot = no 
max connections = 30 
[www]  #定义要进行同步的目录
path = /usr/local/apache/htdocs 
comment = bakup www 
read only = no 
auth users = rsync
注:
rsyncd.secrets
rsyncd secrets的路径定义在rsyncd.conf文件中, rsyncd.secrets是存储rsync服务的用户名和密码的,它是一个明文的文本文件,下面给出一个rsyncd.secrets文件的例子:
terry:12345
rsync:abcde
  因为rsyncd.secrets存储了rsync服务的用户名和密码,所以非常重要,因此文件的属性必须设为600,只有所有者可以读写:
  # chmod 600 /etc/rsyncd.secrets
  rsyncd.motd
  rsyncd.motd的路径也是在rsyncd.conf文件中进行定义,rsyncd.motd记录了rsync服务的欢迎信息,你可以在其中输入任何文本信息,如:
  Welcome to use the rsync services!
在服务端创建同步用户rsync
useradd rsync
注:如果是远程同步,需要在本地服务器和远程服务器上都创建同一个同步账户,而且如果是远程同步,考虑到ssh远程登录需要认证,所以需要生成公钥来实现免密码登录:
在服务器上运行
ssh-keygen -t rsa
拷贝生成的.ssh/id_rsa.pub文件到远程服务器端的并重命名为.ssh/authorized_keys然后设置权限为
在目标段执行
#chmod 600 .ssh/authorized_keys
启动源的rsync服务
rsync --daemon --config=/usr/local/rsync/etc/rsyncd.conf
查看rsync的进程
ps -ef |grep rsync
查看rsync的端口(rsync的端口为873)
Netstat –ant | grep 873
第二步:源服务器端安装inotify
wget http://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz/download
tar -zxvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13
./configure --prefix=/usr/local/inotify
make && make install
cd /usr/local/inotify/bin
#!/bin/sh 
SRC=/home/admin/www 
DST=admin@10.13.114.17:/home/admin 
 
/usr/local/inotify/bin/inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read status 
do 
    su - rsync -c "/usr/bin/rsync  -ahqzt  --delete  $SRC $DST" 
    echo "`date +'%Y-%m-%d %H:%M:%S'`  ${status} has rsynced" >>rsync.log 
done 
如果是同步到远程服务器的话运行脚本就修改为:
#!/bin/sh
srcdir=/usr/local/apache/htdocs
dstdir=/usr/local/apache/
/usr/local/inotify/bin/inotifywait -mrq -e modify,delete,create,attrib ${srcdir} | w
hile read status
do
        /usr/bin/rsync -aqztH --delete ${srcdir} root@192.168.1.192:${dstdir}
        echo "`date +'%Y-%m-%d %H:%M:%S'`  ${status} has rsynced" >>rsync.log 
done
启动monitor.sh
#chmod +x monitor.sh
#./monitor.sh &
可以放到rc.local实现开机启动
cat "/usr/local/inotify/bin/monitor.sh &" >> /etc/rc.local
然后在源端的/usr/local/apache/htdocs/下创建删除文件,都会同步到目标端
完成效果演示:
rsync.log日志中的报错和解决办法:
1、
Address 192.168.1.192 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
原因:在用key认证的时候,也会出现,很是烦人,用监测工具,自动login的时候,出现这种提示,会自动关闭.
解决办法:修改本地中的/etc/ssh/ssh_config,把参数GSSAPIAuthentication no修改就可以了。。
或者修改远程服务器端的/etc/ssh/sshd_config ,把参数GSSAPIAuthentication no改了也可以。