一、rsync简介

rsync是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync是用 “rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。


实验用到的服务器:

备份端:192.168.2.93(rsync server)

备份源:192.168.2.96(rsync clinet + inotify)


二、架设rsync服务端 192.168.2.93

rysnc的官方网站:http://rsync.samba.org/可以从上面得到最新的版本。当然,因为rsync是一款如此有用的软件,所以很多Linux的发行版本都将它收录在内了。

[root@oracle ~]# rpm -qa | grep rsync
rsync-3.0.6-9.el6_4.1.x86_64

rsync的主要有以下三个配置文件rsyncd.conf(主配置文件)、rsyncd.pwd(密码文件)、rsyncd.motd(rysnc服务器信息)

rsyncd.motd这个配置文件就是登录的提示信息,和/etc/motd这个文件的作用相似,这里就不创建它了

[root@oracle ~]# ll /etc/rsync*
-rw-r--r-- 1 root root 0 Feb 18 19:47 /etc/rsyncd.conf
-rw-r--r-- 1 root root 0 Feb 18 19:47 /etc/rsyncd.pwd
[root@oracle ~]# chmod 600 /etc/rsyncd.pwd

注:将rsyncd.pwd这个密码文件的文件属性设为root拥有, 且权限要设为600, 否则无法备份成功


1. 配置主配置文件

[root@oracle ~]# vim /etc/rsyncd.conf
uid = root
gid = root
port = 873
address = 192.168.2.93
use chroot = no
max connections = 10
pid file = /var/run/rsyncd.pid
log file = /var/log/rsync.log
lock file = /var/run/rsync.lock
[base]
path = /test/
ignore errors
read only = false
write only = false
list = false
hosts allow = 192.168.2.0/24
hosts deny = *
auth users = rsync
secrets file = /etc/rsyncd.pwd

uid:指定该模块以指定的用户传输文件

uid:指定该模块以指定的组传输文件

port:rsync服务的监听端口,默认为873。

address:rsync服务监听的地址。

usechroot(全局/模块):若为true,则rsync在传输文件之前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要root权限,并且不能备份指向path外部的符号连接所指向的目录文件。

max connections:允许的最大连接数。

pid file:存放rsync daemon服务的进程ID的文件名。

log file:指定日志文件的名称。

lock file:指定锁定文件的位置。默认为/var/run/rsyncd.lock。

path:指定模块所映射的目录路径。

read only:仅允许客户端下载。true表示仅允许,false不做限定。

write only:仅允许客户端上传。同上。

list:是否允许客户端列出该模块。yes允许,no不允许。

hosts allow:用一个主机列表指定哪些主机客户允许连接该模块,不匹配主机列表的主机将被拒绝。

hosts deny:用一个主机列表指定哪些主机不能连接rsync模块。

auth users:连接该模块的用户名。这个用户必须是系统真实存在的用户。

secrets file:指定密码文件的位置。


2. 添加anth users

[root@oracle ~]# useradd -r -s /sbin/nologin rsync


3. 配置密码文件

[root@oracle ~]# echo "rsync:12345" > /etc/rsyncd.pwd



4. 启动进程

rsync可以通过xinetd这个superdaemon进行管理,也可以以stand alone的方式允许

A.以stand alone方式

rsync --daemon  --config=/etc/rsyncd/rsyncd.conf

B.通过xinetd管理

[root@oracle ~]# vim /etc/services
rsync           873/tcp                         # rsync
rsync           873/udp                         # rsync
#默认就有这两行,可以不做这一步
[root@oracle ~]# vim /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable = no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
[root@oracle ~]# service xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]


5. 防火墙上放行873端口,或者直接关闭也行


三、配置rsync客户端 192.168.2.96

1. 客户端只需配置密码文件就可以了

[root@node2 ~]# echo "12345" > /etc/rsync.pwd
[root@node2 ~]# chmod 600 !$


2. 测试数据上传和下载

[root@node2 ~]# rsync -avzP --delete --password-file=/etc/rsync.pwd /etc rsync@192.168.2.93::base
#/etc后有/和没有/区别很大,有/就是上传etc目录下的文件(不包括etc目录),而没有/就是上传整个etc目录
[root@node2 test]# rsync -avzP --delete --password-file=/etc/rsync.pwd rsync@192.168.2.93::base /test/


3. 安装inotify软件包

Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件

[root@node2 ~]# tar -xf inotify-tools-3.14.tar.gz
[root@node2 ~]# cd inotify-tools-3.14
[root@node2 inotify-tools-3.14]# ./configure
[root@node2 inotify-tools-3.14]# make && make install


4. 编写监控脚本

[root@node2 test]# vim /root/monitor.sh
#!/bin/bash
src=/test/
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib  $src
  |  while read files
do
/usr/bin/rsync -az --delete --password-file=/etc/rsync.pwd $src rsync@192.168.2.93::base && echo "${files} was rsynced" >
> /tmp/rsync.log
done


5. 后台运行脚本

[root@node2 ~]# nohup /root/monitor.sh &

退出shell,这个命令也不会结束。这样实时同步就算完成了。