一、简介

rsync(Remote synchronization ):一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具。

rsync软件适用于Unix、linux、Windows等多种操作系统平台

官网 http://www.samba.org/ftp/rsync/rsync.html

远程两台主机之间文件的拷贝,目录的拷贝,还可以删除文件及目录

同步数据:既可以同步内容,也可以同步属性

Rsync优缺点

优点:

  1. 增量备份,支持socket(daemon)。集中备份(支持推拉,都是以客户机为参照物)
  2. 远程SHELL通道模式还可以加密(ssh)传输,socket(daemon)需要加密传输,可以利用vpn服务或ipsec服务

缺点:

  1. 大量小文件同步的时候,比对时间较长。有的时候。rsync进程可能会停止。
  2. 同步大文件时,10G这样的大文件有时也会有问题,中断。未完整同步前,是隐藏文件。可以通过续传等参数实现传输

二、Rsync的三种工作模式

 

方式1:Local: 

         rsync [option…] SRC… [DEST]

方式2:Access via remote shell:                       常用:ssh  

         Pull:  rsync [option…]  [USER@]HOST:SRC…  [DEST]

         Push:  rsync [option…] SRC…  [USER@]HOST: [DEST]

方式3:Access via rsync daemon:     PORT:873

         Pull:  rsync [option…]  [USER@]HOST::SRC…  [DEST]

                  rsync [option…] rsync://[USER@]HOST[:PORT]/SRC… [DEST]

        Push:  rsync [option…] SRC…  [USER@]HOST:: [DEST]

                   rsync [option…] SRC…  rsync:// [USER@]HOST[:PORT]/DEST  

  常用参数:

                -v (verbose)传输时列出详细过程信息

                -z (compross)传输时进行压缩,提高传输效率

                -a (archive)等同于 -rtopgDl,以递归的方式传输文件,并保持文件属性

                -r (recursive)对子目录以递模式传输

                -t (times)保持文件时间属性

                -o (owner)保持文件拥有者信息

                -g (group)保持文件拥有组信息

                -p (perms)保持文件权限

                -P (progress)显示同步的过程及传输的进度信息

                -D (devices)保持设备文件信息

                -l  (links)保留软连接

                -e (rsh=COMMAND)使用信道协议,指定替代rsh的shell程序。例如:ssh

                --exclude=PATTERN  排除不需要传输的文件,同tar命令的此参数

                --exclude-from=file  有file文本文件将不需要传输的文件目录传递给命令,也同tar命令的该参数一样

                --bwlimit=RATE 限速传输,默认单位Kb

                --delete 让目标目录 和源目录数据完全一致

 

方式1:本地拷贝

拷贝目录        rsync -az /tmp1/ /mnt/           拷贝tmp1的内容到/mnt/下,不包括tmp1目录

                            rsync -az /tmp1 /mnt/       包括目录tmp1的整体拷贝

 

方式2:文件从客户端到备份服务端,/mnt/hosts 是客户端文件或目录,-e 'ssh -p 22'    指定ssh协议传输 端口 22

root是备份服务端用户名,10.0.0.31是备份服务器IP地址

rsync -avz /mnt/hosts root@10.0.0.31:/mnt/          

通过ssh免密码拷贝

rsync -avz /mnt/hosts -e 'ssh -p 22' root@10.0.0.31:/mnt/ ssh key

 

方式3:以守护进程(socket)方式传输数据

方式1和方式2只需要客户端和备份服务端都安装rsync即可使用。方式3需要事先进行配置才能使用,后文将详细阐述配置步骤

 

三、备份服务端和客户端的配置

备份服务端安装配置步骤:

1、查看安装是否安装rsync,若没有安装,用yum install -y rsync 这条命令安装(需联网)

[root@backup ~]# rpm -qa rsync 
rsync-3.0.6-12.el6.x86_64

2、添加rsync服务用户,管理本地目录,由于这个用户仅用于rsync传输使用,所以用-s /sbin/nologin 指定不可登陆,-M指定不创建家目录

[root@backup ~]# useradd rsync -s /sbin/nologin -M  
[root@backup ~]# tail -1 /etc/passwd        
rsync:x:504:504::/home/rsync:/sbin/nologin

3、生成/etc/rsuncd.conf配置文件(修改过配置文件和后需要重启服务,新的配置才生效)

目录

一、简介

二、Rsync的三种工作模式

三、备份服务端和客户端的配置

备份服务端安装配置步骤:

1、查看安装是否安装rsync,若没有安装,用yum install -y rsync 这条命令安装(需联网)

