Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。Rstync软件适用于unix/linux/windows等多种操做系统平台。python
Rsync英文全称为Remotesynchronization,即远程同步。从软件的名称就能够看出来,Rsync具备可以使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能相似ssh带的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync能够增量拷贝。固然,Rsync还能够在本地主机的不通分区或目录之间全量及增量的复制数据,这又相似cp命令,但一样也优于cp命令,cp每次都是全量拷贝,而rsync能够增量拷贝。此外,利用Rsync还能够实现删除文件和目录功能,这又至关于rm命令。linux
一个rsync至关于scp,cp,rm,而且优于他们每个命令。算法
在同步备份数据时,默认状况下,Rsync经过其独特的”quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,固然也能够根据权限,属主等属性的变化同步,但须要制定相应的参数,甚至能够实现只同步一个文件里有变化的内容部分,因此,能够实现快速的同步备份数据。shell
Rsync2.x和rsync3.x差别
windows
# CentOS5,rsync2.x对比方法,把全部的文件对比一遍,而后进行同步。 # CentOS6,rsync3.x对比方法,一边对比差别,一边对差别的部分进行同步。
# 支持拷贝特殊文件如连接文件,设备等。 # 能够有排除指定文件或目录同步的功能,至关于打包命令tar的排除功能。 # 能够作到保持源文件或目录的权限、时间、软硬连接、属主、组等全部属性均不改变-p。 # 能够实现增量同步,既只同步发生变化的数据,所以数据传输效率很高。 # 可使用rcp,rsh,ssh等方式来配合传输文件(rsync自己对数据不加密)。 # 能够经过sockert(进程方式)传输文件和数据(服务端和客户端)。 # 支持匿名或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。 # 注意:须要注意拷贝的时候源目录加“/”和不加“/”的区别(加“/”表示只拷贝该目录之下的文件;不加“/”表示连该目录一块儿拷贝)
定时备份
安全
# 能够经过crond + rsync 来实现
实时备份
服务器
# 能够经过inotify(sersync)+ rsync来实现
做为客户端命令,经常使用参数以下
网络
# -avz --多个参数的集合 # -v, --verbose 详细模式输出,传输时的进度等信息 # -z, --compress 传输时进行压缩以提升传输效率,--compress-level=NUM可按级别压缩。 # -a,--archive 归档模式,表示以递归方式传输文件,并保持全部文件属性,等于-rtopgDl # -r,--recursive 对子目录以递归模式,即目录下全部目录有一样传输 # -t,--times,保持文件时间信息 # -o,--owner 保持文件属主信息 # -p,--perms 保持文件权限 # -g,--group 保持文件属组信息 # -P,--progress 显示同步的过程及传世时的进度等信息(大写的P) # -D,devices 保持设备文件信息 # -l,--links 保持软连接 # -e,--rsh=COMMAND 使用的信道协议,指替代rsh的shell程序。例如:ssh # -exclude=PATTERN指排斥不须要传输的文件模式 # --bwlimit=RATE 限速,默认是以kbit/s为单位 # --delete --删除(本地没有,远端也没有),让目标目录SRC和源目录数据DST一致,适用于两个目录彻底同样
Rsync的本地模式,即将本地系统的文件或目录从一个目录移动到另一个目录中,至关于一个系统命令来使用(不经常使用)。ssh
命令格式
socket
# rsync [OPTION...]SRC... [DEST]
Example
[root@jenkins data]# echo 1234 > test1.txt [root@jenkins data]# ls test1.txt [root@jenkins data]# rsync /data/test1.txt /data/test2.txt [root@jenkins data]# cat /data/test2.txt 1234
Rsync的远程shell模式,即将本地系统文件或目录从一台服务器传输向另一台服务器,相似于scp命令。既能够推送数据到其余服务器,也能够下拉文件到本地。(该模式也不经常使用)
命令格式
# Pull: rsync[OPTION...] [USER@]HOST:SRC... [DEST] # Push: rsync[OPTION...] SRC... [USER@]HOST:DEST
Example: 将一个文件传输到另外一台服务器
[root@client data]# rsync -avz /data/test1.txt root@39.108.140.0:/root/ root@39.108.140.0's password: sending incremental file list test1.txt sent 97 bytes received 35 bytes 37.71 bytes/sec total size is 5 speedup is 0.04 [root@server ~]# cat test1.txt 1234
Example: 将一台主机的文件下载到本地
[root@client data]# rsync -avz 39.108.140.0:/root/test1.txt /data/test3.txt root@39.108.140.0's password: receiving incremental file list test1.txt sent 43 bytes received 97 bytes 56.00 bytes/sec total size is 5 speedup is 0.04 [root@client data]# cat test3.txt 1234
加密传输(隧道传输)
Rsync的传输协议默认是不加密的明文传输,若是有加密传输文件的需求,能够自定义加密管道管道协议。使用参数:-e来指定相应的管道协议。
Example: 跨主机加密传输文件,指定ssh协议
[root@client data]# rsync -avz /etc/hosts -e 'ssh -p 22' root@39.108.140.0: root@39.108.140.0's password: sending incremental file list sent 43 bytes received 12 bytes 22.00 bytes/sec total size is 211 speedup is 3.84 # -e 指定加密协议以及协议端口号
限速传输
Rsync的传输默认是不限速的,传输时可能会占用很大的网络带宽,影响业务正常使用。可使用参数:-bwlimit来限制传输时的网络带宽
Example: 传输时限速为1M/s
[root@client data]# dd if=/dev/zero of=test bs=1M count=10 10+0 records in 10+0 records out 10485760 bytes (10 MB) copied, 0.00811283 s, 1.3 GB/s [root@client data]# seq 10 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1 # 不限速 [root@client data]# rsync -avz /data/test -e 'ssh -p 22' root@39.108.140.0:/data root@39.108.140.0's password: sending incremental file list test sent 10,293 bytes received 35 bytes 2,950.86 bytes/sec total size is 10,485,760 speedup is 1,015.27 # 限速 [root@client data]# rsync -avz /data/test -e 'ssh -p 22' --bwlimit=1 root@39.108.140.0:/data root@39.108.140.0's password: sending incremental file list test sent 10,293 bytes received 35 bytes 826.24 bytes/sec total size is 10,485,760 speedup is 1,015.27 # bwlimit的参数默认为1K bits/s
文件备份须要注意的事项
# 1. 备份须要考虑带宽限速(rsync,scp,ftp都有限速功能) # 2. 备份须要选择业务低谷
Daemon,即守护进程。该模式是在一台rsync服务器上安装并运行一个rsync的服务进程,其余的客户端经过rsync命令上传文件到服务器中。该模式是rsync最经常使用的功能,用来作数据的定时或者实时备份,下面来具体安装和介绍daemon模式。
节点名 | IP | 软件版本 | 硬件 | 网络 | 说明 |
---|---|---|---|---|---|
server | 39.108.140.0 | rsync-3.1.2 | 1C2G | 阿里云 | 测试环境 |
Client | 47.95.119.205 | rsync-3.1.2 | 1C2G | 阿里云 | 测试环境 |
[root@server data]# yum -y install rsync [root@server data]# rpm -qa |grep rsync rsync-3.1.2-10.el7.x86_64
修改/etc/rsyncd.conf
该配置文件时rsync服务器端默认的配置文件,该文件默认不存在,须要本身手动建立!填入内容以下:
cat rsyncd.conf uid = rsync # 配置用户,远端命令要使用rsync用户访问共享目录(访问目录的权限) gid = rsync # 配置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 = /data # 模块备份数据路径 ignore errors read only = false list = false hosts allow = 47.95.119.205,172.25.1.0/24 # 配置登陆权限,能够多个IP网段用逗号隔开 #hosts deny = 0.0.0.0/32 auth users = rsync_backup # 配置匿名服务登陆用户(访问服务的权限) secrets file = /etc/rsync.password # 配置匿名用户和密码文件
# 建立用户名为rsync的用户,只让其运行程序,不给其登陆系统的权限以及家目录 [root@server data]# useradd rsync -s /sbin/nologin -M [root@server data]# tail -1 /etc/passwd rsync:x:1001:1001::/home/rsync:/sbin/nologin
建立目录/data,并将其所属用户和用户组修改成rsync,由于程序须要用rsync用户来访问这个目录,若是rsync没有权限访问该目录,那么客户端也没法上传文件到备份数据目录。命令以下:
[root@server data]# mkdir /data/ -p [root@server data]# chown rsync:rsync /data/ [root@server data]# ls -ld /data/ drwxr-xr-x 2 rsync rsync 4096 Jul 29 23:12 /data/
/etc/rsync.password
rsync有一个重要的特性,就是可使用一个虚拟的用户(不是实际存在的用户)来访问系统服务。为了使用这个功能,咱们须要建立一个虚拟的用户文件,该文件已经在rsyncd.conf配置文件里面的secrets file定义好了,是/etc/rsync.password文件
[root@server data]# echo "rsync_backup:youmen" > /etc/rsync.password [root@server data]# cat /etc/rsync.password rsync_backup:youmen [root@server data]# chmod 600 /etc/rsync.password # 文件建立完成以后,须要修改文件的权限属性为600,不然程序没法正常运行
[root@server data]# echo '/usr/bin/rsync --daemon' >> /etc/rc.local [root@server data]# tail -1 /etc/rc.local /usr/bin/rsync --daemon
/etc/rsync.password
相对于服务器端来讲,客户端的配置很简单,只须要建立一个密码文件就好了。这个密码文件也是默认不存在,须要手动建立。
[root@client data]# echo "youmen" > /etc/rsync.password [root@client data]# cat /etc/rsync.password youmen [root@client data]# chmod 600 /etc/rsync.password [root@client data]# ls -l /etc/rsync.password -rw------- 1 root root 7 Jul 29 23:29 /etc/rsync.password
[root@server data]# rsync --daemon [root@server data]# ss -atnlp |grep 873 LISTEN 0 5 *:873 *:* users:(("rsync",pid=25230,fd=3)) LISTEN 0 5 :::873 :::* users:(("rsync",pid=25230,fd=5)) # 重启 [root@server data]# pkill rsync [root@server data]# rsync --daemon
命令格式
# 下载: rsync [OPTION...] [USER@]HOST::SRC... [DEST] # rsync [OPTION...]rsync://[USER@]HOST[:PORT]/SRC... [DEST] # 上传: rsync [OPTION...] SRC... [USER@]HOST::DEST # rsync [OPTION...] SRC...rsync://[USER@]HOST[:PORT]/DEST
客户端
[root@client data]# seq 10 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1 [root@client data]# ls 10.dat 2.dat 4.dat 6.dat 8.dat 1.dat 3.dat 5.dat 7.dat 9.dat
服务端
[root@server data]# seq 2 | xargs -i dd if=/dev/zero of={}.dat bs=1024 count=1 1+0 records in 1+0 records out 1024 bytes (1.0 kB) copied, 0.000147976 s, 6.9 MB/s 1+0 records in 1+0 records out 1024 bytes (1.0 kB) copied, 9.5039e-05 s, 10.8 MB/s [root@server data]# ls 1.dat 2.dat
Example1: 服务端免密同步文件到客户端
[root@client ~]# rsync -auv --password-file=/etc/rsync.password rsync_backup@39.108.140.0::backup /data receiving incremental file list ./ 1.dat 2.dat sent 69 bytes received 2,240 bytes 1,539.33 bytes/sec total size is 2,048 speedup is 0.89
Example: 客户端文件同步到服务端
[root@client data]# rsync -avz --delete /data/ rsync_backup@39.108.140.0::backup --password-file=/etc/rsync.password sent 556 bytes received 921 bytes 2,954.00 bytes/sec total size is 10,240 speedup is 6.93 rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
# 一、支持数据增量备份,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物); # 二、远程SHELL通道模式能够加密(SSH)传输,socket(daemon)模式须要加密传输可使用×××服务或者ipsec服务;
# 一、大量小文件同步的时候,时间比较长,有的时候,rsync进程可能会中止; # 二、同步大文件,10G这样的大文件有时也会有问题,中途可能会中断。 # 三、未完整同步前,文件默认是隐藏的,能够经过续传等参数实现传输。 # 注意: # 一、模式2和模式3不能结合使用 # 二、注意源目录后面加“/”与没有的区别(有“/”表示只同步该目录下的数据;没有表示连整个目录一块儿同步)