Rsync服务
Rsync介绍
Rsync是一款开源的、快速的、多功能的、可实现全量?及增量?的本地或远程数据同步备份的优秀工具
Rsync官网https://rsync.samba.org/
Rsync英文全称为Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据数据快速复制同步镜像、远程备份的功能、远程备份的功能,这个功能类似ssh带的scp命令,但又优先于scp命令的功能、scp每次都是全量拷贝、而rsync可以增量拷贝,当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优先cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝
利用rsync还可以实现删除文件和目录的功能,这又相当rm命令。
在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或者目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所有,可以实现快速的同步备份数据。
Rsync的特性
rsync的特性如下
支持拷贝特殊文件如链接文件,设备等。
可以有排除(tar?find?)指定文件或目录同步的功能,相当于打包命令tar的排除功能
可以做到保持源文件或目录的权限、时间、软硬链接、属主、组等使用属性均不改变-p
可以实现增量同步,即只同步发生变化的数据,因此数据传输效率很高
可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)
可以通过socket(进程方式)传输文件和数据(服务端和客户端)
支持匿名的认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像
rsync也相当于ls命令
rsync优缺点
rsync缺点
1、大量小文件时候同步的时候、比对时间较长,有的时候,同步过程中,rsync进程可能会停止、僵死
2、同步大文件、10G这样的大文件有时也会问题、中断。未完整同步前,是隐藏文件,可以通过续传(--partial)等参数实现传输
一次性远程拷贝可以用scp,大量小文件要打成一个包再拷贝。
rsync优点
增量备份,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物)。
远程SHELL通道模式还可以加密(SSH)传输,socket(daemon)需要加密传输,可以利用vpn服务或ipsec服务
实验
1、实验环境
[root@backup ~]# cat /etc/redhat-release CentOS release 6.8 (Final) [root@backup ~]# uname -m x86_64 [root@backup ~]# uname -r 2.6.32-642.el6.x86_64 [root@backup ~]# rsync --version rsync version 3.0.6 protocol version 30
2、rsync语法介绍
Local: rsync [OPTION...] SRC... [DEST] Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST 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
3、Rsync详细参数说明
-v, --verbose #详细模式输出 -q, --quiet #精简输出模式 -c, --checksum #打开校验开关,强制对文件传输进行校验 -a, --archive #归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD -r, --recursive #对子目录以递归模式处理 -R, --relative #使用相对路径信息 -b, --backup #创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。 --backup-dir #将备份文件(如~filename)存放在在目录下。 -suffix=SUFFIX #定义备份文件前缀 -u, --update #仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件) -l, --links #保留软链结 -L, --copy-links #想对待常规文件一样处理软链结 --copy-unsafe-links #仅仅拷贝指向SRC路径目录树以外的链结 --safe-links #忽略指向SRC路径目录树以外的链结 -H, --hard-links #保留硬链结 -p, --perms #保持文件权限 -o, --owner #保持文件属主信息 -g, --group #保持文件属组信息 -D, --devices #保持设备文件信息 -t, --times #保持文件时间信息 -S, --sparse #对稀疏文件进行特殊处理以节省DST的空间 -n, --dry-run #现实哪些文件将被传输 -W, --whole-file #拷贝文件,不进行增量检测 -x, --one-file-system #不要跨越文件系统边界 -B, --block-size=SIZE #检验算法使用的块尺寸,默认是700字节 -e, --rsh=COMMAND #指定使用rsh、ssh方式进行数据同步 --rsync-path=PATH #指定远程服务器上的rsync命令所在路径信息 -C, --cvs-exclude #使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件 --existing #仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件 --delete #删除那些DST中SRC没有的文件 --delete-excluded #同样删除接收端那些被该选项指定排除的文件 --delete-after #传输结束以后再删除 --ignore-errors #及时出现IO错误也进行删除 --max-delete=NUM #最多删除NUM个文件 --partial #保留那些因故没有完全传输的文件,以是加快随后的再次传输 --force #强制删除目录,即使不为空 --numeric-ids #不将数字的用户和组ID匹配为用户名和组名 --timeout=TIME #IP超时时间,单位为秒 -I, --ignore-times #不跳过那些有同样的时间和长度的文件 --size-only #当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间 --modify-window=NUM #决定文件是否时间相同时使用的时间戳窗口,默认为0 -T --temp-dir=DIR #在DIR中创建临时文件 --compare-dest=DIR #同样比较DIR中的文件来决定是否需要备份 -P 等同于 --partial --progress #显示备份过程 -z, --compress #对备份的文件在传输时进行压缩处理 --exclude=PATTERN #指定排除不需要传输的文件模式 --include=PATTERN #指定不排除而需要传输的文件模式 --exclude-from=FILE #排除FILE中指定模式的文件 --include-from=FILE #不排除FILE指定模式匹配的文件 --version #打印版本信息 --address #绑定到特定的地址 --config=FILE #指定其他的配置文件,不使用默认的rsyncd.conf文件 --port=PORT #指定其他的rsync服务端口 --blocking-io #对远程shell使用阻塞IO -stats #给出某些文件的传输状态 --progress #在传输时现实传输过程 --log-format=formAT #指定日志文件格式 --password-file=FILE #从FILE中得到密码 --bwlimit=KBPS #限制I/O带宽,KBytes per second -h, --help #显示帮助信息
本地备份相当与cp
[root@backup ~]# rsync /etc/hosts /tmp/ [root@backup ~]# ll /tmp/ total 4 -rw-r--r--. 1 root root 177 2017-03-09 11:56 hosts
通过远程shell访问
推的实验
[root@backup ~]# hostname backup [root@backup ~]# rsync -avz -e 'ssh -p 22' /etc/hosts root@172.16.1.31:/tmp/ root@172.16.1.31's password: sending incremental file list hosts sent 138 bytes received 31 bytes 14.70 bytes/sec total size is 177 speedup is 1.05 查看 [root@nfs01 ~]# hostname nfs01 [root@nfs01 ~]# ll /tmp/ total 4 -rw-r--r--. 1 root root 177 2017-03-08 15:44 hosts
拉的实验
[root@backup ~]# rsync -avz -e 'ssh -p 22' root@172.16.1.31:/etc/skel/ /tmp/ root@172.16.1.31's password: receiving incremental file list ./ .bash_logout .bash_profile .bashrc sent 71 bytes received 456 bytes 70.27 bytes/sec total size is 318 speedup is 0.60 [root@backup ~]# ll -a /tmp/ total 24 drwxr-xr-x. 3 root root 4096 2016-12-31 19:58 . dr-xr-xr-x. 24 root root 4096 2017-03-08 18:13 .. -rw-r--r--. 1 root root 18 2016-05-11 07:21 .bash_logout -rw-r--r--. 1 root root 176 2016-05-11 07:21 .bash_profile -rw-r--r--. 1 root root 124 2016-05-11 07:21 .bashrc drwxrwxrwt. 2 root root 4096 2017-03-08 10:28 .ICE-unix
访问通过rsync守护进程
创建rsync配置文件,并对配置文件内容信息进行编辑
[root@backup ~]# vim /etc/rsyncd.conf 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 [backup] path = /backup/ 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
创建负责管理rsync服务的虚拟用户
[root@backup ~]# useradd -s /sbin/nologin -M rsync [root@backup ~]# id rsync uid=501(rsync) gid=501(rsync) groups=501(rsync)
创建rsync服务备份数据的管理目录,并进行相应的授权,可以让虚拟用户可以管理
[root@backup ~]# mkdir -p /backup [root@backup ~]# chown -R rsync.rsync /backup/ [root@backup ~]# ll -d /backup/ drwxr-xr-x 2 rsync rsync 4096 Mar 8 18:10 /backup/
创建密码文件 并修改权限
[root@backup ~]# echo 'rsync_backup:123456' >/etc/rsync.password [root@backup ~]# ll /etc/rsync.password -rw-r--r-- 1 root root 20 Mar 8 18:14 /etc/rsync.password #配置rsync服务安全相关的密钥文件为600权限 [root@backup ~]# chmod 600 /etc/rsync.password
启动测试
#启动服务 [root@backup ~]rsync --daemon #关闭服务 [root@backup mnt]# killall rsync [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup Password: sending incremental file list hosts sent 133 bytes received 27 bytes 35.56 bytes/sec total size is 176 speedup is 1.10
在nfs01上创建密码文件,访问的时候不用密码
[root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list hosts sent 133 bytes received 27 bytes 106.67 bytes/sec total size is 176 speedup is 1.10 [root@backup ~]# ll /backup/ total 4 -rw-r--r--. 1 rsync rsync 176 2017-03-08 15:18 hosts
创建多个模块
[root@backup ~]# vim /etc/rsyncd.conf pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log 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/ ignore errors [nfsbackup] path = /nfsbackup/ [root@backup ~]# rsync --daemon [root@backup ~]# mkdir /nfsbackp [root@nfs01 ~]# rsync -avz /etc/hosts rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password sending incremental file list hosts sent 133 bytes received 27 bytes 320.00 bytes/sec total size is 176 speedup is 1.10 [root@backup ~]# ll /nfsbackup/ total 4 -rw-r--r--. 1 rsync rsync 176 2017-03-08 15:18 hosts
指定排除不需要传输的文件
#创建测试环境 [root@nfs01 ~]# mkdir /data [root@nfs01 ~]# cd /data/ [root@nfs01 data]# mkdir {a..d} [root@nfs01 data]# touch a/1 b/2 c/3 d/4 #查看一下 [root@nfs01 data]# tree . ├── a │ └── 1 ├── b │ └── 2 ├── c │ └── 3 └── d └── 4 #排除a目录,加参数--exclude= [root@nfs01 data]# rsync -avz -P --exclude=a /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list ./ b/ b/2 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=2/7) c/ c/3 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=1/7) d/ d/4 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=0/7) sent 204 bytes received 80 bytes 568.00 bytes/sec total size is 0 speedup is 0.00 rsync#服务端查看 [root@backup backup]# ll /backup/ total 12 drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 b drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 c drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 d
指定排除多个不需要传输的文件
#把排除的内容写进去 [root@nfs01 data]# vim /tmp/paichu.txt a b #加参数--exclude-from= [root@nfs01 data]# rsync -avz -P --exclude-from=/tmp/paichu.txt /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list ./ c/ c/3 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1/5) d/ d/4 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=0/5) sent 147 bytes received 57 bytes 408.00 bytes/sec total size is 0 speedup is 0.00 #查看一下 [root@backup backup]# ll total 8 drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 c drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 d
--delete参数
#1、推的过程中加上delete参数 [root@nfs01 data]# rsync -avz -P --delete /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list ./ a/ a/1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=3/9) b/ b/2 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=2/9) c/ c/3 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=1/9) d/ d/4 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=0/9) sent 265 bytes received 103 bytes 105.14 bytes/sec total size is 0 speedup is 0.00 #2、备份服务器上ls -l 查看一下 [root@backup backup]# ll total 16 drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 a drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 b drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 c drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 d #3、删除nfs01上的a目录 [root@nfs01 data]# rm -r a/ rm: descend into directory `a'? y rm: remove regular empty file `a/1'? y rm: remove directory `a'? y [root@nfs01 data]# ll total 12 drwxr-xr-x. 2 root root 4096 2017-03-09 16:06 b drwxr-xr-x. 2 root root 4096 2017-03-09 16:06 c drwxr-xr-x. 2 root root 4096 2017-03-09 16:06 d #4、再次执行一下这个命令 [root@nfs01 data]# rsync -avz -P --delete /data/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password sending incremental file list ./ deleting a/1 deleting a/ sent 95 bytes received 14 bytes 72.67 bytes/sec total size is 0 speedup is 0.00 #5、再查看backup这个服务器,他这边也没了 [root@backup backup]# ll total 12 drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 b drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 c drwxr-xr-x. 2 rsync rsync 4096 2017-03-09 16:06 d

浙公网安备 33010602011771号