2、添加rsync服务用户,管理本地目录,由于这个用户仅用于rsync传输使用,所以用-s /sbin/nologin 指定不可登陆,-M指定不创建家目录

3、生成/etc/rsuncd.conf配置文件(修改过配置文件和后需要重启服务,新的配置才生效)

4、根据rsyncd.conf的authusers密码配置账户,用于远程连接。并根据secrets file参数生成密码文件。格式  user:password

 5、修改配置文件权限,必须为600

6、创建共享的目录并授权rsync服务管理

7、启动rsync服务并检查,rsync服务默认端口是873

 8、一般会将rsync服务加入开机自启动

客户机端:

1、生成密码文件,密码就是服务端rsync.password 中配置的密码

 2、改变文件权限,同服务端,这里的权限也是600,

3、创建共享目录

四、测试

1、先进行push测试,把客户端的文件推送到备份服务端

2、进行pull测试,把备份服务端的文件拉取送到客户端本地

3、排除拷贝 

五、报错检查


[root@backup ~]# vim /etc/rsyncd.conf    #编辑配置文件,
#rsync_config_____________start
#created by 45AC 18:09 2019-04-20
#QQ 277114545
#rsync.d conf start##
uid = rsync              #用户,远端的命令使用rsync访问共享目录  
gid = rsync              #用户组
use chroot = no	         #与安全相关
max connections = 200     #最大连接数
timeout = 300             #超时时间  秒
pid file = /var/run/rsyncd.pid   #进程对应的进程号文件,
lock file = /var/run/rsync.lock    #锁文件,防止文件不一致,数据安全
log file = /var/log/rsyncd.log      #日志文件
[backup]                  #模块名称
path = /backup             #服务器端提供访问的目录,共享目录
ignore errors              #忽略错误
read only = false           #可写
list = false                #不能列表(类似ls)
hosts allow = 172.16.1.0/24  #允许的网段
#hosts deny = 0.0.0.0/32      #拒绝的网段 和 hosts allow 只能要一个
auth users = rsync_backup        #独立于系统以外的虚拟用户,连接的虚拟用户,非系统用户
secrets file = /etc/rsync.password  #虚拟用户的账号密码文件
#rsync_config_____________end

 

4、根据rsyncd.conf的authusers密码配置账户,用于远程连接。并根据secrets file参数生成密码文件。格式  user:password

[root@backup ~]# vim /etc/rsync.password        
rsync_backup:yyssmm
root@backup ~]# cat /etc/rsync.password
rsync_backup:yyssmm

 5、修改配置文件权限,必须为600

