大家好,又见面了,我是你们的朋友全栈君。
Rsync是一款开源的、快速的、多功能的、可实现全量及增量(全量备份是指全部备份,增量备份是在上一次备份的基础上只备份更新的内容)的本地货远程数据同步备份的优秀工具。Rsync软件适用于unix/linux/windows等多种操作系统平台。
官网:http://www.samba.org/ftp/rsync/rsync.html
Rsync英文全称为Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似ssh带的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
利用Rsync还可以实现删除文件和目录的功能,这又相当于rm命令!
一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。
在同步备份数据时,默认情况下,Rsync通过其独特的“quick check’算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。
提示:传统的cp,scp工具拷贝每次均为完整的拷贝,而rsync除了可以完整拷贝外,还具备增量拷贝的功能,因此,从同步数据的性能及效率上,Rsync更胜一筹。
CentOS5,rsync2.x 比对方法,把所有的文件比对一遍,然后进行同步。
CentOS6,rysnc3.x 比对方法,一边比对差异,一边对差异的部分进行同步。
rsync –version可以查看当前安装rsync的版本
全网服务器数据备份解决方案提出及负责实施
1、Local: rsync [OPTION...] SRC... [DEST]
2、Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
3、Access via rsync 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
参数 | 含义 |
---|---|
-v,–verbose | 详细模式输出,传输时的进度等信息 |
-z,–compress | 传输时进行压缩以提高传输效率,–compress-level=NUM可按级别压缩 |
-a,–archive | 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl |
-r,–recursive | 对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r |
-t,–times | 保持文件时间信息 |
-o,–owner | 保持文件属主信息 |
-p,-perms | 保持文件权限 |
-g,–group | 保持稳健属组信息 |
-P,–progress | 显示同步的过程及传输时的进度等信息 |
-D,–devices | 保持设备文件信息 |
-l,–links | 保留软链接 |
-e,–rsh=COMMAND | 使用的信道协议,指定替代rsh的shell程序。 例如:ssh –exclude=PATTERN指定排除不需要传输的文件模式(和tar参数一样) –exclude-from=file(文件名所在目录文件,和tar参数一样) –bwlimit=RATE limit socket I/O bandwidth (案例:某DBA做数据同步,导致用户无法访问网站) rsync、scp、ftp都有限速的功能 |
注意:备份的时候尽量在晚上或者选择业务并发访问小的时候,考虑是否限速 |
[root@backup ~]# cp /etc/hosts /tmp/
[root@backup ~]# rsync /etc/hosts /mnt/hosts
[root@backup ~]# cat /mnt/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
rsync也可以保持属性拷贝
写定时任务的时候可以把-v参数去掉,不输出信息
[root@backup ~]# rsync -vzrtopg /etc/hosts /var
sending incremental file list
hosts
sent 124 bytes received 31 bytes 310.00 bytes/sec
total size is 158 speedup is 1.02
[root@backup ~]# cat /var/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
rsync保持对端目录和当前目录一致
[root@backup ~]# ls /mnt/
hosts
[root@backup ~]# mkdir /tmp1
[root@backup ~]# rsync -avz --delete /tmp1/ /mnt/
sending incremental file list
./
deleting hosts
sent 29 bytes received 15 bytes 88.00 bytes/sec
total size is 0 speedup is 0.00
[root@backup ~]# ll /mnt/
总用量 0
说明:
rsync -az /tmp1/ /mnt/
# 若/tmp1后边不加斜线,则会将tmp1目录给及目录内容拷贝过去
# 若/tmp1/ 后边加了斜线,则会将tmp1目录下的内容给拷贝过去,而不会拷贝tmp1目录
[root@backup ~]# rsync -avz /etc/hosts -e 'ssh -p 22' root@192.168.90.31:/mnt
The authenticity of host '192.168.90.31 (192.168.90.31)' can't be established.
RSA key fingerprint is f1:16:60:e0:a2:3c:40:44:0b:3d:dd:54:52:7e:45:55.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.90.31' (RSA) to the list of known hosts.
Nasty PTR record "192.168.90.31" is set up for 192.168.90.31, ignoring
root@192.168.90.31's password:
sending incremental file list
hosts
sent 124 bytes received 31 bytes 28.18 bytes/sec
total size is 158 speedup is 1.02
[root@nfs01 ~]# ls /mnt/
hosts
调整ssh配置文件,可以关闭ssh访问时提示信息的出现,加快访问速度
#vim /etc/ssh/ssh_config 把下面两行注释去掉
GSSAPIAuthentication no
GSSAPITrustDNS no
保存退出,重启sshd服务,再次测试
[root@backup ~]# rsync -avz /etc/hosts -e 'ssh -p 22' root@192.168.90.31:/mnt
root@192.168.90.31's password:
sending incremental file list
sent 30 bytes received 12 bytes 12.00 bytes/sec
total size is 158 speedup is 3.76
daemon模式是以守护进程(socket)的方式传输数据(熟练掌握部署服务) 把daemon搭载备份服务器上,客户端直接推送到备份服务器上就行
配置服务器端backup
手动创建rsync配置文件/etc/rsyncd.conf(默认是不存在的)
#vim /etc/rsyncd.conf
#rsync_config_________________start
#created by rsq
##rsyncd.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 #不能列表
hosts allow = 192.168.90.0/24 #允许哪些机器可以连
#host deny = 0.0.0.0/32
#拒绝哪些机器连,四个0表示谁都可以过来,allow之间最好只留一个
auth users = rsync_backup #虚拟用户,独立于系统用户之外的虚拟用户
secrets file = /etc/rsync.password #虚拟账号里面对应的用户和密码
#rsync_config_________________end
手动创建所需要的用户和目录文件
[root@backup ~]# useradd rsync -s /sbin/nologin -M
rsync:x:501:501::/home/rsync:/sbin/nologin
[root@backup ~]# tail -1 /etc/passwd
rsync:x:501:501::/home/rsync:/sbin/nologin
启动服务
[root@backup ~]# rsync --daemon
[root@backup ~]# ps -ef | grep rsync | grep -v grep
root 5970 1 0 22:34 ? 00:00:00 rsync --daemon
创建backup目录并修改属主和属组
[root@backup ~]# mkdir /backup
[root@backup ~]# chown rsync.rsync /backup/
[root@backup ~]# ll -d /backup/
drwxr-xr-x. 2 rsync rsync 4096 1月 24 22:35 /backup/
编辑虚拟用户账号密码文件并修改文件权限位600
[root@backup ~]# vim /etc/rsync.password
rsync_backup:123456
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ls -l /etc/rsync.password
-rw-------. 1 root root 20 1月 24 22:43 /etc/rsync.password
[root@backup ~]# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 5970 root 4u IPv4 29607 0t0 TCP *:rsync (LISTEN)
rsync 5970 root 5u IPv6 29608 0t0 TCP *:rsync (LISTEN)
加入开机自启动
[root@backup ~]# echo "/usr/bin/rsync --daemon" >>/etc/rc.local
[root@backup ~]# tail -1 /etc/rc.local
/usr/bin/rsync --daemon
配置客户端Client
先检查是否装有rsync服务,没有的话yum安装一下
[root@nfs01 ~]# rpm -qa | grep rsync
rsync-3.0.6-12.el6.x86_64
创建虚拟用户密码文件,只需要添加密码即可
#vim /etc/rsync.password
123456
修改密码文件权限位600
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# ls -l /etc/rsync.password
-rw-------. 1 root root 7 1月 24 23:06 /etc/rsync.password
创建客户端临时备份目录
[root@nfs01 ~]# mkdir -p /backup
[root@nfs01 ~]# cd /backup
[root@nfs01 backup]# touch stu{01..100}
[root@nfs01 backup]# ls
stu001 stu011 stu021 stu031 stu041 stu051 stu061 stu071 stu081 stu091
stu002 stu012 stu022 stu032 stu042 stu052 stu062 stu072 stu082 stu092
...
客户端测试,把本地/backup目录下的文件推送到备份服务器上的/backup目录下
法一:
[root@nfs01 backup]# rsync -avz /backup/ rsync_backup@192.168.90.41::backup/ --password-file=/etc/rsync.password
#配置文件模块名[backup]
sending incremental file list
./
stu001
stu002
stu003
stu004
......
stu098
stu099
stu100
sent 4427 bytes received 1911 bytes 12676.00 bytes/sec
total size is 0 speedup is 0.00
没出现errors即成功
去服务器端查看客户端是否备份成功
[root@backup ~]# ls /backup/
stu001 stu011 stu021 stu031 stu041 stu051 stu061 stu071 stu081 stu091
stu002 stu012 stu022 stu032 stu042 stu052 stu062 stu072 stu082 stu092
...
法二:
先删除备份服务器/backup目录下内容
[root@backup ~]# rm -f /backup/*
[root@backup ~]# ls /backup/
rsync传输文件
[root@nfs01 ~]# rsync -avz /backup/ rsync://rsync_backup@192.168.90.41/backup/--password-file=/etc/rsync.password
sending incremental file list
./
stu001
stu002
stu003
stu004
......
stu098
stu099
stu100
sent 4427 bytes received 1911 bytes 12676.00 bytes/sec
total size is 0 speedup is 0.00
去备份服务器上查看是否有东西备份成功
[root@backup ~]# ls /backup/
stu001 stu011 stu021 stu031 stu041 stu051 stu061 stu071 stu081 stu091
stu002 stu012 stu022 stu032 stu042 stu052 stu062 stu072 stu082 stu092
...
若修改为完配置文件后尽量重启(测试是好像不重启也可以生效)
[root@backup ~]# pkill rsync
[root@backup ~]# lsof -i :873
[root@backup ~]# rsync --daemon
[root@backup ~]# netstat -lntup |grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 6884/rsync
tcp 0 0 :::873 :::* LISTEN
把服务器端的目录给删除,客户端在备份的时候会出现以下错误,创建目录即可
[root@nfs01 ~]# rsync -avz /backup/ rsync://rsync_backup@192.168.90.41/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]
创建完之后客户端在备份的时候会出现以下错误,提示权限不够,修改目录属主和属组都为rsync即可
[root@nfs01 ~]# rsync -avz /backup/ rsync://rsync_backup@192.168.90.41/backup/ --password-file=/etc/rsync.password
sending incremental file list
./
rsync: failed to set times on "." (in backup): Operation not permitted (1)
......
rsync: mkstemp ".stu099.gP8pYC" (in backup) failed: Permission denied (13)
rsync: mkstemp ".stu100.7ucTza" (in backup) failed: Permission denied (13)
sent 4427 bytes received 1911 bytes 12676.00 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code
23) at main.c(1039) [sender=3.0.6]
[root@backup ~]# chown rsync.rsync -R /backup/
[root@backup ~]# ll -d /backup/
drwxr-xr-x. 2 rsync rsync 4096 1月 25 04:24 /backup/
删除服务端用户rsync,客户端在备份的时候会出现以下错误,创建用户即可
useradd rsync -s /sbin/nologin -M
[root@nfs01 ~]# rsync -avz /backup/ rsync://rsync_backup@192.168.90.41/backup/ --password-file=/etc/rsync.password
@ERROR: invalid uid rsync
rsync error: error starting client-server protocol (code 5) at main.c(1503)
[sender=3.0.6]
模拟客户端错误,修改/etc/rsync.password配置文件,在第一行后边追加一个空格,再测试会有以下错误
[root@nfs01 ~]# rsync -avz /backup/ rsync://rsync_backup@192.168.90.41/backup/ --password-file=/etc/rsync.password
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1503)
[sender=3.0.6]
排错必备思想:
rsync服务端排错思路:
rsync客户端排错思路:
rsync -avzP rsync_backup@192.168.90.41::backup/test /test/ --password-file=/etc/rsync.password
此命令的细节要记清楚,尤其是192.168.90.41::backup/test/处的双冒号和其后的backup为配置文件中定义的模块名称。
可以自我模拟错误,增长经验。[root@backup ~]# cp /etc/rsyncd.conf{,.bak} #配置文件做备份
[root@backup ~]# vim rsyncd.conf #追加以下内容
[oldboy]
path = /oldboy
ignore errors
read only = false
list = false
hosts allow = 192.168.90.0/24
#host deny = 0.0.0.0/32
#auth users = rsync_backup
#secrets file = /etc/rsync.password
[root@backup ~]# mkdir /oldboy
[root@backup ~]# chown -R rsync.rsync /oldboy/
客户端测试
[root@nfs01 ~]# rsync -avz /backup/ rsync://rsync_backup@192.168.90.41/oldboy/ --password-file=/etc/rsync.password
[root@backup ~]# ls /oldboy/
stu001 stu011 stu021 stu031 stu041 stu051 stu061 stu071 stu081 stu091
stu002 stu012 stu022 stu032 stu042 stu052 stu062 stu072 stu082 stu092
...
工作中多模块使用可以修改服务器配置文件如下,方便:
#rsync_config_________________start
#created by rsq
##rsyncd.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 = 192.168.90.0/24
host deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup] #模块1
path = /backup/
[oldboy] #模块2
path = /oldboy
#rsync_config_________________end
客户端测试从备份服务器上拉取备份内容
备份服务器上
[root@backup backup]# ll
总用量 0
[root@backup backup]# touch {a..e}
[root@backup backup]# ls
a b c d e
客户端上
[root@nfs01 ~]# rsync -avz rsync_backup@192.168.90.41::backup/ /backup/ --password-file=/etc/rsync.password
receiving incremental file list
./
a
b
c
d
e
sent 162 bytes received 328 bytes 980.00 bytes/sec
total size is 0 speedup is 0.00
#排除单个文件
服务器端删除/backup目录下的所有内容,由客户端推送
[root@backup backup]# ls
a b c d e
[root@backup backup]# rm -f ./*
[root@backup backup]# ls
客户端推送当前/backup文件下内容,可以排除某个文件( – -exclude=)
[root@nfs01~]# ls /backup
a b c d e
[root@nfs01 ~]# rsync -avz --exclude=a /backup/ rsync_backup@192.168.90.41::backup/ --password-file=/etc/rsync.password
sending incremental file list
./
b
c
d
e
sent 205 bytes received 87 bytes 194.67 bytes/sec
total size is 0 speedup is 0.00
服务器端查看,可以发现除了a文件外都推送过来了
[root@backup backup]# ls
b c d e
排除多个文件
rsync -avz --exclude={a,b} /backup/ rsync_backup@192.168.90.41::backup/ --password-file=/etc/rsync.password
rsync -avz --exclude=a --exclude=b /backup/ rsync_backup@192.168.90.41::backup/ --password-file=/etc/rsync.password
rsync -avz --exclude={a..e} /backup/ rsync_backup@192.168.90.41::backup/ --password-file=/etc/rsync.password
文件排除
rsync -avz --exclude={a..e} /backup/ rsync_backup@192.168.90.41::backup/ --password-file=/etc/rsync.password
也可以在服务端排除修改配置文件参数(服务端排除不灵活)
exclude = a b c d
无差异同步(有缺点,若目标目录下有其它内容会把多余的内容给删除掉,及无差异同步)
rsync -avz --delete /backup/ rsync_backup@192.168.90.41::backup/ --password-file=/etc/rsync.password
1、local:rsync(cp、rm)
2、通道模式:
rsync -avzP -e 'ssh -p 22' /etc root@192.168.90.41:/tmp
一般配合ssh-key免密钥使用,可结合定时任务使用
3、daemon模式
内网不需要,加密性能有损失 若跨机房使用备份,即跨内网,建议使用rsync+vpn(pptp,openvpn、ipsec)
4、rsync相关参考资料
http://rsync.samba.org/ 客户端命令帮助 man rsync 服务端配置帮助 man rsyncd.conf http://www.samba.org/ftp/rsync/rsync.html http://www.samba.org/ftp/rsync/rsyncd.conf.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/182438.html原文链接:https://javaforall.cn