服务器端配置:
[root@Hammer home]# rpm -qa |grep rsync                 #检查系统是否安装了rsync软件包
rsync-2.6.9
如果没有,就去yum 或者apt-get install或者去官网服务器上下一个
 
vi /etc/xinetd.d/rsync
将disable=yes改为no
 
service rsync
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
 
2 配置rsync自动启动
[root@test etc]# chkconfig rsync on
[root@test etc]# chkconfig rsync --list
rsync           on
 
自动启动的方法还有  在 /etc/rc.d/rc.local 后面添加  /usr/bin/rsync  --daemon
vim /etc/rc.d/rc.local
 
3 配置rsyncd.conf
[root@test etc]# vim rsyncd.conf
 
uid = root
 # 或者写成nobody
gid = root  #
或者写成nobody
use chroot = no
max connections = 4 
#最大连接数
strict modes = yes
port = 873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log   
#上述3个文件如果不是在root帐户下用最好配置成可以修改的文件。或者给这3个文件修改所有者为其他帐户。我采用的第一种方法,如果用hadoop用户,我将这几个文件放在了/home/hadoop/rsync下
 
[hadoop]        #模块名,这里相当于一个区分符,如果要同步多个文件夹就在这里区分,英文名叫做module
path = /usr/local/hadoop-0.20.2/conf  #要同步的文件的路径
comment = HADOOP
auth users = hadoop
uid = root
gid = root
secrets file = /etc/rsyncd.secrets   #存放rsync密码的文件
read only = no
list = no
hosts allow = 192.168.0.3 192.168.0.4  #设置允许访问的客户端多个客户端用空格隔开
hosts deny = *  #设置不允许访问的黑名单
[zookeeper]        #这里相当于一个区分符,如果要同步多个文件夹就在这里区分
path = /usr/zookeeper-3.3.5/conf
comment = ZOOKEEPER
auth users = hadoop
uid = root
gid = root
secrets file = /etc/rsyncd.secrets   #存放rsync密码的文件
read only = no
list = no 
 
4 确保etc/services中rsync端口号正确
[root@namenode etc]# vim /etc/services
rsync           873/tcp                         # rsync
rsync           873/udp                         # rsync
 
5 配置rsync密码(在上边的配置文件中已经写好路径)/etc/rsyncd.secrets(名字随便写,只要和上边配置文件里的一致即可),格式(一行一个用户)
[root@namenode etc]# vi /etc/rsyncd.secrets
hadoop:hadoop   #hadoop为用户 第二个为密码  中间有冒号隔开
6 配置rsync密码文件权限
[root@namenode ]# chown root.root /etc/rsyncd.secrets
[root@namenode ]# chmod 400 /etc/rsyncd.secrets  #或者600,除root外其他用户不能有任何权限
 
7 启动配置
[root@test home]# /etc/init.d/xinetd restart
Stopping xinetd:                                           [  OK  ]
Starting xinetd:                                           [  OK  ]
 
8 如果xinetd没有的话,需要安装一下
[root@namenode]# yum -y install xinetd
 
 
 启动rsync server
  RSYNC服务端启动的两种方法
9、启动rsync服务端(独立启动)
[root@namenode]# /usr/bin/rsync --daemon
10、检查rsync是否启动
[root@namenode]# lsof -i :873
COMMAND  PID USER   FD   TYPE DEVICE SIZE NODE NAME
xinetd  4396 root    5u  IPv4 633387       TCP *:rsync (LISTEN)
 
客户端配置
1 配置三个过程就可以了
  1.1 设定密码文件
  1.2 测试rsync执行指令
  1.3 将rsync指令放入工作排程(crontab)
[root@datanode1]# vi /etc/xinetd.d/rsync
 
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable = yes  #这里service是不启动的
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
 
1.1  配置密码文件  (注:为了安全,设定密码档案的属性为:600, 必须设置为600,除root外其他用户不能有任何权限。rsyncd.secrets的密码一定要和Rsync Server密码设定案里的密码一样)
[root@datanode1]# vi  /etc/rsyncd.secrets 
hadoop  #这里只需要写密码
 
[root@datanode1]# chown root:root /etc/rsyncd.secrets   # 注意必须给权限
[root@datanode1]# chmod 600  /etc/rsyncd.secrets          # 必须修改权限
 
1.2 从服务器上下载文件
[root@datanode1]# rsync -avz --progress  --password-file=/etc/rsyncd.secrets hadoop@namenode::hadoop /usr/local/hadoop-0.20.2
--password-file=/etc/rsyncd.secret,的作用相当于免输入密码,如果没有这一句就会提示输入密码
delete参数是指 --delete 删除那些客户端没有中有而服务器端没有的文件,保持源、目标的一致性,但是不建议使用 
   从本地上传到服务器上去
[root@aj1 rsync-3.0.4]# rsync -avz  --password-file=/etc/rsyncd.secrets  /usr/local/hadoop-0.20.2 hadoop@namenode::hadoop
请确保客户端同步用户hadoop,对模块hadoop所在目录有读、写、执行的权限
如果不是root帐户,而是rsync auth_usrs的帐户使用,要加sudo,因为rsyncd.secrets密码的文件的所有者是root,当然如果参数中不加入password,可以不加sudo。
rsync的参数的说明:
-a 相当于 -rlptgoD 的集合
-u 等同于 –update,在目标文件比源文件新的情况下不更新
-v 显示同步的文件
–progress 显示文件同步时的百分比进度、传输速率
 