[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ls -l /etc/rsync.password 
-rw------- 1 root root 7 4月  20 18:33 /etc/rsync.password

6、创建共享的目录并授权rsync服务管理

[root@backup ~]# mkdir /backup -p             
[root@backup ~]# chown rsync.rsync /backup/   
drwxr-xr-x. 2 rsync rsync 4096 4月   20 18:43 /backup

7、启动rsync服务并检查,rsync服务默认端口是873

[root@backup ~]# rsync --daemon     
[root@backup ~]# ps -ef |grep rsync
root       3029      1  0 18:40 ?        00:00:00 rsync --daemon
root       3031   1935  0 18:41 pts/0    00:00:00 grep rsync
[root@backup ~]# ps -ef |grep rsync|grep -v grep
root       3029      1  0 18:40 ?        00:00:00 rsync --daemon
 [root@backup ~]# lsof -i :873
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   3029 root    4u  IPv4  21245      0t0  TCP *:rsync (LISTEN)
rsync   3029 root    5u  IPv6  21246      0t0  TCP *:rsync (LISTEN)
[root@backup ~]# netstat -lntup|grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      3029/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      3029/rsync

 8、一般会将rsync服务加入开机自启动

[root@backup ~]# echo  "/usr/bin/rsync --daemon " >>/etc/rc.local  
[root@backup ~]# tail -n 1 /etc/rc.local 
/usr/bin/rsync --daemon

到此,备份服务端基本配置结束

客户机端:

1、生成密码文件,密码就是服务端rsync.password 中配置的密码

[root@nfs01 ~]# vim  /etc/rsync.password     这里可使用echo yyssmm >/etc/rsync.password替换
yyssmm
[root@nfs01 ~]# cat /etc/rsync.password 
yyssmm

 2、改变文件权限,同服务端,这里的权限也是600,

[root@nfs01 ~]# chmod 600 /etc/rsync.password   
[root@nfs01 ~]# ls -l /etc/rsync.password  
-rw------- 1 root root 7 4月   20 18:58 /etc/rsync.password

3、创建共享目录

[root@nfs01 ~]# mkdir -p /backup

四、测试

方式1和方式2在上文已经给出在下的测试命令,这里就只进行方式三的测试

1、先进行push测试,把客户端的文件推送到备份服务端

     先对用到的推送命令简单解释一下

       rsync -avz /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password

       rsync -avz  :命令及参数

       /backup/     :客户端推送到备份端的文件所在的目录,注意 /backup/ 这样写只会推送这个目录下的文件及目录,/backup如果这样写,则会把backup 这个目录一同推送

      rsync_backup :在服务端rsuncd.conf配置文件中的auth users 参数设置的虚拟用户

      172.16.1.41 :服务端的ip地址

      backup/      :rsuncd.conf配置文件中的backup模块 

      --password-file=/etc/rsync.password  :指定的客户端的密码文件

这是第二种推送代码,效果和上面用到的相同格式有所区别

rsync -avz /backup/ rsync://rsync_backup@172.16.1.41/backup/ --password-file=/etc/rsync.password 

 

[root@nfs01 ~]# cd /backup/
[root@nfs01 backup]# touch a{01..10}  临时生成几个文件
[root@nfs01 backup]# ls -l
总用量 0
-rw-r--r-- 1 root root 0 4月  20 13:26 a01
-rw-r--r-- 1 root root 0 4月  20 13:26 a02
-rw-r--r-- 1 root root 0 4月  20 13:26 a03
-rw-r--r-- 1 root root 0 4月  20 13:26 a04
-rw-r--r-- 1 root root 0 4月  20 13:26 a05
-rw-r--r-- 1 root root 0 4月  20 13:26 a06
-rw-r--r-- 1 root root 0 4月  20 13:26 a07
-rw-r--r-- 1 root root 0 4月  20 13:26 a08
-rw-r--r-- 1 root root 0 4月  20 13:26 a09
-rw-r--r-- 1 root root 0 4月  20 13:26 a10

[root@nfs01 backup]# rsync -avz /backup/ rsync://rsync_backup@172.16.1.41/backup/ --password-file=/etc/rsync.password
sending incremental file list
./
a01
a02
a03
a04
a05
a06
a07
a08
a09
a10

sent 483 bytes  received 201 bytes  1368.00 bytes/sec
total size is 0  speedup is 0.00

上面已经推送成功,可在备份服务端查看是否有我们推送的文件,可以看到 a01-a10就是我们推送到备份端的文件

[root@backup ~]# cd /backup/                 #在客户端推送前进的查看结果
[root@backup backup]# ls
172.16.1.31  2019-04-11_result.log  nfs-rpm.tar.gz


[root@backup backup]# ls -l                  #客户端推送后进的查看结果
总用量 3152
drwxr-xr-x 2 rsync rsync    4096 4月  15 12:09 172.16.1.31
-rw-r--r-- 1 root  root       49 4月  12 18:50 2019-04-11_result.log
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a01
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a02
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a03
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a04
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a05
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a06
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a07
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a08
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a09
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a10
-rw-r--r-- 1 root  root  3217325 4月  11 16:44 nfs-rpm.tar.gz

2、进行pull测试,把备份服务端的文件拉取送到客户端本地

下面的结果可以看到先前我们推送到备份端的文件,由于我们客户端和服务端是完全想同的,所以这次没有进行拷贝。验证了一下增量拷贝

[root@nfs01 backup]# rsync -avz rsync_backup@172.16.1.41::backup/ /backup/  --password-file=/etc/rsync.password
receiving incremental file list
.autofsck
.autorelabel
.log
2019-04-11_result.log
nfs-rpm.tar.gz
172.16.1.31/
172.16.1.31/backup_2019-04-11.tar.gz
172.16.1.31/backup_2019-04-14.tar.gz
172.16.1.31/flag_2019-04-11.log
172.16.1.31/flag_2019-04-14.log

sent 269 bytes  received 3221334 bytes  6443206.00 bytes/sec
total size is 3218973  speedup is 1.00
[root@nfs01 backup]# ls
172.16.1.31  2019-04-11_result.log  a01  a02  a03  a04  a05  a06  a07  a08  a09  a10  nfs-rpm.tar.gz

3、排除拷贝 

先创建了b01-b10文件,通过--exclude={b01,b03}排除了b01和b03这两个文件进行推送,在推送过程展示中,我们也看到没有对这两个文件进行推送。

[root@nfs01 backup]# touch b{01..10}
[root@nfs01 backup]# ls
172.16.1.31            a    a02  a04  a06  a08  a10  b02  b04  b06  b08  b10
2019-04-11_result.log  a01  a03  a05  a07  a09  b01  b03  b05  b07  b09  nfs-rpm.tar.gz

[root@nfs01 backup]# rsync -avz --exclude={b01,b03} /backup/ rsync://rsync_backup@172.16.1.41/backup/ --password-file=/etc/rsync.password  
sending incremental file list
./
a
b02
b04
b05
b06
b07
b08
b09
b10

sent 848 bytes  received 183 bytes  2062.00 bytes/sec
total size is 3218977  speedup is 3122.19

备份服务端查看结果,的确没有文件b01和b03

[root@backup backup]# ls -l
总用量 3156
drwxr-xr-x 2 rsync rsync    4096 4月  15 12:09 172.16.1.31
-rw-r--r-- 1 rsync rsync      49 4月  12 18:50 2019-04-11_result.log
-rw-r--r-- 1 rsync rsync       0 4月  20 20:29 a
-rw-r--r-- 1 rsync rsync       0 4月  20 20:29 a01
-rw-r--r-- 1 rsync rsync       4 4月  20 20:29 a02
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a03
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a04
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a05
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a06
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a07
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a08
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a09
-rw-r--r-- 1 rsync rsync       0 4月  20 13:26 a10
-rw-r--r-- 1 rsync rsync       0 4月  20 20:35 b02
-rw-r--r-- 1 rsync rsync       0 4月  20 20:35 b04
-rw-r--r-- 1 rsync rsync       0 4月  20 20:35 b05
-rw-r--r-- 1 rsync rsync       0 4月  20 20:35 b06
-rw-r--r-- 1 rsync rsync       0 4月  20 20:35 b07
-rw-r--r-- 1 rsync rsync       0 4月  20 20:35 b08
-rw-r--r-- 1 rsync rsync       0 4月  20 20:35 b09
-rw-r--r-- 1 rsync rsync       0 4月  20 20:35 b10
-rw-r--r-- 1 rsync rsync 3217325 4月  11 16:44 nfs-rpm.tar.gz

五、报错检查

下面是在执行命令时,可能会遇到的问题,这里简单列出部分用于参考

 

备份服务器目录所有者和组(权限)没有修改

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6] 

 

