本章正题:rsync远程同步备份

1.5.1 什么是rsync

开源的、快速的、多功能的、可实现全量及增量备份的本地或远程数据同步备份方案

rsync官网:http://rsync.samba.org/documentation.html 

1. 什么是全量、什么是增量?

全量备份:本地所有数据都进行传输复制,不管对端服务器是否有相同的数据,如果有进行覆盖

增量备份:只备份同步变化的的数据,对端服务器已存在的数据不进行传输复制

1.5.2 rsync软件命令特点

1. rsync == scp scp是全量复制、rsync是增量复制),利用的是ssh协议

参数:-r  #递归

    -p  #保证文件权限不变

    -a  #包括多个参数

scp远程传输文件:scp -rp /oldboy_dir/oldboy_file1 172.16.1.31:/tmp

scp远程传输目录:scp -rp /oldboy_dir/ 172.16.1.31:/tmp

 

rsync远程传输文件:rsync -rp /oldboy_dir/oldboy_file1 172.16.1.31:/tmp

rsync远程传输目录:rsync -rp /oldboy_dir 172.16.1.31:/tmp

PS: 1.如果传输目录时,目录后面“/”,表示将目录下面的数据内容传输过去

   2.如果传输目录时,目录后面没有“/”,表示将目录本身及目录下面的数据内容进行传输过去

2. rsync == cp

cp本地传输文件或目录:cp  -a  /oldboy_dir/oldboy_file1 /tmp

rysnc本地传输文件或目录:rsync   -a  /oldboy_dir/oldboy_file1 /tmp

3. rsync == rm

创建空目录:mkdir /null

rsync清空目录:rysnc  --delete -r  /null/  172.16.1.31:/oldboy_dir/

4. rsync == ls

查看远程端的数据:rsync 172.16.1.31:/tmp/

 

1.5.3 rsync实现增量同步原理说明

1. rysnc通过quick check算法实现增量传输数据。

2. 同步方式: 1CentOS 5中,把所有文件对比一遍,然后把差异数据进行同步

          2CentOS 6中,一边对比差异,一边把差异的数据进行同步(效率快)

    

3. 查看rsync版本

 rsync --version

1.5.4 rsync软件的特点

1. 支持拷贝普通文件与特殊文件(如链接文件,设备)

2. 可以有排除指定文件或目录同步的功能,相当于tar的排除

3. 可以做到保持原文件或目录的权限时间,或软硬连接的属性不变

4. 可以实现增量同步,指同步发生变化的数据,所以传输速率很高

   # 将备份/home 目录自 2008-01-29 之后修改过的文件

     tar -N 2008-01-29 -zcvf /backups/inc-backup_$(date +%F).tar.gz /home

   # 将备份 /home 目录昨天之后修改过的文件

     tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup_$(date +%F).tar.gz /home

   # 添加文件到已经打包的文件

     tar -rf all.tar *.gif

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

 

5. 可以使用rcprshssh等方式来配置行进隧道加密传输文件(rsync本身不会对数据加密)

6. 可以支持socket(守护进程的方式)传输文件和数据(服务端和客户端)

7. 支持匿名或认证的进程模式传输,可是实现安全地进行数据备份及镜像

1.5.6 rsync复制原理图(默认只传输增量备份的数据)

rsync远程同步备份(上)_第1张图片


 

1.5.6 rsync的企业工作场景说明

