Rsync(remotesynchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。
Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主

配置文件。Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsyncserver会打开一
个873端口,等待客户端去连接。连接时,Rsyncserver会检查口令是否相符,若通过口令查核,则可以开始进行文
件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。
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、解压解包#tarzxvfrsync-3.0.9.tar.gz和补丁
3、配置#cdrsync-3.0.9
4配置./configure--prefix=/usr/local/rsync
5、编译安装#make&&makeinstall
6、把上述步骤在客户端和服务器端各执行一遍。
7.配置文件rsyncd.conf
vi/etc/rsyncd.conf
#全局参数设置:这部分设置的参数影响整个程序的运行
uid=root#rsync运行时的用户ID(关于用户ID和用户组ID的设置只要保证具有读取要同步文件和文
件夹的权限即可)
gid=root#rsync运行时的用户组ID
maxconnections=0#同时最大的连接数,0为不限制
pidfile=/var/log/rsync/rsyncd.pid#记录rsync运行时的进程ID
lockfile=/var/log/rsync/rsync.lock#以文件的方式锁的方式,保证rsync的一次运行
logfile=/var/log/rsync/rsyncd.log#rsync日志信息包括启动信息同步信息等
port=873#可以指定rsync运行时使用的端口,默认使用873(不指定则使用
默认)
usechroot=no#不使用chroot
#同步模块配置
[data]#要同步的文件夹的别名,此处直接写的accounts,只是一个名称方便记忆即可,客户
端同时要用到
path=/data#指定要同步的具体文件夹,此处为实际同步的文件夹
comment=backupdata#备注信息,主要是一些说明信息,用来帮助记忆等
ignoreerrors#忽略一些无关的错误信息
readonly=false#是否设置以只读的方式运行,本工具支持对外同步和回传哟
list=false#是否允许客户端查看文件列表
hostsallow=192.168.40.42#允许同步的客户机IP,多个用","隔开
authusers=test#同步认证时使用的用户名,可以任意指定,但必需存在于下一项的密码文件

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

客户端配置文件
[root@localhostrsync]#cat/etc/rsyncd.conf
uid=root
gid=root
maxconnections=200
timeout=600
usechroot=no
readonly=no
port=873
logfile=/var/log/rsyncd.log
pidfile=/var/run/rsyncd.pid
lockfile=/var/run/rsyncd.lock
[data]
path=/data
comment=backupdata
ignoreerrors
hostsallow=192.168.40.40
authusers=test
secretsfile=/root/rsync.passwd

服务端:
[root@localhost~]#catrsync.passwd//这个文件一定要设置为chmod600不然无法完成RSYNC设置
test:123456
户端
[root@localhost~]#catrsync.passwd//这个文件一定要设置为chmod600不然无法完成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|grep873查看服务是否开启并监听端口如有监听服务正常
[root@localhost~]#netstat-an|grep873
tcp000.0.0.0:8730.0.0.0:*LISTEN
tcp00:::873:::*LISTEN
unix3[]STREAMCONNECTED8873
如果开启的iptables就要
iptables-IINPUT-ptcp--dport873-jACCEPT命令开启防火墙的873端口

服务端脚本
#!/bin/sh
/usr/local/rsync/bin/rsync-vzrtopg--progresstest@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
文件夹下如果命令是/datatest@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=TIMEIP超时时间,单位为秒
-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@localhostdata]#mkdirtest
[root@localhostdata]#ls
123333456gggkkktest
40服务上没有test这个目录
[root@localhostdata]#ls
123333456gggkkk
[root@localhost~]#shtest.sh
test@192.168.40.42'spassword:
receivingincrementalfilelist
data/
data/test/
sent28bytesreceived200bytes8.29bytes/sec
totalsizeis0speedupis0.00
[root@localhostdata]#ls
123333456gggkkktest
遇到的问题
1.刚开始/data目录的权限问题所以被拒绝了。
2.还有刚开始用/usr/local/rsync/bin/rsync--daemon启动发现没有配置文件,所以制定配置文件。