一、Rsync

Rsync软件是一款快速和非常通用的文件复制工具。他能实现本地复制、远程复制或者远程守护进程方式复制。利用delta-transfer算法,实现增量备份。
Rsync实现的功能如下:

  • 本地数据同步复制(cp)、远程数据同步复制(scp)
  • 本地数据删除、远程数据查看。

Rsync软件特性:

  • 支持拷贝普通文件,支持排除指定文件、目录的同步功能
  • 能够保持原有文件所有属性均不变
  • 实现增量复制
  • 可以配合ssh、rcp、rsh等方式进行隧道加密文件传输(rsync本身不加密数据)
  • 可以通过socket(进行文件通信)传输文件和数据(c/s架构)、支持匿名用户模式传输

Rsync增量复制:
Rsync在数据备份时候,通过其quick check算法,检测数据、容量,最后修改的时间来进行增量的备份。
Rsync甚至可以复制单个文件中的内容变化;其实就是一边对比、一边对差异文件进行复制。

1、Rsync工作方式

  1. 安装:
  2. [root@whoami ~]# yum install rsync -y #安装
  3. [root@whoami ~]# rsync --version #查看版本
  4. rsync version 3.1.2 protocol version 31
  5. Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
  6. Web site: http://rsync.samba.org/
  7. Capabilities:
  8. 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
  9. socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
  10. append, ACLs, xattrs, iconv, symtimes, prealloc
  11. rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
  12. are welcome to redistribute it under certain conditions. See the GNU
  13. General Public Licence for details.
  14. [root@whoami ~]#

本地的数据传输模式
类似cp、ls、touch命令的增删该查,实现数据的增量备份

语法模式:
rsync  可选参数  src源文件/源目录     dest目标文件/目标目录

1.本地的文件复制
[root@whoami ~]# rsync /etc/hosts .            #复制
[root@whoami test_rsync]# rsync -r ../nginx/ .            #复制上一层文件夹nginx中所有的文件和文件夹
[root@whoami test_rsync]# rsync -r ../nginx  .            #复制上一层文件夹nginx整个文件及其子内容

2.增量删除,在删除的时候会比较目标文件和源文件中的内容,只删除目标文件中相对于源文件增量的部分
[root@whoami ~]# rsync -r --delete cc/ test_rsync/    #比较目标文件夹中相比源文件夹中多的内容(多删除、少添加),针对文件也起效

远程的数据传输模式
借助于ssh服务在两台机器之间进行数据传输
Rsync数据推拉模式:
远程数据的传输模式,有两种情况,推送和拉取
拉取:把远端服务器的数据拉取到本地
推送:把本地的数据推送上传发送给远程的服务器

语法:
rsync 参数    用户名@IP:源资料路径    本地路径            #拉取
rsync    参数    本地文件路径    用户名@IP:目的路径            #推送

1.抓取
rsync -av -e 'ssh -p 22' root@123.206.16.61:/etc/hosts  /tmp
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步,若是默认22,可以不写该参数
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性
-v, --verbose 详细模式输出

2.推送
rsync -av /etc/hosts   root@123.206.16.61:/tmp/

Rsync守护模式传输
Rsync守护模式传输是在客户端与服务器之间的数据复制;服务端需要配置好守护进程,等待客户端远程的执行数据同步命令,然后在实现数据的拉取、推送。
Rsync守护进程原理:
服务端需要创建一个文件夹用作备份文件夹;同时创建备份用户的虚拟用户;并且将备份文件夹授权给备份虚拟用户;备份文件夹本身权限600;设置开机启动服务即可。

守护进程模式中拉取和推送的语法格式:
1.拉取
rsync 参数    user@IP::src    dest        #推荐
rsync 参数    rsync://user@ip:port/src dest        #不推荐

2.推送
rsync 参数    src    user@host::dest        #推荐
rsync 参数    src    rsync://user@IP:port/dest        #不推荐

实践:
rsync    备份服务器,运行rsync服务端程序
whoami    客户端,需要同步数据的客户端

1.确保客户端服务端都安装了rsync服务
编辑/etc/rsync.conf配置文件,写入如下内容:
uid = rsync                #指定rsync服务运行时的用户
gid = rsync
fake super = yes # 无需让rsync以root身份运行即可保存文件完整属性
use chroot = no            #进行数据同步时,有关安全的参数;在企业内网,该参数可以关闭
max connections = 200        #用于定义服务端连接最大数量
pid file = /var/run/rsyncd.pid        #用于记录rsync服务的PID
lock file = /var/run/rsync.lock        #锁机制,当超过最大用户时,将锁住该进程不让用户在发起连接
log file = /var/log/rsyncd.log        #日志
ignore errors
read only = false
list = false
hosts allow = 192.168.178.0/24        #允许那些网段可以访问rsync服务
hosts deny = 0.0.0.0/32
auth users = rsync_backup                    #用于连接rsync服务器的验证用户
secrets file = /etc/rsync.password        #验证用户的密码
[backup]
comment = This is rsync backup!
path = /backup/                                        #定义备份路径

2.针对rsync.conf文件中定义的信息,创建对应的配置
[root@rsync ~]# useradd -s /sbin/nologin -M rsync            #创建用户
[root@rsync ~]# mkdir -p /backup                                            #创建备份文件夹
[root@rsync ~]# chown -R rsync.rsync /backup/                    #修改属主、属组权限
[root@rsync ~]# ll -d /backup/                                                #查看一把
drwxr-xr-x 2 rsync rsync 4096 2月  23 17:19 /backup/
[root@rsync ~]# echo "rsync_backup:ylin" > /etc/rsync.password        #创建rsync密码
[root@rsync ~]# chmod 600 /etc/rsync.password                    #修改密码文件权限

3.运行rsync进程、并配置开机启动
[root@rsync ~]# systemctl start rsyncd
[root@rsync ~]# systemctl enable rsyncd

[root@rsync ~]# ps -ef |grep rsync        #检查进程
root     10746     1  0 17:26 ?        00:00:00 /usr/bin/rsync --daemon --no-detach
[root@rsync ~]# netstat -tunlp |grep rsync        #端口
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      10746/rsync         
tcp6       0      0 :::873                  :::*                    LISTEN      10746/rsync 
[root@rsync ~]# ss -lnp |grep rsync
tcp    LISTEN     0      5         *:873                   *:*                   users:(("rsync",pid=10746,fd=3))
tcp    LISTEN     0      5        :::873                  :::*                   users:(("rsync",pid=10746,fd=5))