1. 利用定时任务实现数据备份(crond+rsync

2. 利用实时同步方式实现数据备份(inotifysersync+rsync

1.5.7 rsync的工作方式

1.本地数据备份方式,类似上面的cp命令


2.远程备份shell方式,类似上面的scp命令

语法结构:

Access via remote shell:
         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

实现远程备份方式,类似scp命令
   Pull(拉):
   rsync       ---数据备份命令
   [OPTION...]    ---指定备份数据命令参数
   [USER@]HOST:    ---定义以什么身份从相应主机上,拉取数据信息
                    (如果没有[USER@],表示以当前用户身份登录到远程主机,拉取数 据)
   SRC...         ---将要从远端服务拉取的数据信息(文件或目录)
   [DEST]         ---将拉取过来的数据,保存到本地路径信息
   
   Push(推):
   rsync       ---数据备份命令
   [OPTION...]     ---指定备份数据命令参数
   SRC...       ---将本地服务上数据信息(文件或目录),推送到远端
   [USER@]HOST:   ---定义以什么身份向相应主机上,推送数据信息
                    (如果没有[USER@],表示以当前用户身份登录到远程主机,推送数 据)
   DEST           ---将本地数据推送到远程服务器的路径信息

 

示例:

pull(拉):rsync -rp [email protected]:/etc/hosts /tmp/

oldboy用户身份将31主机的hosts文件拉取到本地的/tmp/目录下

    注:如果前面不写用户名表示以当前用户身份拉取数据

push(推):rsync -rp /etc/hosts [email protected]:/tmp/

oldboy用户身份将本地hosts文件推送到41服务器的/tmp目录下


注:下图解释推和拉的概念

rsync远程同步备份(上)_第2张图片


 

3. rsync守护进程方式,进行数据备份同步:(重点

语法结构:

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
实现守护进程方式,进行数据备份同步:
   Pull:
   rsync          ---数据备份命令
   [OPTION...]     ---指定备份数据命令参数
       [USER@]HOST::  ---指定认证用户身份信息,从相应主机,拉取数据信息
   SRC...          ---指定一个模块信息
   [DEST]          ---将拉取过来的数据,保存到本地路径信息

   Push:
   rsync          ---数据备份命令
   [OPTION...]      ---指定备份数据命令参数
   SRC...          ---将本地服务器上数据信息(文件或目录),推送到远端
   [USER@]HOST::      ---指定认证用户身份信息,将本地主机数据,推送到远端
   DEST           ---指定一个模块信息

 

      

1.5.8 rsync守护进程模式部署步骤:

1. 服务端部署:

1)检查软件是否存在

   rpm -qa|grep rsync (如果不存在,yum install rsync -y安装一下即可)

2)编写rsync软件的配置文件(编辑后面的步骤可以根据配置文件操作)

   vim /etc/rsyncd.conf(默认是没有这个配置文件)

全局配置:

#注释信息:谁写的,时间,干什么用的

uid = rsync #远端的用户使用rsync访问共享目录

gid = rsync #远端的用户组使用rsync这个组访问共享目录

use chroot = no #是否将用户锁定在当前目录

max connections = 200 #用户最大连接数

timeout = 300 #等待超时时间定义

pid file = /var/run/rsyncd.pid #存放进程对应的pid号(进程号)

    注:杀死进程的三种方式:1. kill pid号(会提示信息)

                如:kill `cat /var/run/rsyncd.pid` (杀死rsync进程号)

                2. killall 进程名(会提示信息)

                3. pkill 进程名,类似的都会一起杀掉(不会提示信息)

lock file = /var/run/rsyncd.lock #进程的锁文件(超过max connections就锁了,其他用户不能进了)

log file = /var/log/rsyncd.log #日志文件,存放出错信息等

局部配置:

[backup] #模块(类似于变量,调用里面的信息)

comment = “bakcup dir by oldboy” #说明信息

path = /backup #(模块对应的位置)

ignore errors #忽略错误程序

read only = false #bakcup目录是否为只读权限

list = false #是否可以列表*(显示出所有模块)

hosts allow = 172.16.1.0/24 #白名单

hosts deny = 0.0.0.0/32 #黑名单

auth users = rsync_bakcup,george  #认证用户,不需要创建这个用户(通过这个用户拉或推数据)

secrets file = /etc/rsync.password  #认证用户的密钥文件(将认证用户的密码存放进去)

3)创建rsync备份目录的管理用户

    useradd -s /sbin/nologin -M rsync

4)创建认证用户密钥文件

    echo "rsync_bakcup:pwd@123" /etc/rsync.password

    chmod 600 /etc/rsyncd.password #更改权限600

5)创建备份目录

    mkdir /backup

    chown rsync.rsync /bakcup #让远程用户rsync可以访问

6)启动rsync 守护进程服务

    rsync --daemon

    注:rsync默认端口号:TCP 873 

2. 客户端部署:

1)进行测试传输备份数据:

    NFS推送数据到rsyncrsync  -avz  /etc/hosts [email protected]::backup

rsync守护进程模式数据传输原理:

如果把模块对应目录的属主改成root,是没有权限访问rsync服务器的(rsync服务器只认被认证的用户)

 rsync远程同步备份(上)_第3张图片



小伙伴们可以关注我的微信公众号:linux运维菜鸟之旅

rsync远程同步备份(上)_第4张图片

关注“中国电信天津网厅”公众号,首次绑定可免费领2G流量,为你的学习提供流量! 

rsync远程同步备份(上)_第5张图片