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
posted @ 2018-07-06 16:39  杨灏  阅读(243)  评论(0)    收藏  举报