在其他的博客上还看到对于rsync自动同步的配置,比如定时为早上6:30同步
可以建一个启动脚本:方便每次系统启动时,服务自启动。 
#!/bin/sh 
rm -f /var/run/rsyncd.pid 
/usr/local/bin/rsync --daemon --config=/etc/rsyncd.conf 
 
netstst -ant  可以查看rsync的工作端口873。如没有些端口,检查配置。 
5、配置客户端(datanode1)的备份脚本,可以启用计划任务,定时备份。 
  vi /usr/local/rsync/bakcl.sh(备份脚本可以放在任意地方,加上可执行权限) 
#!/bin/sh 
rsync -vzrtopg  --progress root@namenode::hadoop /usr/local/hadoop-0.20.2/conf 
/
 
上例是把namenode其hadoop下的所有内容备份到datanode1下的/usr/local/hadoop-0.20.2/conf 
/目录下,如果没有其目录,会自动创建。 
6、上传过程。恢复服务器一定要有写的权限。 
  vi /usr/local/rsync/rebakcl.sh 
#!/bin/sh 
rsync -auvz  --password-file=/etc/rsyncd.secrets  /usr/local/hadoop-0.20.2 hadoop@namenode::hadoop
 
7、启动计划任务,定时每天早上6:30自动备份: 
  crontab -e (定时执行任务)
 
30 6 * * * hadoop /bin/sh /usr/local/rsync/bakcl.sh
 
或者设置为每半小时启动一次
crontab -e
*/30 * * * * hadoop /bin/sh /usr/local/rsync/bakcl.sh > /dev/null 2>&1
 
error总结:
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1296) [receiver=2.6.8]
原因及解决办法:
这一般是在服务器端没有建立目录
或者是如果有开启SELinux只要执行一下命令
     SELinux;
     setsebool -P rsync_disable_trans on
 
切记: rsyncd.secrets的权限必须为600
(注意:这个安全设置很重要,如果不这样做客户机连接服务器时会提示:
password file must not be other-accessible
rsync error: some files could not be transferred (code 23) at main.c(1298) [generator=2.6.8]
@ERROR: auth failed on module
rsync: connection unexpectedly closed (102 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(165)
服务器端日志将出现错误提示:
2005/08/23 06:32:01 [8388] secrets file must not be other-accessible (see strict modes option)
2005/08/23 06:32:01 [8388] continuing without secrets file
2005/08/23 06:32:01 [8388] auth failed on module   from documentserver
服务器端rsyncd.secrets (用户:密码)<用户必须是系统用户,密码尽量不要为系统用户密码>
客户端rsyncd.secrets (密码)<服务器端密码>
服务器和客户端的帐户密码都不可以有空格,否则会出现
@ERROR: auth failed on module
注意:
如果改变了端口号,一定要在/etc/services中把对应的端口改变才能正常运行
 
如rsync          873/tcp改成
   rsync          3334/tcp即可
error3:
rsyncd.secrets的密码一定要和Rsync Server密码设定档案里的密码一样。如果不同(跟不是linux合法用户错误一样),将会出现如下的错误:
 #rsync -azv /home rsync://root@192.168.1.107/hadoop --password-file=/home/rsyncd.secrets
 @ERROR: auth failed on module hadoop
 rsync error: error starting client-server protocol (code 5) at main.c(1296) [sender=2.6.8]
error4:
在client上遇到问题:
rsync -auzv --progress --password-file=/etc/rsync.pas root@192.168.133.128::backup /home/
rsync: could not open password file "/etc/rsync.pas": No such file or directory (2)
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
遇到这个问题:client端没有设置/etc/rsync.pas这个文件,而在使用rsync命令的时候,加了这个参数--
password-file=/etc/rsync.pas
 
error5:
rsync -auzv --progress --password-file=/etc/rsync.pas root@192.168.133.128::backup /home/
@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1506) [Receiver=3.0.7]
遇到这个问题,是因为服务器端的/home/backup  其中backup这个目录并没有设置,所以提示:chdir failed
error6:
rsync: write failed on "/home/backup2010/wensong": No space left on device (28)
rsync error: error in file IO (code 11) at receiver.c(302) [receiver=3.0.7]
rsync: connection unexpectedly closed (2721 bytes received so far) [generator]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [generator=3.0.7]
磁盘空间不够,所以无法操作。
可以通过df /home/backup2010 来查看可用空间和已用空间
error7:
1、权限问题
类似如下的提示:rsync: opendir "/kexue" (in dtsChannel) failed: Permission denied (13)注意查看同步的目录权限是否为755
2、time out
rsync: failed to connect to 203.100.192.66: Connection timed out (110)
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]
检查服务器的端口netstat –tunlp,远程telnet测试。
3、服务未启动
rsync: failed to connect to 10.10.10.170: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.5]
启动服务:rsync --daemon --config=/etc/rsyncd.conf
4、磁盘空间满
rsync: recv_generator: mkdir "/teacherclubBackup/rsync……" failed: No space left on device (28)
*** Skipping any contents from this failed directory ***
5、Ctrl+C或者大量文件
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(544) [receiver=3.0.5]
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(544) [generator=3.0.5]
6、xnetid启动(linux)
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(759) [receiver=3.0.5]