环境:CentOS 5.4,rsync-3.0.8
一、软件简介
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等工具。
二、安装软件
2.1、下载安装
方式1: yum 安装
yum install rsync
方式2: 源码安装
cd /qeedoodb/setup
wget http://rsync.samba.org/ftp/rsync/rsync-3.0.8.tar.gz
cd rsync-3.0.8
./configure
make
make install
2.2 配置文件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
#同步模块配置
[test] #要同步的文件夹的别名,此处直接写的accounts,只是一个名称方便记忆即可,客户端同时要用到
path = /data #指定要同步的具体文件夹,此处为实际同步的文件夹
comment = backup data #备注信息,主要是一些说明信息,用来帮助记忆等
ignore errors #忽略一些无关的错误信息
read only = false #是否设置以只读的方式运行,本工具支持对外同步和回传哟
list = false #是否允许客户端查看文件列表
hosts allow = 192.168.189.141 #允许同步的客户机IP,多个用","隔开
auth users = test #同步认证时使用的用户名,可以任意指定,但必需存在于下一项的密码文件中
secrets file = /etc/rsyncd.scrt #密码认证文件,此文件中包含客户端认证时的用户名和密码的对应关系 ,配置文件名可以任意
2.3 编辑密码文件:
vi /etc/rsyncd.scrt
test:123456 #密码格式:[用户名:密码] 如果想设置多个认证用户名和密码对的话,要写成多行.一行保存一对
这里需要注意的rsync对于密码文件的权限要求比较严格,只能root用户对该文件具有读写权限
chmod 600 /etc/rsyncd.scrt
2.4 启动rsync
方式一:作为守护进程启动
/usr/local/bin/rsync --daemon
/var/log/rsync/rsyncd.pid 机器重启后,需要删掉rsyncd.pid 再启动 rsync
查看rsync是整正常运行
[root@localhost html]# ps -ef|grep rsync
root 2861 1 0 17:04 00:00:00 /usr/local/bin/rsync --daemon
方式二:用xinetd启动rsync
vi /etc/xinetd.d/rsync
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/local/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
service xinetd restart
查看rsync是整正常运行
netstat -ant|grep :873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
2.5 开启防火墙
vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
service iptables restart
2.6 关闭SELinux
SELINUX=disabled 或则 setsebool -P rsync_disable_trans on
2.7 添加指定网卡
在服务端网卡(eth1)上添加客户端IP(192.168.189.141)
route add -host 192.168.189.141 eth1
三.客户端配置及验证测试
客户端安装参数服务端
3.1 编辑密码文件
vi /etc/rsyncd.scrt
123456 #本配置文件只记录密码即可
修改权限
chmod 600 /etc/rsyncd.scrt
3.2 同步测试
/usr/bin/rsync -vlzrtogp --progress --delete [email protected]::test /backup --password-file=/etc/rsyncd.scrt
写成脚本的方式方便调用
vi rsync.sh
#!/bin/bash
/usr/bin/rsync -vlzrtogp --progress --delete [email protected]::test /backup --password-file=/etc/rsyncd.scrt
简单说明:
-vlzrtogp 具体意思参看后面的参数解释
--pprogress 显示同步进度信息
--delete 如果服务器删除的文件在客户端同样删除
test 为认证的用户名
192.168.189.140为服务器IP
::accounts 为认证的模块
/var/www/html/test 为本地要存放同步文件的文件夹
--password-file=/etc/rsyncd.scrt 指定密码认证文件,这样在执行同步命令时不需要再输入密码
3.3 恢复服务端备份数据(若是服务器文件少了文件,这个依据情况而定,小心使用)
/usr/local/bin/rsync -vlzrtogp --progress /var/www/html/test [email protected]::test
问题:
问题一:
@ERROR: chroot failed
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端的目录不存在或无权限,创建目录并修正权限可解决问题。
问题二:
@ERROR: auth failed on module tee
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败。
提供正确的用户名密码解决此问题。
问题三:
@ERROR: Unknown module ‘tee_nonexists’
rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要的模块以解决问题。
问题四:
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=2.6.8]
原因及解决办法:
SELinux;
setsebool -P rsync_disable_trans on
附:
rsync命令参数
-v表示verbose详细显示
-z表示压缩
-r表示recursive递归
-t表示保持原文件创建时间
-o表示保持原文件属主
-p表示保持原文件的参数
-g表示保持原文件的所属组
-a存档模式
-P表示代替-partial和-progress两者的选项功能
-e ssh建立起加密的连接。
--partial阻止rsync在传输中断时删除已拷贝的部分(如果在拷贝文件的过程中,传输被中断,rsync的默认操作是撤消前操作,即从目标机上删除已拷贝的部分文件
--progress是指显示出详细的进度情况
--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
--exclude不包含/ins目录
--size-only 这个参数用在两个文件夹中的差别仅是源文件夹中有一些新文件,不存在重名且被修改过的文件,因为这种文件有可能会因为内容被修改可大小一样,而被略过。这个参数可以大大地提高同步的效率,因为它不需要检查同名文件的内容是否相同。
--password-file来指定密码文件,内容包含server端指定认证用户的密码.这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读