linux网络服务之RSYNC

1、rsync概述

       rsync 是类 unix 系统下的数据镜像备份工具。一款支持快速完全备份和增量备份的工具,支持本地复制,远程同步等,类似于 scp 命令;rsync 命令在同步文件之前要先登录目标主机进行用户身份认证,认证过后才能进行数据同步,身份认证方式取决于所使用的协议类型,rsync 一般使用两种协议进行数据同步:ssh 协议和 rsync 协议。

       rsync的特性有以下几点:

  • 能更新整个目录树和文件系统;
  • 有选择性的保留符号链接、硬链接、文件属性、权限、设备以及时间等;
  • 对于安装来说,无任何特殊权限要求;
  • 对于多个文件来说,文件传输效率高;
  • 能用 ssh 或自定义端口作为传输入口端口;

2、rsync工作原理

       既然涉及到数据同步,必要的两个概念是:源地址(文件),目标地址(文件),以及以哪一方为基准,例如,想让目标主机上的文件和本地文件保持同步,则是以本地文件为同步基准,将本地文件作为源文件推送到目标主机上。
       rsync在进行数据同步之前需要先进行用户身份验证,验证方式取决于使用的连接方式:

  • ssh登录验证模式:使用 ssh 协议作为基础进行用户身份认证,然后进行数据同步。
  • rsync登录验证模式:使用 rsync 协议进行用户身份认证(非系统用户),然后进行数据同步。

       数据同步方式 :推送(上传)、拉取(下载)

     

3、常用功能

       我们一般使用 rsync 来进行单向数据同步,因此我们需要确定一个基准,比如:两台服务器,一台NFS作为网站数据服务器(基准服务器),另外一台专门做 rsync 数据备份服务器。可以通过ssh、rsync两种办法来进行同步。

       ssh方式:

       ssh 协议数据同步:将NFS服务器数据同步备份到rsync服务器。可以进行同步上传或者同步下载。如果要同步过程中进行免密,需要对ssh进行免密配置。

ssh-keygen -t rsa -b 2048
ssh-copy-id root@[对端服务器]

       rsync方式:

       需要搭建rsync 服务。NFS上搭建服务即可,将NFS服务器数据同步上传或者同步下载到rsync服务器。若要进行免密,需要在客户端进行环境变量声明。 

export RSYNC_PASSWORD=虚拟用户密码(客户端生成)

4、其他功能 

4.1 rsync+inotify 实时单向同步

     定期同步的缺点:

  • 执行备份的时间固定,延期明显,实时性差;
  • 当同步源长期不变化时,密集的定期任务是不必要的(浪费资源);

     实时同步的优点:

  • 一旦同步源出现变化,立即启动备份,实时性好;
  • 只要同步源无变化,则不执行备份,节省资源;

     对于这种单向同步的场景下,一般利用 rsynct +inotifywait 结合脚本实现。

# vim src.sh
#!/bin/bash
a="inotifywait -mrq -e create,delete /filesrc"
b="rsync -avz /filesrc/* root@192.168.88.20:/filedst"
$a | while read directory event file #while 判断是否接收到监控记录
do
$b
done

4.1.1 inotify简介

        inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。要使用inotify,必须具备一台带有 2.6.13版本的内核操作系统。
       inotify 两个监控命令:

  • inotifywait:用于持续监控,实时输出结果(常用);
  • inotifywatch:用于短期监控,任务完成后再出结果;

4.2  unison+inotify实现双向实时同步

      rsync 在单向同步上支持的非常好,且效率很高,但是在双向同步支持较差;unison 则是双向同步的优秀工具,但其缺点是同步效率较低。

      同理,也是需要配置脚本进行双向自动同步,监控目录和数据同步时,源目录不能使用*通配符传输,否则会变成死循环。脚本后台进行执行。

      filesrc端:

#!/bin/bash
a="inotifywait -mrq -e create,delete /filesrc"
b="/usr/local/bin/unison -batch /filesrc/ ssh://192.168.88.20//filedst/" #-batch:批处理
$a | while read directory event file
do
$b
done

    filetdst端 :

#!/bin/bash
a="inotifywait -mrq -e create,delete /filedst"
b="/usr/local/bin/unison -batch /filedst/ ssh://192.168.88.10//filesrc/" #-batch:批处理
$a | while read directory event file
do
$b
done

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值