服务器端配置:

[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]

转载于:https://blog.51cto.com/showerlee/1119767