一、rsync 软件介绍

1 什么是rsync

rsync 是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。

http://www.samba.org/ftp/rsync/rsync.html

全量:将全部数据,进行传输覆盖

增量:只传输差异部分的数据

2 实现增量复制的原理

Rsync通过其独特的“quick check”算法,实现增量传输数据

  1. [root@backup ~]#man rsync
  2. Rsync  finds  files  that  need  to  be transferred using a “quick check” algorithm (by default)  that  looks  for  files  that  have changed  in  size  or  in  last-modified time.  Any changes in the other preserved attributes (as requested by options) are  made  on the  destination file directly when the quick check indicates that the file’s data does not need to be updated.
复制代码

在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。

centos 5 rsync 2.x 先比对再同步,速度较慢

centos 6 rsync 3.x 一边比对,一边对差异部分进行同步

软件版本:

  1. [root@backup ~]#man rsync
  2. Rsync  finds  files  that  need  to  be transferred using a “quick check” algorithm (by default)  that  looks  for  files  that  have changed  in  size  or  in  last-modified time.  Any changes in the other preserved attributes (as requested by options) are  made  on the  destination file directly when the quick check indicates that the file’s data does not need to be updated.
复制代码

3 rsync 软件功能介绍

类似于 cp 命令 -- 实现本地备份传输数据

类似于scp 命令 -- 远程备份传输数据

类似于 rm 命令 -- 实现无差异同步备份

类似于 ls 命令 -- 本地文件信息查看

rsync 命令属于1 v 4 的命令

3.1 rsync == cp
  1. [root@backup ~]# cp -a  /etc/hosts /tmp/
  2. [root@backup ~]# ls /tmp/hosts
  3. [root@backup ~]# \rm /tmp/hosts
  4. [root@backup ~]# rsync  /etc/hosts /tmp/
  5. [root@backup ~]# ls /tmp/hosts
  6. /tmp/hosts
复制代码

3.2 rsync == scp

#使用scp实现

#检查对端服务器目标位置上是否有该文件

  1. [root@nfs01 ~]# ls /tmp/hosts
  2. ls: cannot access /tmp/hosts: No such file or directory
复制代码

#从本地拷贝到远端服务器上

  1. [root@backup ~]# ls /tmp/hosts
  2. /tmp/hosts
  3. [root@backup ~]# scp -rp /etc/hosts 10.0.0.31:/tmp/
  4. The authenticity of host '10.0.0.31 (10.0.0.31)' can't be established.
  5. RSA key fingerprint is d3:41:bb:0d:43:88:da:a3:2c:e8:36:91:11:c9:e4:9c.
  6. Are you sure you want to continue connecting (yes/no)? yes
  7. Warning: Permanently added '10.0.0.31' (RSA) to the list of known hosts.
  8. root@10.0.0.31's password:
  9. hosts                                           100%  357     0.4KB/s   00:00
复制代码

#检查远端服务器上的结果

  1. [root@nfs01 ~]# ls /tmp/hosts
  2. /tmp/hosts
复制代码

#使用rsync 实现

  1. [root@backup ~]# rsync -rp /etc/hosts 10.0.0.31:/tmp/
  2. root@10.0.0.31's password:
  3. [root@backup ~]#[root@nfs01 ~]# ls /tmp/hosts
  4. /tmp/hosts
复制代码

3.3 rsync == rm

环境准备

