Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30864
  • 博文数量: 8
  • 博客积分: 189
  • 博客等级: 入伍新兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-10 23:02
文章分类
文章存档

2013年(1)

2012年(1)

2011年(6)

我的朋友

分类: 系统运维

2011-08-30 21:02:32

    这篇文章其实是之前几个同事合作整理的,基本步骤都没错,但今天在实际安装过程中,遇到了几处问题和遗漏,就在此补上了。
 

    CwRsync是基于cygwin平台的rsync软件包,支持windowswindowswindowsLinuxLinuxwindows高效文件同步。由于CwRsync已经集成了cygwin类库,因此安装的时候可以省去cygwin包。Cwrsync还集成了OpenSSH for windows,可以实现Linux 下Rsync一模一样的操作。详细配置步骤如下:

 

 一、服务器端安装配置

1、下载安装文件

 

2、安装

 

cwRsync分server包和client包,这里先说server包。

 

解开server包,执行解开后的安装文件;

 

第一步没什么好说的;

 

到第二步,安装文件会提示要求输入启动rsyncserver服务所需的系统账号以及对应的密码;

这一步很重要,可以说是cwRsync安装成功与否的关键。这一步要求输入当前系统存在的账号密码,用来启动RsyncServer服务,这个账号需要在安装前就要建立好,因为安装程序不会自动创建。如果这个账号没有提前创建好的话,系统“服务”里将不会出现“RsyncServer”服务。

于是暂停安装进度,打开系统管理界面,建立了一个对应用户(本例中此用户名为SvcCWRsrync),并记录密码,修改用户的安全权限,然后把切换到安装界面,填入刚才建好的用户名和对应密码,继续安装;

 

安装完毕后,安装程序会将rsyncserver所在目录及其下子目录和文件赋给SvcCWRsrync用户完全操作权限,因为SvcCWRsrync需要写入日志、更新配置文件等;

 

3修改配置文件rsyncd.conf

 

配置文件在安装程序的根目录下,配置内容如下:

use chroot = no      # 不使用chroot
strict modes = false     #使用静态模式
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log   # 日志记录文件
[rsync]        # 这里是认证的模块名,在client端需要指定
path = /cygdrive/d/works    # 需要做镜像的目录,如d:/www
transfer logging = yes              # 记录传输日志
ignore errors       # 可以忽略一些无关的IO错误
read only = yes      # 只读
list = no        # 不允许列文件
hosts allow=19.2.0.0/255.255.0.0  
hosts deny = *                      # 禁止除19.2.0.0/255.255.0.0段外的连接IP
auth users = SvcCWRSYNC    # 认证的用户名,如果没有这行,则表明是匿名
secrets file = /cygdrive/d/secure/rsync.passwd  # 认证文件名以及所在路径

红字部分需要着重说明一下,因为这跟下面遇到的一处错误有关

根据资料,server的配置文件可以以不同的[xxx]块来划分不同的同步位置和内容,供不同的client来取文件,对应的client配置,下面会讲到。

 

4、建立认证文件

根据配置的内容,在对应位置创建认证文件 d:/secure/rsync.passwd

内容格式为

用户:密码,如rsyncuser:woaixizao4234

5、将需要同步的目录及其下子目录和文件,赋予SvcCWRsrync用户可读权限

ok,server端配置到此结束,最后,还需要打开管理工具,启动rsyncserver服务,并将其设置为自动启动。

二、客户端安装配置

 

1、下载客户端安装包

下载地址见上,与server端下载点一样;

 

下载完后就是解包,安装,安装过程没有什么特别的,无非就是根据自己需要改变一下安装路径而已;

 

2、配置

cwRsync客户端不需要很复杂的配置,只需要通过命令行来同步服务器端的数据,建立批处理脚本rsync.bat内容如下:

 

@echo off
set RSYNC_HOME=d:\Program Files\cwRsync\bin
cd %RSYNC_HOME%
d:
rsync -avzP --progress --delete --password-file=/cygdrive/d/secure/rsync.passwd /cygdrive/d/works

 

脚本内容很简单,前面几行没什么可说的,重点讲一下最后一行参数的含义,以及红字部分:

 

(2012.11.12更新)

建议采用-rltDzvP参数

因为以下参数中的a参数,有时会造成目标服务器上的文件权限错乱,从而导致目标服务器上的web服务不可用,个人判断:windows对用户的处理和linux不同,两台不同的服务器,即使创建相同名字的用户,在服务器上对应的gid和uid也不一样,因此当CWRSYNC使用-a参数时,他会尝试将源服务器上的文件权限也赋给目标服务器上的文件,两者权限上的差异导致了错误的产生,因此解决办法就是不传递文件权限和属主信息;

-avzP

-a 参数,相当于-rlptgoD-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;

-z 传输时压缩;

-P 传输进度;

-v verbose,详细模式输出

-u是只同步已经更新的文件,避免没有更新的文件被重复更新一次,不过要注意两者机器时钟的同步

--progress

显示备份过程

--delete

删除那些DSTSRC没有的文件

--password-file

指定密码文件以及路径,内容为server端配置的对应密码,此处无需、也不能写用户名;

 

这一段包含三个要素:SvcCWRSYNC为登陆rsync server的用户,1.2.3.4为rsync server的ip,rsync用来区别client到server端获取的同步内容(见前文server端配置相关红字描述)

 

/cygdrive/d/works

存放服务器端同步文件的本地目录

 

脚本写好后,可以配置一个系统计划任务,定期执行该脚本,以便获得最新文件。

 

最后,要记得建立密码文件,位置和内容和之前说的、脚本中--password-file参数所设定的一致,文件内容要和server端密码文件配置一致;

 

三、错误处理

 

1、client执行同步脚本时,提示:

@ERROR: Unknown module 'rsync'

rsync error: error starting client-server protocol (code 5) at main.c(1383)

 

赶紧检查,结果发现server端第五步没有配(即同步目录权限未赋),囧,赶紧加上;

再试,还是一样错误;

google了一下,一时没有很直接的答案,但有提示,说该错误一般会跟client到server端的验证有关,于是重点检查两端的密码文件内容、server的配置以及client脚本的一致性,最后终于发现server端rsyncd.conf中,[  ]中定义和client脚本中定义不一致,将两端修正为一致后,错误解决;

 

2、提示:

@ERROR: auth failed on module rsync

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

这个问题一般跟server端passwd文件权限有关,记得给passwd文件+上rsync服务账号(本例中是SvcCWRsrync)可读权限;

 

3client执行同步脚本时,提示:

password file must be owned by root when running as root

 

这个问题一般是由于server端和client端的版本不同造成的,如果不想重装,可以采取如下解决办法:

 

将rsync serverbin目录下的chown.exe拷贝到clientbin下,执行:

chown.exe administrator /cygdrive/d/secure/rsync.passwd (后面为client端密码文件所存放的位置)

 

再次执行同步脚本,终于ok了。

 

最后还是要强调一点:server端和client端的密码文件内容是不完全一致的,server的需要写明用户名和密码,client则只需要写密码即可,具体格式见前文所述。这里是很多人在配置过程中容易犯错的地方。

 

 

阅读(1853) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~