rsync 官网 http://rsync.samba.org/

    rsync 可以安装在*unix 系统上,windows下也有客户端,作者本意是想用写一个可以替代scp的工具。用法上与scp有些类似,但现多用来同步文件和做备份。

    rsync可以在本机目录、本机到远程主机,远程主机到本机之间复制文件,也可以配合定时任务做文件的增量备份。特点是可以保证文件原有的权限、日期等属性,可以保证远程同步的目录内文件内容完全一致。


一、安装

      主从都要安装,主以rsync --daemon 运行为服务器模式,从用rsync 同步

1.1 下载 

wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz

1.2 编译安装

 tar -xvf rsync-3.0.9.tar.gz && cd rsync-3.0.7 && 
./configure --prefix=/usr/local/rsync &&make &&make install


   安装到 /usr/local/rsync/  主程序目录 /usr/local/rsync/bin/rsync

   实践证明用yum 安装的rsync经常出问题,所以建议源码安装最新版本

二、配置

    默认安装完成后/etc下没有rsyncd.conf.需要手动建立  

2.1 新建主配置文件

      vi /etc/rsyncd.conf

uid = root
gid = root
use chroot = no
max connections = 30
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[test]
read only = yes
path = /opt/test
comment =test dir
auth users = test
secrets file = /etc/rsync.pas
hosts allow = 192.168.1.128

2.2 新建密码文件

     vi  /etc/rsync.pas

username:password
chmod 600 /etc/rsync.pas

2.3 rsyncd文件详解

pid file = /var/run/rsyncd.pid    进程pid写到 /var/run/rsyncd.pid 

port = 873                                指定运行端口,可以自己指定;

address = 192.168.1.171         指定服务器IP地址;

uid = nobody

gid = nobdoy

    注:服务器端传输文件时,要指定用户和用户组,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上同步不下来。所以我为了方便,用了root 。不过您可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。


use chroot = yes

    用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容;这个需要自己来尝试;


read only = yes  

    read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项,自己尝试是做什么用的吧;


hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0

    注:在您可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开;


max connections = 30           客户端最多连接数;


motd file = /etc/rsyncd/rsyncd.motd    

    motd file 是定义服务器信息的,要自己写 rsyncd.motd 文件内容。当用户登录时会看到这个信息。


log file = /var/log/rsync.log       rsync 服务器的日志;

transfer logging = yes              这是传输文件的日志;


[test]  模块,它为我们提供了一个链接的名字,链接到哪呢,在本模块中,链接到了/opt/test 目录;要用[name] 形式;


path = /opt/test       指定文件目录所在位置,这是必须指定的;

auth users = test    认证用户是test ,是必须在 服务器上存在的用户;


list=yes

    注:list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;


ignore errors        忽略IO错误,详细的请查文档;


secrets file = /etc/rsyncd/rsyncd.secrets   密码存在哪个文件;


comment = home data     注释可以自己定义,写什么都行,写点相关的内容就行;


exclude = aaa/ bbb/        exclude 是排除的意思,也就是说,要把/home目录下的aaa和bbb排除在外; 目录之间有空格分开 ;


三、启动服务器端

     /usr/local/rsync/bin/rsync --daemon

    rsync默认服务端口为873,服务器在该端口接收客户的匿名或者认证方式的备份请求。


四、客户端同步

        rsync -avzP test@192.168.1.41::test   /tmp/a/

五、其他技巧

1.server端 服务开机启动:


a、加入inetd.conf

    编辑/etc/services,加入rsync 873/tcp,指定rsync的服务端口是873。编加/etc/inetd.conf,加入rsync stream tcp nowait root /bin/rsync rsync --daemon

     注:对于xinetd,设置方法类似。


b、加入rc.local

    编辑/etc/rc.d/rc.local,在最后添加:

    /usr/local/bin/rsync --daemon

2.客户端不需要输入密码

    新建一个文件存放密码        touch rsync.password

修改权限为600                   chmod 600 rsync.password

写入密码                            echo "PASSWORD"> rsync.password

用--password-file=rsync.password 参数读取密码文件  rsync -avzP  --password-file=rsync.password USERNAME@HOST::MODENAME LOCALDIR

这样就不需要密码了;其实这是比较重要的,因为服务器通过crond 计划任务还是有必要的;

3. rsync 客户端自动与服务器同步数据

         使用定时任务  crontab -e

加入如下代码:

10 0 * * * rsync -avzP --delete --password-file=rsync.password test@testhost::test /opt/tmp

表示每天0点10分执行后面的命令。更多crontab用法请参考

4.rsync 排除文件或文件夹

     rsync -avzP --exclude config.php --exclude a.log  root@192.168.0.3:test /tmp


参考文件:

  文档太久了,当时未做记录,如果引用了您的文档,请联系我加上引用连接