首页 > 代码库 > rsync

rsync

rsync连接远程主机进行同步或备份时有两种途径:

使用远程shell程序(如sshrsh)进行连接,或使用TCP直接连接rsync daemon。

Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量份。

本地拷贝: 

   rsync [选项] SRC… DEST,在本地进行复制操作

 

shell模式: 

   rsync [选项] [user@]Host:SRC… [DEST],拉动作,从远程主机拉文件到本地 

   rsync [选项] SRC… [user@]Host:DEST,推动作,把本地文件推送到远程主机

 

daemon模式: 

   rsync [选项] [user@]Host::SRC… [DEST],拉动作 

   rsync [选项] rsync://[user@]Host [:port]/SRC… [DEST],仍然是拉动作 

   rsync [选项] SRC... [user@]Host::DEST,推动作 

   rsync [选项] SRC...rsync://[user@]Host [:port]/DEST,仍然是推动作

目标:多服务器文件同步

 

环境:2台CentOS5.6

Web端:192.168.20.20

Backup端:192.168.20.21

需要备份目录为:192.168.20.20:/usr/local/web1 /usr/local/web2

 

第一步:服务器端的配置

#rpm –qa |grep rsync && rpm –e rsync-** --dodeps
如果没有的话,则自行下载安装 (yum –y install rsync)
 #cd /usr/local/
 # wget http://www.samba.org/ftp/rsync/src-previews/rsync-3.0.6pre1.tar.gz
 #tar –zxvf rsync-3.0.6pre1.tar.gz
 #cd rsync-3.0.6pre1
 #./configure –prefix=/usr/local/rsync 
 # make && make install
 # vi /etc/rsyncd.conf
 
[web1]
path=/usr/local/web1
comment = backup web1
ignore errors
read only = yes
#list = no
auth users = web1
 
[web2]
path=/usr/local/web2
comment = backup web2
ignore errors
read only = yes
#list = no
auth users = web2

uid = nobody           //指定文件传输过程中的用户身份

gid = nobody           //指定文件传输过程中的组身份

log file = /var/log/rsyncd.log        //指定使用独立的日志文件的位置

pid file = /var/run/rsyncd.pid        //保存pid到指定文件,以便于使用脚本终止进程

read only = yes        //该目录设置为只读,即只允许客户端下行同步,不允许上传。若需要进行从                          备份机还原数据,改为no

                         rsyncd默认在873端口监听服务,可在客户端使用telnet连接测

# mkdir -p /usr/local/pid
# mkdir -p /usr/local/pwd
# vi /usr/local/rsync/pwd/rsyncd.pwd
web1:123456@789
web2:789@123456

格式为:用户名:密码

设置密码文件仅仅root用户能访问

#chmod 600 /usr/local/rsync/pwd/rsyncd.pwd
# cp /usr/local/rsync/bin/rsync  /usr/bin/

在服务器端启动rsync服务

# rsync –daemon (注意重启kill后要把.pid .lock删掉)

第二步:备份端的配置

安装rsync软件,同上

设置密码文件只需填写对应密码:

# touch /usr/local/rsync/web1
# touch /usr/local/rsync/web2
# vi /usr/local/rsync/web1
 123456@789
# vi /usr/local/rsync/web2
 789@123456

同时设置为只有root有权限

# chmod 600 /usr/local/rsync/wbe1

创建备份目录

# mkdir -p /usr/local/web1
# mkdir -p /usr/local/web2
# rsync –daemon

把服务器端文件web1备份到本机(备份机):

# /usr/bin/rsync -vzrtopg --progress --delete --exclude "logs/" --exclude "conf/ssl.*/" --password-file=/usr/local/rsync/web1 web1@192.168.20.20::web1 /usr/local/web1

# Web2 也是一样的如上手动进行同步

 --delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致, 删除本地目录中多余的文件

 -- exclude "logs/" 表示不对/web1/logs目录下的文件进行备份。

 --exclude "conf/ssl.*/"表示不对/web1/conf/ssl.*/目录下的文件进行备份。

 如果需要可以放到crontab 计划任务中间隔性的进行同步备份!

将以上命令写入计划任务,每1分钟执行,即可实现实时同步的效果。


注:上面这个命令行中-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数。-- progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。 


附,rsync使用时的常见问题: 

错误1: rsync: read error: Connection reset by peer (104) 

rsync error: error in rsync protocol data stream (code 12) at io.c(794) [receiver=3.0.2] 

解决:很大可能是服务器端没有开启 rsync 服务。开启服务。 或者开启了防火墙指定的端口无法访问。 


错误2:@ERROR: chdir failed 

rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2] 

解决:服务器端同步目录没有权限,cwrsync默认用户是Svcwrsync。为同步目录添加用户Svcwrsync权限。 


错误3:@ERROR: failed to open lock file 

rsync error: error starting client-server protocol (code 5) at main.c(1495) [receiver=3.0.2] 

解决:服务器端配置文件 rsyncd.conf中添加 lock file = rsyncd.lock 即可解决。 


错误4:@ERROR: invalid uid nobody 

rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.2] 

解决:在rsyncd.conf文件中添加下面两行即可解决问题 

UID = 0 

GID = 0 


错误5:@ERROR: auth failed on module test2 

rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=3.0.2] 

解决:服务端没有指定正确的secrets file,请在 [test2]配置段添加如下配置行: 

auth users = coldstar #同步使用的帐号 

secrets file = rsyncd.secrets #密码文件 


错误6:password file must not be other-accessible 

解决:客户端的pass文件要求权限为600, chmod 600 /etc/rsync.pass 即可。


rsync