创建出来一次命令 进行操作

  1. [root@backup tmp]# mkdir /oldboyedu
  2. [root@backup oldboyedu# cp /tmp/* .
  3. [root@backup oldboyedu]# ll
  4. total 4
  5. -rw-r--r-- 1 root root 357 Oct 11 15:21 hosts
复制代码

#rm命令操作

  1. [root@backup oldboyedu]# rm -rf /oldboyedu/hosts
  2. [root@backup oldboyedu]# ll /oldboyedu/hosts
  3. ls: cannot access /oldboyedu/hosts: No such file or directory
复制代码

查看这文件

  1. [root@backup ~]# l
  2. total 4
  3. -rw-r--r-- 1 root root 357 Oct 11 15:21 hosts
复制代码

创建一个空目录,使用空目录进行无差异同步

  1. [root@backup ~]# mkdir /null
  2. [root@backup ~]# rsync --delete  /null/ /oldboyedu/
  3. rsync: --delete does not work without -r or -d.
  4. rsync error: syntax or usage error (code 1) at main.c(1422) [client=3.0.6]
  5. [root@backup ~]# rsync  -a  --delete  /null/ /oldboyedu/
  6. [root@backup ~]# ll /oldboyedu/
  7. total 0
复制代码

3.4 rsync == ls -l使用rsync 可以实现与 ls 类似的功能

  1. [root@backup ~]# ls -l install.log
  2. -rw-r--r--. 1 root root 21736 Sep 25 08:38 install.log
  3. [root@backup ~]# rsync install.log
  4. -rw-r--r--       21736 2017/09/25 08:38:28 install.log
复制代码

4 Rsync特性总结(特性信息说明)

01. 支持拷贝普通文件与特殊文件如链接文件,设备等。

02. 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。

  1. # tar zcvf backup_1.tar.gz  /opt/data  -exclude=oldboy  
复制代码

说明:在打包/opt/data时就排除了oldboy命名的目录和文件。

03. 可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p。

04. 可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar -N)。

  1. # 将备份/home 目录自 2008-01-29 以来修改过的文件
  2. # tar -N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
  3. # 将备份 /home 目录昨天以来修改过的文件
  4. # tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home
  5. # 添加文件到已经打包的文件
  6. # tar -rf all.tar *.gif  
复制代码

说明:这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。

05. 可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)

06. 可以通过socket(进程方式)传输文件和数据(服务端和客户端)。重点掌握。

07. 支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。

5 Rsync的企业工作场景说明

01. 两台服务器之间数据同步(定时任务cron+rsync)

同步网站内部人员数据信息(定时任务最小周期为1分钟)

02. 两台服务器之间数据同步(实时任务inotify/sersync/lrsyncd+rsync)

同步网站用户人员数据信息

二、rsync使用方式

1 rsync软件工作方式
  1. SYNOPSIS
  2.         本地数据同步方式
  3.        Local:  rsync [OPTION...] SRC... [DEST]
  4.         远程数据同步方式
  5.        Access via remote shell:
  6.          Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  7.          Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
  8.         守护进程方式同步数据
  9.        Access via rsync daemon:
  10.          Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
  11.                rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
  12.          Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
  13.                rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
复制代码

1.1 本地数据同步方式(类似于cp)
  1. Local:  rsync [OPTION...] SRC... [DEST]
复制代码
参数含义
rsync       数据同步命令
[OPTION...] rsync命令参数信息
SRC         要同不得数据信息(文件或目录)
[DEST]      将数据传输到什么位置


实例演示命令:

  1. [root@backup ~]# rsync  /etc/hosts /tmp/
  2. [root@backup ~]# ls /tmp/hosts
  3. /tmp/hosts
复制代码

1.2 远程数据同步方式(类似scp)---又称为隧道传输
  1. Access via remote shell:
  2.   Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  3.   Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
复制代码

说明:需要进行交互传输数据。如果想实现免交互传输数据,需要借助ssh+key方式实现

pull: 拉:
[USER@] :以什么用户身份传输数据信息
HOST:    远程主机信息(IP地址信息 主机名称信息)
SRC:     远端要恏过来的数据信息
[dest]   恏到本地什么位置
push:推:
SRC:    本地要怼过去的数据信息
DEST     怼到远端什么位置

1.3 【实践操作】pull 拉

从远端拉文件到当前目录

  1. [root@nfs01 ~]# touch /tmp/1.txt
  2. [root@backup ~]# rsync nfs01:/tmp/1.txt .
  3. root@nfs01's password:
  4. [root@backup ~]# ll
  5. total 44
  6. -rw-r--r--  1 root root     0 Oct 11 16:16 1.txt
复制代码

1.4 【实践操作】push 推 (目录)

将本地的hosts文件推到远端服务器上

  1. [root@backup tmp]# ll
  2. total 4
  3. -rw-r--r-- 1 root root 357 Oct 11 15:12 hosts
