【集群实战】Rsync数据同步工具

1. Rsync介绍

1.1 什么是Rsync?

Rsync是一款开源的,快速的,多功能的,可实现全量及增量本地或远程数据同步备份的优秀工具。Rsync软件适用于unix/linux/windows等多种操作系统平台。

官网:https://www.samba.org/ftp/rsync/rsync.html

1.2 Rsync简介

  • 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,rsync3.x比对方法,一边比对差异,一边对差异的部分进行同步。

1.3 Rsync的特性

Rsync的特性如下:

  • 支持拷贝特殊文件,如链接文件,设备等。
  • 可以有排除(tar?find?)指定文件或目录同步的功能,相当于打包命令tar的排除功能(--exclude=PATTERN)
  • 可以做到保持原文件或目录的权限,时间,软硬链接,属主,组等属性均不改变-p
  • 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)
  • 可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)
  • 可以通过socket(进程方式)传输文件和数据(服务端和客户端)
  • 支持匿名的或认证(不需要系统用户,不需要超级用户)的进程模式传输,可实现方便安全的进行数据备份及镜像

 

1.4 Rsync的企业工作场景说明

1.1.4.1 两台服务器之间数据同步(定时任务+备份数据)即crond+rsync

生产场景集群架构服务器备份方案项目

借助crond+rsync把所有客户服务器数据同步到备份服务器

通过本地打包备份,然后rsync结合inotify应用把全网数据统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果。

1.1.4.2 实时同步,实时备份(解决存储服务器等的单点问题)

利用rsync结合inotify的功能做实时的数据同步,根据存储服务器上目录的变化,把变化的数据通过inotify或sersync结合rsync命令实时同步到备份服务器,还可以通过drbd方案以及双写的方案实现双机数据同步。

  • sersync + rsync
  • inotify + rsync
  • Irsyncd + rsync

2. Rsync的工作模式

一般来说,Rsync大致使用三种主要的传输数据的方式。分别为:

  • 单个主机本地之间的数据传输(此时类似于cp命令的功能)
  • 借助rcp,ssh等通道来传输数据(此时类似于scp命令的功能)
  • 以守护进程(socket)的方式传输数据(这个是rsync自身的重要功能)

以上的几种rsync的工作方式,我们可以通过man rsync帮助或查看官方的手册获得。

rsync - a fast, versatile, remote (and local) file-copying tool

语法:

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 Usages with just one SRC arg and no DEST arg will list the source files instead of copying.

2.1 本地数据传输模式(local-only mode)

语法

Local:  rsync [OPTION...] SRC... [DEST]

说明:

  • Rsync为同步的命令;
  • [OPTION]为同步时的参数选项
  • SRC为源,即待拷的分区,文件或目录等;
  • [DEST]为目的分区,文件或目录等;

参数:

  • -v, --verbose    详细模式输出,传输时的进度等信息
  • -z, --compress   传输时进行压缩,以提高传输效率,--compress-level=NUM可按级别压缩
  • -a, --archive   归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
  • ------------------------------------------------------------------
  • -r, --recursive  对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r
  • -t, --times  保持文件时间信息
  • -o, --owner  保持文件属主信息
  • -g, --group  保持文件数组信息
  • -p, --perms   保持文件权限
  • -D, --devices  保持设备文件信息
  • -l, --links   保持软连接
  • -------------------------------------------------------------------
  • -P, --progress   显示同步的过程及传输时的进度等信息
  • -e, --rsh=COMMAND  使用的信道协议,指定替代rsh的shell程序。如:ssh
  • --exclude=PATTERN   指定排除不需要传输的文件模式(和tar的排除参数用法一样)
  • --exclude-from=file   文件名所在的目录文件(和tar参数一样)
  • --bwlimit=RATE   限速,限制socket I/O带宽 bandwidth(rsync,scp,ftp等都有限速功能)
  • --delete    让目标目录DST和 源目录数据SRC 一致。

示例:

  • rsync /etc/hosts /tmp/ # 将/etc/hosts文件拷贝到本地的/tmp/目录下
  • rsync /etc/hosts /opt 
  • rsync -avz /opt /mnt  把opt目录拷贝到/mnt目录下,相当于cp -ap /opt /mnt
    • 保持同步目录和文件属性
    • -avz相当于-vzrtopgDI
    • 生产环境常用参数选项为-avzP(或-vzrtopgP)
    • 如果是在脚本中,也可以把-v和-P去掉
  • rsync -avz --bwlimit=100 dbfile 192.16.1.41:/backup  
    • 限制带宽做远程备份
  • rsync -avz --delete /old/ /tmp/  删除功能,相当于rm命令
    • 相当于同步的功能,即本地不存在,则删除目标dist
    • 若本地存在,远端会同步
    • 非常危险的操作,如果不对,会导致差异化数据的丢失。
[root@oldboy dir1]# tree -L 2  # 数据模拟,显示模拟数据结构
.
|-- dir2
|   |-- t1
|   |-- t2
|   |-- t3
|   `-- t4
`-- dir2.ori
    |-- t11
    |-- t12
    |-- t13
    `-- t14

2 directories, 8 files

[root@oldboy dir1]# rsync -avz --delete dir2/ dir2.ori/  # 同步数据,若源数据没有,则远端删除;同时需要同步
sending incremental file list
./
deleting t14
deleting t13
deleting t12
deleting t11  # 删除了目标远端中与本地差异化的数据
t1
t2
t3
t4   # 将源数据同步到远端

sent 209 bytes  received 91 bytes  600.00 bytes/sec
total size is 0  speedup is 0.00
[root@oldboy dir1]# tree -L 2   
.
|-- dir2
|   |-- t1
|   |-- t2
|   |-- t3
|   `-- t4
`-- dir2.ori
    |-- t1
    |-- t2
    |-- t3
    `-- t4

2 directories, 8 files

2.2 借助ssh通道在不同主机之间传输数据

猜你喜欢

转载自www.cnblogs.com/zoe233/p/11962110.html