一、简介
rsync(Remote synchronization ):一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具。
rsync软件适用于Unix、linux、Windows等多种操作系统平台
官网 http://www.samba.org/ftp/rsync/rsync.html
远程两台主机之间文件的拷贝,目录的拷贝,还可以删除文件及目录
同步数据:既可以同步内容,也可以同步属性
Rsync优缺点
优点:
- 增量备份,支持socket(daemon)。集中备份(支持推拉,都是以客户机为参照物)
- 远程SHELL通道模式还可以加密(ssh)传输,socket(daemon)需要加密传输,可以利用vpn服务或ipsec服务
缺点:
- 大量小文件同步的时候,比对时间较长。有的时候。rsync进程可能会停止。
- 同步大文件时,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
客户端:
- rsync配置的密码文件权限是否为600,密码和格式是否正确:仅有密码,是否和服务器端一致。
- 用telnet连接服务器ip地址873(默认)端口,查看服务是否启动(可测试服务端防火墙是否阻挡)
- 查看命令是否有问题,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