三rsync使用总结
3.1Rsync介绍:
1、定义:是开源的、快速的、多功能的、全备份、增量(选择)备份的本地或远程的数据同步的备份工具。该软件适用多种操作系统。
2、远程拷贝:相当于ssh带的scp命令,但是scp每次都是全量拷贝。Rsync可以是增量拷贝。
Centos5,rsync2.x比对方法是,把所有的问题比对一边,然后进行同步。
Centos6,rsync3.x 可以实现增量比对。
3.2Rsync在客户端的作用比较:
远程拷贝:scp
本地拷贝:相当于cp覆盖备份
删除功能:rm
可以是一个网络服务(Port socket)
rsync的三种特性。通过ssh远程、通过客户端操作备份到服务端、 rsync daemon。
3.3rsync客户端服务的参数介绍:
Rsync主要是提供内网服务的
[root@wjw66 ~]# rpm -qa rsync 查看软件是否安装。
rsync-3.0.6-12.el6.x86_64
Rsync客户端参数介绍:
-z压缩 --compress 传输时进行压缩以提高传输效率,--compress-level=NUM可以按级别压缩,
-a --archive 表示按递归方式来传输文件,保持文件所有属性。等价于-rtopgDl,
-v显示信息输出过程、
-t, --times保持文件时间信息
-o, --ower 保持文件属性信息
-P--progress 显示同步的过程及传输时的进度信息
-D --device 保持设备文件属性
-r, --recursive 对子目录递归模式,即目录下所有目录都同样传输,注意小写r
-e,--rsh=COMMAND 使用信道协议,指定替代rsh的shell程序
例如:ssh
—exclude=PATTERN 指定排除不需要传输的文件模式
—exclude-from=file(文件名所在的目录文件)
—bwlimit=RATE limitsocket I/O bandwidth
--files-from= 指定同步列表文件中的目录或者是指定的文件
--delete:参数适用于增量备份,适用于不同文件或者目录进行比对然后备份
Avz相当于vzrtopgDl 生产参数:-avz或者是-vzrtopg
rsync同步指定目录
rsync使用–include参数与–exclude参数来实现同步指定目录,并且–exclude目录放在后面。
3.4rsync软件服务的工作模式
第一种工作模式:本地单个服务器上不同路径文件或目录下的数据的备份
演示:相当于cp
[root@client01 opt]# rsync -avz /opt/test01/opt/test02
sending incremental file list
test01
sent 75 bytes received 31 bytes 212.00 bytes/sec
total size is 4 speedup is 0.04
[root@client01 opt]# cat test0*
234
234
[root@client01 opt]# rsync -avz /opt/test02 /tmp/
sending incremental file list
test02
sent 75 bytes received 31 bytes 212.00bytes/sec
total size is 4 speedup is 0.04
[root@client01 opt]# cat /tmp/test02
234
第二种工作模式:不同服务器之间数据进行传输
演示:
Access viaremote shell: 远端 本地
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
本地 远端
1.借助ssh通道从远端主机拉取数据实例:
rsync -avzP -e 'ssh -p 52113'[email protected]:/tmp/ /tmp
语法说明:
1、-avz相当于-vzrtopgDl,表示同步时文件户目录属性不变,
2、-P显示同步的过程,可以用--progress替换
3、-e’ssh -p 52113’ 表示通过ssh传输数据,-p22可以省略
4、[email protected]:/tmp/ 远程主机的系统用户,地址,路径
5、/tmp本地的路径
注意tmp后面的/,否则把tmp目录及tmp目录下的所有东西都拉到本地/tmp下了
演示:推送,把本地的目录文件推送到远程服务器指定的目录下
[root@client01 opt]# ifconfig eth0|awk -F '[ :]+''NR==2{print $4}'
10.0.0.11
[root@client01 opt]# ll /opt/
total 12
drwxr-xr-x. 2 root root 4096 Mar 26 2015 rh
-rw-r--r--. 1 root root 4 Mar 12 18:04 test01
-rw-r--r--. 1 root root 4 Mar 12 18:04 test02
把本地目录/opt/下文件拉到远程服务器/opt/下
[root@client01 opt]# rsync -avz -e "ssh -p52113" /opt/ [email protected]:/opt/
[email protected]'s password:
sending incremental file list
test01
test02
sent 159 bytes received 51 bytes 60.00 bytes/sec
total size is 8 speedup is 0.04
[root@zabbix-server opt]# ifconfig eth0|awk -F '[:]+' 'NR==2{print $4}'
10.0.0.10
[root@zabbix-server opt]# ls
rh
[root@zabbix-server opt]# ll
total 12
drwxr-xr-x. 2 root root 4096 Mar 26 2015 rh
-rw-r--r--. 1 root root 4 Mar 12 18:04 test01
-rw-r--r--. 1 root root 4 Mar 12 18:04 test02
把远端服务器上的目录文件拉到本地服务器的/opt/目录下
[root@client01 opt]# ls
[root@client01 opt]# rsync -avz -e "ssh -p52113" [email protected]:/opt/ /opt/(显示传输的结果)
[root@client01 opt]# rsync -azP -e "ssh -p52113" [email protected]:/opt/ /opt/(显示信息同步的过程及传输时的进度信息)
[email protected]'s password:
receiving incremental file list
./
test01
test02
opt/
opt/test01
opt/test02
opt/rh/
rh/
sent 102 bytes received 334 bytes 34.88bytes/sec
total size is 16 speedup is 0.04
[root@client01 opt]# ls
opt rh test01 test02
[root@client01 opt]# pwd
/opt
以上例子都是增量选择性备份,而不是全部覆盖。如果本地文件独有的,不会被从外地拉过来的文件内容所替换。而且外部文件独有的也不会被推过去的本地文件所覆盖。
第三种工作模式
Access viarsync daemon:
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
[root@Backup ~]# vi /etc/rsyncd.conf
#Rsync server
#Rsync server
#created by jianwei 15:01 2009-6-5
##rsyncd.conf start##
uid = rsync它是对共享目录的权限/backup
gid = rsync
use chroot = no 程序出现问题就会开启 开启给个空目录就行
max connections = 2000 客户端连接数 可以同时连接
time out = 600超时的参数,
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock 锁文件
log file = /var/run/rsyncd.log 日志,发现错误时,看此日志分析错误
ignore errors 忽略错误
read only = false可读写
list = false 不让列表,不让看服务端有什么
hosts allow = 10.0.0.9/24 允许的网段,通过它,才可以连接访问服务器的/backup下的数据
hosts deny = 10.0.0.0/3拒绝的网段
auth users = rsync_backup 认证用户 ,虚拟用户,和系统没有关系
secrets file = /etc/rsync.password 存放用户和密码的文件
#######################################################
[backup] 模块
comment = backup server by jianwei 14:18 2012-1-13 注释
path = /backup 共享的目录,
rsync server 服务端配置步骤
1、vi /etc/rsyncd.conf
cat/etc/rsyncd.conf
2、创建用户和共享的目录/backup
useradd rsync -s /sbin/nologin -M
id rsync
mkdir /backup
chown -R rsync /backup
3、创建用户及密码文件
echo "rsync_backup:jianwei" >/etc/rsync.password
cat /etc/rsync.password
ll/etc/rsync.password
chmod 600 /etc/rsync.password
4、rsync --daemon 启动服务
ps -ef|grep rsync|grep -v grep netstat -lntup|grep rsync ss -lntup|grep rsync lsof -i :873
5、加入开机自动挂载
echo " rsync --daemon">>/etc/rc.local
cat /etc/rc.local
注意:服务端只能存放数据,相当于一个硬盘或U。它只具有存放数据的功能,其他什么都不能干。
Rsync 客户端配置(pull和push 都在客户端操作)
1、创建密码文件
echo jianwei >/etc/rsync.password
cat /etc/rsync.password
chmod 600 /etc/rsync.password
ls -l/etc/rsync.password
2、Rsync
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
rsync -avz /tmp/ [email protected]::backup--password-file=/etc/rsync.password
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
rsync -avz [email protected]::backup /tmp/ --password-file=/etc/rsync.password
注意:客户端可以向服务端存放数据(推push),也可以像服务端提取数据(拉pull)作用主要是服务端。
rsync -avz [email protected]::mhttongbu1 /tmp/ --password-file=/etc/passwd.txt
rsync -avz /tmp/ [email protected]::mhttongbu1--password-file=/etc/passwd.txt
rsync -avz /tmp/ rsync://[email protected]/backup--password-file=/etc/rsync.password
3.5Rsync守护进程服务传输排错思路
一、rsync服务端排错思路
1、查看rsync服务配置文件路径是否正确,正确的默认路径为/etc/rsyncd.conf
2、查看配置文件里hostallow,host deny,允许的ip网段是否是允许反问的ip网段
3、查看配置文件中path参数里的路径是否存在,权限是否正确,(正常应为配置文件中的UID参数对应的属主和组)
4、查看rsync服务是否启动。
5、查看防火墙和seLinux是否开启允许rsync服务通过,也可以考虑关闭
6、参看服务端rsync配置的密码文件是否为600的权限,密码文件格式是否正确,正确格式用户名:密码,文件路径和配置文件里的secrectfiles 参数对应。
如果是推送数据,要查看一下,配置文件rsyncd.conf中用户是否对模块下目录有可读写权限。
二、rsync客户端排错思想:
1、查看客户端rsync配置文件的密码文件是否为600的权限,密码格式是否正确,注意需要有密码,并且和服务端的密码五一致,
2、用telnet连接rsync服务器ip地址873端口,查看服务是否启动(可测试服务端防火墙是否阻挡)。Telnet 10.0.1.41 873
3、客户端执行命令时,rsync-avzP [email protected]::backup /tmp/ /tmp/ --password-file=/etc/rsync.password 此命令细节要记清楚。
3.6自我模拟排错实践:
1、密码设置错
[root@nfs01 tmp]# rsync -avz /tmp/rsync://[email protected]/backup --password-file=/etc/rsync.password
@ERROR: auth failed on module backup
rsync error: error startingclient-server protocol (code 5) at main.c(1503) [sender=3.0.6]
这是因为密码设置错了,检查一下客户端和服务端两端的密码/etc/rsync.password文件中密码是否一致。密码文件中,密码是不允许有多余空格的。
2、服务端的共享目录被删除
[root@nfs01 tmp]# rsync -avz /tmp/rsync://[email protected]/backup --password-file=/etc/rsync.password
@ERROR: chdir failed
rsync error: error starting client-server protocol(code 5) at main.c(1503) [sender=3.0.6]
出现这种错误说明服务端的共享目录被删除了,所以在服务端把删除的共享目录创建回来(但是共享目录中的数据全部丢失,实际工作中切记不能删除服务端的共享目录)
做法得有:mkdir /backup/ -p 只做到这一步是不行的,还会报错。
还必须得chown rsync.rsync /backup/才行。
服务端必须得有这两步:
root@backup /]# mkdir backup
[root@backup /]# chown -R rsync /backup/
rsync -avz/tmp/ rsync://[email protected]/backup--password-file=/etc/rsync.password
sending incremental file list
./
rsync: failed to set times on "." (inbackup): Operation not permitted (1)
a.txt
b.txt
c.txt
stu1
test.log
rsync: recv_generator: mkdir ".ICE-unix"(in backup) failed: Permission denied (13)
*** Skipping any contents from this faileddirectory ***
rsync: mkstemp ".a.txt.KD6GT3" (inbackup) failed: Permission denied (13)
rsync: mkstemp ".b.txt.MBzoKP" (in backup)failed: Permission denied (13)
rsync: mkstemp ".c.txt.QKA7AB" (inbackup) failed: Permission denied (13)
rsync: mkstemp ".stu1.Eh9Qrn" (in backup)failed: Permission denied (13)
rsync: mkstemp ".stu2.epUBi9" (in backup)failed: Permission denied (13)
sent 741 bytes received 186 bytes 618.00bytes/sec
total size is 1952 speedup is 2.11
rsync error: some files/attrs were not transferred(see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
出现以下这种错误跟上面的是问题是一样的,只不过是把/etc/rsyncd.conf配置文件中的
use chroot = no 改为了use chroot = yes
[root@nfs01 tmp]# rsync -avz rsync://[email protected]/backup /tmp/ --password-file=/etc/rsync.password
@ERROR: chroot failed
rsync error: error startingclient-server protocol (code 5) at main.c(1503) [receiver=3.0.6]
修改方法和上面的一样
3、客户端的/etc/rsync.password和服务端的/etc/rsync.password没有任何联系,只要和客户端rsync命令参数----password-file=/etc/rsync.password 中的路径对应即可。
4、服务端和客户端的/etc/rsync.password 密码文件权限不是600
[root@nfs01 tmp]# rsync -avz rsync://[email protected]/backup /tmp/ --password-file=/etc/rsync.password
password file must not be other-accessible
continuing without password file
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol(code 5) at main.c(1503) [receiver=3.0.6]
出现这种错误,原因是把服务端的/etc/rsync.password 密码文件权限给改了,不是600了(客户端密码文件权限是600)。
必须chmod 600 /etc/rsync.password 改回才行
[root@nfs01 tmp]# rsync -avz rsync://[email protected]/backup /tmp/ --password-file=/etc/rsync.password
password file must not be other-accessible
continuing without password file
Password: 此处出现提醒输入密码(原因是客户端的密码文件/etc/rsync.password
receiving incremental file list 权限不是600)
如果客户端和服务端密码都是600,就会自动完成数据的提取和备份
./
a.txt
b.txt
c.txt
stu1
stu2
stu3
stu4
stu5
test.log
sent 275 bytes received 631 bytes 201.33bytes/sec
total size is 3233 speedup is 3.57
5、客户端一切问题都正常但是配置文件中的path = /backup给#注释掉了
但是服务端[root@backup backup]# vi /etc/rsyncd.conf 配置文件稍作改动,客户端正常输出,但是不显示输出的文件,而且服务端的数据没有被提取到客户端/tmp/下
操作过程:
[root@nfs01 tmp]# rsync -avz rsync://[email protected]/backup /tmp/ --password-file=/etc/rsync.password
receiving incremental file list
./
sent 68 bytes received 161 bytes 152.67bytes/sec
total size is 21536 speedup is 94.04
[root@backup backup]# ls 服务端
a.txt b.txt c.txt stu1 stu2 stu3 stu4 stu5 test.log
[root@nfs01 tmp]# ls客户端
test.log
原因是:把配置文件中的path = /backup给#注释掉了,系统找不到传输数据的通道了,改回原来的就行
6.观察日志
[root@backup backup]# cat/var/log/rsyncd.log 定时任务的服务日志
3.7Rsync优点:
1、增量备份同步,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物)
2、远程shell通道模式,还可以加密传输(ssh),socket(daemon)需要加密传输,还可以利用***服务或者ipsec服务
Rsync缺点:
1、大量小文件同步的时候,比对时间较长,有时候,rsync进程会停止。
解决方法:a打包同步,b.drbd(文件系统同步复制block)
2、同步大文件,10G这样的文件有时也会有问题,中断。为完整同步前,是影藏文件,同步完成改为正常文件。
3、Rsync -avz--delete /tmp/ ........无差异同步
推:本地有,远端就有,本地没有,删除远端独有的
危险,把服务端备份的数据干掉,尽量不要用。如果要用,就先备份远端的数据再推送。
拉:远端的数据会替换本地的数据。把本地独有的数据删除。要用就先备份本地数据。