复制代码

使用push的格式 推整个目录(包括目录)

  1. [root@backup tmp]# rsync -r /tmp nfs01:/tmp/
  2. root@nfs01's password:
  3. [root@nfs01 tmp]# ll
  4. total 4
  5. drwxr-xr-x 3 root root 4096 Oct 11 16:20 tmp
复制代码

推整个目录下的文件(不包括目录本身)

  1. [root@backup tmp]# rsync -r /tmp/ nfs01:/tmp/
  2. root@nfs01's password:
  3. [root@nfs01 tmp]# ll
  4. total 8
  5. -rw-r--r-- 1 root root  357 Oct 11 16:21 hosts
  6. drwxr-xr-x 3 root root 4096 Oct 11 16:20 tmp
复制代码

说明:

/tmp --表示将tmp目录本身及目录下的内容进行传输

/tmp/ --表示只传输tmp目录下面的内容信息

2 守护进程方式同步数据
  1. [root@localhost ~]# uname -a
  2. Linux 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
  3. Access via rsync daemon:
  4. Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
  5.       rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
  6. Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
  7.       rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
复制代码

2.1 配置rsync守护进程方式(需要有服务端与客户端)

规划:

1、backup服务器作为rsync服务端

2、以rysnc客户端作为参照物,将数据推到rsync服务器上

2.2 配置rsync服务端(将服务端配置到 backup 服务器上)

第一个里程碑: 软件是否存在

  1. [root@backup ~]# rpm -qa |grep rsync
  2. rsync-3.0.6-12.el6.x86_64
复制代码

第二个里程碑: 进行软件服务配置

  1. [root@backup ~]# vim /etc/rsyncd.conf
  2. uid = rsync
  3. gid = rsync
  4. use chroot = no
  5. max connections = 200
  6. timeout = 300
  7. pid file = /var/run/rsyncd.pid
  8. lock file = /var/run/rsync.lock
  9. log file = /var/log/rsyncd.log
  10. ignore errors
  11. read only = false
  12. list = false
  13. hosts allow = 172.16.1.0/24
  14. hosts deny = 0.0.0.0/32
  15. auth users = rsync_backup
  16. secrets file = /etc/rsync.password
  17. [backup]
  18. comment = "backup dir by oldboy"
  19. path = /backup
复制代码

第三个里程:创建rsync用户

  1. [root@backup ~]# id rsyncid: rsync: No such user
  2. [root@backup ~]# useradd -s /sbin/nologin -M rsync
复制代码

第四个里程碑: 创建数据备份储存目录,目录修改属主

  1. [root@backup ~]# mkdir /backup/
  2. [root@backup ~]# chown -R rsync.rsync /backup/
复制代码

第五个里程碑: 创建认证用户密码文件

  1. echo "rsync_backup:oldboy123" >>/etc/rsync.password
  2. chmod 600 /etc/rsync.password
复制代码

第六个里程碑: 启动rsync服

  1. rsync --daemon
复制代码

至此服务端配置完成

  1. [root@backup ~]# ps -ef |grep rsync
  2. root       2076      1  0 17:05 ?        00:00:00 rsync --daemon
  3. root       2163   1817  0 17:38 pts/1    00:00:00 grep --color=auto rsync
  4. [root@backup ~]# netstat -lntup |grep rsync
  5. tcp        0      0 0.0.0.0:873                 0.0.0.0:*                  
  6. LISTEN      2076/rsync         
  7. tcp        0      0 :::873                      :::*                        
  8. LISTEN      2076/rsync  
复制代码

2.3 配置rsync客户端(其他服务器为客户端)

第一个里程碑: 软件是否存在

  1. [root@nfs01 ~]# rpm -qa |grep rsync
  2. rsync-3.0.6-12.el6.x86_64
复制代码

第二个里程碑: 创建认证文件

客户端的认证文件只需要有密码即可

  1. echo "oldboy123" >>/etc/rsync.password
  2. chmod 600 /etc/rsync.password
复制代码

第三个里程碑: 实现数据传输

