一、环境

    系统:CentOS6.4x64最小化安装

    rsync-1:192.168.3.50

    rsync-2:192.168.3.52


二、安装rsync

    卸载原有的rsync软件包

[root@rsync-1 ~]# rpm -e `rpm -qa |grep rsync`

    下载最新的rsync安装包,并安装

[root@rsync-1 ~]# wget http://pkgs.repoforge.org/rsync/rsync-3.1.1-1.el6.rfx.x86_64.rpm
[root@rsync-1 ~]# rpm -ivh rsync-3.1.1-1.el6.rfx.x86_64.rpm 
warning: rsync-3.1.1-1.el6.rfx.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing...                ########################################### [100%]
   1:rsync                  ########################################### [100%]

    场景:从rsync-1直接推送文件到rsync-2的/root目录下

#查看rsync-2的/root目录下的文件
[root@rsync-2 ~]# ll /root/
total 56
-rw-------. 1 root root  2790 May  4 13:49 anaconda-ks.cfg
-rw-r--r--. 1 root root  3305 May  4 13:49 cobbler.ks
-rw-r--r--. 1 root root 20504 May  4 13:49 install.log
-rw-r--r--. 1 root root  5882 May  4 13:48 install.log.syslog
-rw-r--r--. 1 root root  2241 May  4 13:49 ks-post.log
-rw-r--r--. 1 root root     1 May  4 13:49 ks-post-nochroot.log
-rw-r--r--. 1 root root   978 May  4 13:45 ks-pre.log

#在rsync-1上直接推送文件到rsync-2上
[root@rsync-1 ~]# rsync -avz rsync-3.1.1-1.el6.rfx.x86_64.rpm 192.168.3.52:/root
root@192.168.3.52's password: 
sending incremental file list
rsync-3.1.1-1.el6.rfx.x86_64.rpm

sent 409,478 bytes  received 35 bytes  117,003.71 bytes/sec
total size is 413,760  speedup is 1.01

#在rsync-2上查看结果
[root@rsync-2 ~]# ll /root/
total 464
-rw-------. 1 root root   2790 May  4 13:49 anaconda-ks.cfg
-rw-r--r--. 1 root root   3305 May  4 13:49 cobbler.ks
-rw-r--r--. 1 root root  20504 May  4 13:49 install.log
-rw-r--r--. 1 root root   5882 May  4 13:48 install.log.syslog
-rw-r--r--. 1 root root   2241 May  4 13:49 ks-post.log
-rw-r--r--. 1 root root      1 May  4 13:49 ks-post-nochroot.log
-rw-r--r--. 1 root root    978 May  4 13:45 ks-pre.log
-rw-r--r--  1 root root 413760 Jun 23  2014 rsync-3.1.1-1.el6.rfx.x86_64.rpm


三、配置rsync服务

    配置rsync已xinetd方式运行

[root@rsync-1 ~]# yum install xinetd -y

#修改/etc/xinetd.d/rsync 
[root@rsync-1 ~]# vim /etc/xinetd.d/rsync 
service rsync
{
    disable         = no          ##将yes改成no  
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/bin/rsync
    server_args     = --daemon
    log_on_failure  += USERID
}
#启动xinetd服务
[root@rsync-1 ~]# service xinetd start
Starting xinetd:                                           [  OK  ]

#rsync默认的监听端口是873,查看873号端口是否启动
[root@rsync-1 ~]# netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1244/sshd           
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1321/master         
tcp        0     52 192.168.3.50:22             192.168.3.2:17985           ESTABLISHED 1812/sshd           
tcp        0      0 :::22                       :::*                        LISTEN      1244/sshd           
tcp        0      0 ::1:25                      :::*                        LISTEN      1321/master         
tcp        0      0 :::873                      :::*                        LISTEN      1957/xinetd

    添加防火墙规则,放行873端口