备份服务器找不到备份目录

@ERROR: chdir failed

rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

 

备份服务器用户没有创建

@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

 

认证错误

@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

此时可查看备份服务器的日志文件,查找具体原因:

密码错误

2019/04/20 03:01:51 [2419] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
2019/04/20 03:01:51 [2419] connect from 172.16.1.31 (172.16.1.31)
2019/04/20 03:01:51 [2419] auth failed on module backup from 172.16.1.31 (172.16.1.31): password mismatch

客户端:

  1. rsync配置的密码文件权限是否为600,密码和格式是否正确:仅有密码,是否和服务器端一致。
  2. 用telnet连接服务器ip地址873(默认)端口,查看服务是否启动(可测试服务端防火墙是否阻挡)
  3. 查看命令是否有问题,DEST是模块名

服务端:

1、查看rsync服务配置文件路径是否正确,正确默认路径为:/etc/rsyncd.conf

2、查看配置文件里host allow,host deny,允许的IP网段是否是允许客户端访问的IP网段

3、查看配置文件中path参数里的路径是否存在,权限是否正确(正常应为配置文件中的UID参数对应的所有者和组)

4、查看rsync服务是否启动。命令:ps -ef|grep rsync。端口是否存在 nestat -lnt|grep 873

5、查看iptables防火墙和selinux是否允许rsync服务通过,也可考虑关闭这两个服务

6、查看服务端rsync配置的密码文件是否为600,文件格式是否正确(user:passwred),路径是否和配置参数secrect file 对应

7如果是推送数据,要查看配置rsyncd.conf文件中用户是否对模块下目录有可读可写权限

 

/etc/rsyncd.conf 多模块配置

#rsync_config_____________start

#created by 45AC 18:09 2019-04-20

#QQ 277114545

#rsync.d conf start##

uid = rsync

gid = rsync

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

read only = false

list = false

hosts allow = 172.16.1.0/24

#hosts deny = 0.0.0.0/32   

auth users = rsync_backup              全局的用户和密码

secrets file = /etc/rsync.password

           

[backup]  

path = /backup

             

[kwyi]

path = /yyssmm

auth users = rsync_yyssmm              单独的用户和密码

secrets file = /etc/rsync.password.yyssmm



#rsync_config_____________end