交互式

  1. [root@nfs01 ~]# rsync -avzP /etc/hosts rsync_backup@172.16.1.41::backup
  2. Password:
  3. sending incremental file list
  4. hosts
  5.          357 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)

  6. sent 63 bytes  received 33 bytes  9.14 bytes/sec
  7. total size is 357  speedup is 3.72
复制代码

免交互式

  1. [root@nfs01 ~]# rsync -avzP /etc/hosts rsync_backup@172.16.1.41::backup --
  2. password-file=/etc/rsync.password
  3. sending incremental file list
  4. hosts
  5.          357 100%    0.00kB/s    0:00:00 (xfer#1, to-check=0/1)

  6. sent 199 bytes  received 27 bytes  150.67 bytes/sec
  7. total size is 357  speedup is 1.58
复制代码

3 rsync守护进程传输数据原理




4 rsync 命令同步参数选项&特殊参数
  
目录参数
  
参数说明
-v,--verbose
详细模式输出,传输时的信息
-z,--compress
传输时进行压缩以提高传输效率
--compress-level=NUM 可按级别压缩
局域网可以不用压缩
-a,--archive (主要)
归档模式,表示以递归方式传输文件,并保持文件属性。等于-rtopgDl
-r,--recursive  归档于-a
对子目录以递归模式,即目录下的所有目录都同样传输。小写r
-t,--times       归档于-a
保持文件时间信息
-o,--owner       归档于-a
保持文件属主信息
-p,--perms       归档于-a
保持文件权限
-g,--group       归档于-a
保持文件属组信息
-P,--progress
显示同步的过程及传输时的进度等信息(大P)
-D,--devices    归档于-a
保持设备文件信息
-l,--links       归档于-a
保留软连接(小写字母l)
-e,--rsh=COMMAND
使用的信道协议(remote shell),指定替代rsh的shell程序。例如 ssh
--exclude-from=file
文件名所在目录文件,即可以实现排除多个文件
--bwlimit=RATE
限速功能
--delete
让目标目录SRC和源目录数据DST一致,即无差异数据同步
保持同步目录及文件属性:
  这里的-avzP相当于 -vzetopdDlP,生产环境常用的参数为 -avzP
  在脚本中可以报-vP去掉
  --progress可以用-P代替
daemon启动扩展参数
--daemon
daemon表示以守护进程的方式启动rsync服务。
--address
绑定指定IP地址提供服务。
--config=FILE
更改配置文件路径,而不是默认的/etc/rsyncd.conf
--port=PORT
更改其它端口提供服务,而不是缺省的873端口

4.1 特殊参数实践

指定ip:

  1. [root@backup ~]# rsync --daemon --address=172.16.1.41
  2. [root@backup ~]# netstat -lntup |grep 873
  3. tcp     0   0 172.16.1.41:873     0.0.0.0:*        LISTEN      2583/rsync
  4. 参数测试:
  5. [root@nfs01 ~]# rsync -avzP /etc/services rsync_backup@172.16.1.41::backup --
  6. password-file=/etc/rsync.password
  7. sending incremental file list
  8. services
  9.       641020 100%   19.34MB/s    0:00:00 (xfer#1, to-check=0/1)

  10. sent 127417 bytes  received 27 bytes  254888.00 bytes/sec
  11. total size is 641020  speedup is 5.03
复制代码

指定配置文件路径

  1. [root@backup ~]# rsync --daemon --config=/etc/rsyncd.conf
  2. [root@nfs01 ~]# rsync -avzP /etc/services rsync_backup@172.16.1.41::backup --
  3. password-file=/etc/rsync.password
  4. sending incremental file list
  5. sent 29 bytes  received 8 bytes  74.00 bytes/sec
  6. total size is 641020  speedup is 17324.86
复制代码

服务端指定服务端口:

  1. [root@backup ~]# rsync --daemon --port=5222
  2. [root@backup ~]# netstat -lntup|grep rsync
  3. tcp        0      0 0.0.0.0:5222      0.0.0.0:*           LISTEN      2598/rsync         
  4. tcp        0      0 :::5222            :::*                 LISTEN      2598/rsync   
复制代码

本文内容来自 老男孩Linux云计算运维优秀学员课后笔记整理


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.