Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主
配置文件。Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一
个873端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文
件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下
也有相应的版本,如cwRsync和Sync2NAS等工具。
安装rsync3.0.9版本
http://rsync.samba.org/ftp/rsync/下载地址
1、 下载二进制源码rsync-3.0.9.tar.gz和补丁程序服务器和客户端都用这个程序。
2、 解压解包 # tar zxvf rsync-3.0.9.tar.gz 和补丁
3、 配置 # cd rsync-3.0.9 
4       配置./configure --prefix=/usr/local/rsync
5、 编译安装 # make&&make install
6、 把上述步骤在客户端和服务器端各执行一遍。
7.      配置文件rsyncd.conf
         vi /etc/rsyncd.conf
      #全局参数设置:这部分设置的参数影响整个程序的运行
      uid = root       #rsync运行时的用户ID (关于用户ID和用户组ID的设置只要保证具有读取要同步文件和文
件夹的权限即可)
      gid = root        #rsync运行时的用户组ID
      max connections = 0  #同时最大的连接数,0为不限制
      pid file = /var/log/rsync/rsyncd.pid   #记录rsync运行时的进程ID
      lock file = /var/log/rsync/rsync.lock  #以文件的方式锁的方式,保证rsync的一次运行
      log file = /var/log/rsync/rsyncd.log   #rsync日志信息包括启动信息同步信息等
      port = 873                             #可以指定rsync运行时使用的端口,默认使用873(不指定则使用
默认)
      use chroot = no                        #不使用chroot
      #同步模块配置
      [data]               #要同步的文件夹的别名,此处直接写的accounts,只是一个名称方便记忆即可,客户
端同时要用到
      path = /data #指定要同步的具体文件夹,此处为实际同步的文件夹
      comment = backup data  #备注信息,主要是一些说明信息,用来帮助记忆等
      ignore errors           #忽略一些无关的错误信息
      read only = false       #是否设置以只读的方式运行,本工具支持对外同步和回传哟
      list = false            #是否允许客户端查看文件列表
      hosts allow = 192.168.40.42 #允许同步的客户机IP,多个用","隔开
      auth users = test           #同步认证时使用的用户名,可以任意指定,但必需存在于下一项的密码文件

      secrets file = /root/rsync.passwd  #密码认证文件,此文件中包含客户端认证时的用户名和密码的对应关
系 ,配置文件名可以任意
centos6的配置文件如下:
服务端配置文件:
[root@localhost rsync]# cat /etc/rsyncd.conf
uid = root                                         
gid = root
max connections = 200
timeout = 600
use chroot = no
read only = no
port = 873
log file=/var/log/rsyncd.log//记录日志
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[data]//第一行是模块的名字,必须有这行                  
path=/data//指定要同步的具体文件夹,此处为实际同步的文件夹
comment=backup data//备注信息,主要是一些说明信息,用来帮助记忆等
ignore errors//忽略一些无关的错误信息防止因为资源不足或其他的通信出错导致严重问题
hosts allow=192.168.40.42//允许同步的客户机IP,多个用","隔开
auth user=test//验证用户,没有这行表示匿名,安全起见请加上这行
secrets file=/root/rsync.passwd//密码认证文件,此文件中包含客户端认证时的用户名和密码的对应关系 ,配置
文件名可以任意secrets file分两部分,服务器端跟备份服务器端
服务器端 格式为登录用户名:登录用户密码
备份服务器端 格式为登录用户密码(不需要写入登录用户名)
按上要求设置服务器端的密码文件

客户端配置文件
[root@localhost rsync]# cat /etc/rsyncd.conf
uid = root                                         
gid = root
max connections = 200
timeout = 600
use chroot = no
read only = no
port = 873
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[data]                   
path=/data
comment=backup data
ignore errors
hosts allow=192.168.40.40
auth users=test
secrets file=/root/rsync.passwd

服务端:
[root@localhost ~]# cat rsync.passwd //这个文件一定要设置为chmod 600不然无法完成RSYNC设置
test:123456
户端
[root@localhost ~]# cat rsync.passwd //这个文件一定要设置为chmod 600不然无法完成RSYNC设置
123456
服务端:
echo "/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf&">>/etc/rc.local//让系统开机运行
客户端:
echo "/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf&">>/etc/rc.local//让系统开机运行
reboot重启启动后
netstat -an |grep 873 查看服务是否开启并监听端口如有监听服务正常
[root@localhost ~]# netstat -an|grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN     
tcp        0      0 :::873                      :::*                        LISTEN     
unix  3      [ ]         STREAM     CONNECTED     8873  
如果开启的iptables就要
iptables -I INPUT -p tcp --dport 873 -j ACCEPT 命令开启防火墙的873端口

服务端脚本
#!/bin/sh
/usr/local/rsync/bin/rsync -vzrtopg --progress test@192.168.40.42:/data /data --delete
客户端脚本
#!/bin/sh
/usr/local/rsync/bin/rsync -vzrtopg --progress --password-file=/root/rsync.passwd /data
test@192.168.40.40::data --delete
解释 --progress 显示传输过程
  --delete 通信两端被同步的一段如果之前备份的文件有删除的话备份的那端也删除同样文件
  --password-file是备份机器的密码文件的路径方便crontab调用
   test@192.168.40.40::data /data是用test帐号登录远程服务器192.168.40.40调用test模块备份到本地/data
文件夹下如果命令是/data test@192.168.40.40::data的话正好相反是讲本地/data的文件同步到远程机器
192.168.40.40的data模块定义的路径地方!!!!!(警告!!!这点一定要搞懂,因为备份使用--delete 删除
已经删除的文件一定要确定备份方向)
 crontab 设置定时任务同步备份实现自动备份

同步参数
常用参数-avz ,--progress,--delete
 
-v, --verbose 详细模式输出
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
--delete 删除那些DST中SRC没有的文件
--force 强制删除目录,即使不为空
-timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
 
测试:在42客户端机器上创建一个test目录
[root@localhost data]# mkdir test
[root@localhost data]# ls
1  2  3  333  4  5  6  ggg  kkk  test
40服务上没有test这个目录
[root@localhost data]# ls
1  2  3  333  4  5  6  ggg  kkk
[root@localhost ~]# sh test.sh
test@192.168.40.42's password:
receiving incremental file list
data/
data/test/
sent 28 bytes  received 200 bytes  8.29 bytes/sec
total size is 0  speedup is 0.00
[root@localhost data]# ls
1  2  3  333  4  5  6  ggg  kkk  test
 
遇到的问题
1.刚开始/data目录的权限问题所以被拒绝了。
2.还有刚开始用/usr/local/rsync/bin/rsync --daemon 启动发现没有配置文件,所以制定配置文件。