[root@rsync-1 ~]# iptables -I INPUT -p tcp --dport 873 -j ACCEPT
[root@rsync-1 ~]# iptables -I INPUT -p udp --dport 873 -j ACCEPT
[root@rsync-1 ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
[root@rsync-1 ~]# iptables -L -n |grep 873
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:873 
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:873

    创建rsync服务目录和配置文件

#创建rsync服务目录
[root@rsync-1 ~]# mkdir /etc/rsyncd   
# 创建配置文件
[root@rsync-1 ~]# touch /etc/rsyncd/rsyncd.conf
# 创建密码文件
[root@rsync-1 ~]# touch /etc/rsyncd/rsyncd.secrets
#权限修改
[root@rsync-1 ~]# chown root:root /etc/rsyncd/rsyncd.secrets
[root@rsync-1 ~]# chmod 600 /etc/rsyncd/rsyncd.secrets        #这里的权限设置必须是600

    创建用户和密码

[root@rsync-1 ~]# echo "rsync:test" >>/etc/rsyncd/rsyncd.secrets

    创建rsync配置文件

[root@rsync-1 ~]# vim /etc/rsyncd/rsyncd.conf
# GLOBAL OPTIONS
uid = root
gid = root

use chroot = yes        #同步软连接需要使用参数yes

read only = yes

#limit access to private LANs
hosts allow=192.168.3.0/255.255.0.0
hosts deny=*
max connections = 5

pid file = /var/run/rsyncd.pid

secrets file = /etc/rsyncd/rsyncd.secrets
#lock file = /var/run/rsync.lock           

motd file = /etc/rsyncd/rsyncd.motd        

#This will give you a separate log file
log file = /var/log/rsync.log               

#This will log every file transferred - up to 85,000+ per user, per sync
transfer logging = yes

log format = %t %a %m %f %b
syslog facility = local3
timeout = 300

# MODULE OPTIONS
[test]
path = /data/test
list=yes
ignore errors
auth users = rsync
comment = welcome to rsync server

    编辑xinetd的rsync配置文件,添加配置文件路径

#添加rsync的配置文件路径
[root@rsync-1 ~]# vim /etc/xinetd.d/rsync
service rsync
{
    disable = no
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/bin/rsync
    server_args     = --daemon --config=/etc/rsyncd/rsyncd.conf    #添加配置文件路径
    log_on_failure  += USERID
}
[root@rsync-1 ~]# service xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]
[root@rsync-1 ~]# netstat -anpt |grep 873
tcp        0      0 :::873                      :::*                        LISTEN      2045/xinetd

    在客户端rsync-2上查看rsync-1提供了哪些数据服务

[root@rsync-2 ~]# rsync --list-only root@192.168.3.50::
test           	welcome to rsync server
#现已有一个名为test的数据服务
#将test同步到本地的/root目录下下的test目录下,如果test目录不存在,就会自动创建test目录
[root@rsync-2 ~]# rsync -avzP rsync@192.168.3.50::test /root/test

Password: 
receiving incremental file list
created directory /root/test
./
1.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=3/5)
2.txt
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=2/5)
docker/
docker/docker.txt
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=0/5)

sent 100 bytes  received 281 bytes  108.86 bytes/sec
total size is 0  speedup is 0.00
[root@rsync-2 ~]# ll -h
total 4.0K
drwxr-xr-x 3 root root 4.0K May  4 15:22 test

#以上同步过程需要输入密码

#创建密码文件,并修改权限
[root@rsync-2 ~]# echo "test" >>rsync.password
[root@rsync-2 ~]# chmod 600 rsync.password         #这里的权限设置必须是600


#同步数据
[root@rsync-2 ~]# ll /root/
total 4
-rw------- 1 root root 5 May  4 15:30 rsync.password
[root@rsync-2 ~]# rsync -avzP --password-file=/root/rsync.password rsync@192.168.3.50::test /root/test

receiving incremental file list
created directory /root/test
./
1.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=3/5)
2.txt
              0 100%    0.00kB/s    0:00:00 (xfr#2, to-chk=2/5)
docker/
docker/docker.txt
              0 100%    0.00kB/s    0:00:00 (xfr#3, to-chk=0/5)

sent 96 bytes  received 273 bytes  738.00 bytes/sec
total size is 0  speedup is 0.00
#整个过程没有输入密码

    假如在同步的时候我们需要忽略某些目录或者文件,该怎么做呢

#创建忽略文件,名称随便取,内容根据自己的需要填写,这里我们忽略/1.txt和/docker/docker.txt文件
[root@rsync-2 ~]# cat file.txt 
/1.txt
docker/docker.txt
[root@rsync-2 ~]# rsync -avzP --password-file=/root/rsync.password --exclude-from=/root/file.txt rsync@192.168.3.50::test /root/test

receiving incremental file list
created directory /root/test
./
2.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=1/3)
docker/

sent 93 bytes  received 154 bytes  494.00 bytes/sec
total size is 0  speedup is 0.00

#查看结果,忽略文件并没有同步过来
[root@rsync-2 ~]# tree test/
test/
├── 2.txt
└── docker

1 directory, 1 file