rsync实现数据备份

1.简介

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

2.功能

scp、cp、rm、增量备份

  • rsync通过'quick check'算法,它仅同步大小或者最后修改时间发生变化的文件或目录。也可以根据权限,属主等属性变化来同步,但需要指定参数。

3.特性

  1. 支持拷贝特殊文件。如链接文件,设备等
  2. 可以排除指定文件或目录,相当于tar打包中排除命令
  3. 同步时可以保持文件的属性不变(-p)
  4. 可以实现增量备份
  5. 可以使用rcp、rsh、ssh等方式来传输文件(rsync本身对传输不加密
  6. 可以通过socket传输文件或数据(服务器后客户端传输使用的端口是tcp873
  7. 支持匿名或认证的进程模式传输,可实现数据的安全备份

4.用法

4.1语法

  • Local:

    rsync [OPTION...] SRC... [DEST]
  • Access via remote shell:

    Pull: rsync [OPTION] USER@HOST:SRC... [DEST]

    rsync /etc/fstab root@10.1.1.210:/tmp

    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

4.2选项

选项 作用
-avz 归档,同步时保留属性并压缩
-a archive 归档,用语同步时保留文件属性
-v verbose 同步过程信息
-z compress 压缩
-r recursive 递归
-t time 时间戳
-o owner 属主
-p permissive 权限
-g group属组
-P process 同步进度信息
-D device 保留设备信息
-l link 符号链接
-e 远程shell(默认ssh)
--exclude 排除文件
--bwlimit 带宽限制

5.运用场景

5.1实现两台服务器之间的数据同步cron+rsync

  1. 配置rsyncd服务端
  • 创建配置文件 vim /etc/rsyncd.conf

    id = rsync   #客户端连接到服务端后服务端进程执行者
    gid = rsync #执行组
    use chroot = no #是否chroot
    max connections = 100
    timeout 300
    strict modes = yes
    pid file = /var/run/rsyncd.pid #pid文件
    lock file = /var/run/rsyncd.lock #锁文件,保持文件一致性
    log file = /var/log/rsyncd.log #日志文件 [bak] #模块名称
    path = /bakup #备份目录
    comment = bakup file #模块说明
    ignore errors #忽略错误
    read only = no #可写
    hosts allow = * #允许
    hosts deny = 172.16.1.1 #拒绝
    list = false #能否被列表
    auth users = ruser #允许那些用户同步
    secrets file = /etc/rsync.passwd #用户帐号密码文件(权限必须是600)
  • 创建密码文件并修改权限

vim /etc/rsync.passwd
user:12345
chomod 600 /etc/rsync.passwd
  • 创建共享目录并授权
useradd -r rsync #增加系统用户
mkdir /bakup
chown -R rsync,rsync /bakup
  • 加入开机自动启动脚本
vim /etc/rc.local
rsync --daemon
  1. 配置rsync客户端
  • 配置密码文件
vim /etc/rsync.passwd
12345
  • 推送文件
方法一:rsync -avz /etc/hosts ruser@192.168.179.131::bak --password-file=/etc/rsync.passwd
方法二:rsync -avz /etc/hosts rsync://ruser@192.168.179.131/bakup --password-file=/etc/rsync.passwd
  • 将rsync写入shell脚本中,将脚本放到cron中定时运行

永久生效

date #查看时间
vi /etc/crontab #进入该文件
分 时 * * * ./root/copy.sh #写入

临时生效

crontab -e
编辑:分 时 * * * bash /root/copy.sh
cat copy.sh

6.实现实时同步(Inotify)

6.1介绍

  • Inotify,它是在内核 2.6.13 版本中引入的一个新功能,它为用户态监视文件系统的变化提供了强大的支持,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。

6.2安装

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
yum install inotify-tools

6.3用法

  • 常见用法:inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib /game/

    选项 作用
    -m monitor,持续监控目标文件/目录
    -r recursive,递归
    -q quiet,静默模式
    --formit %Xe event事件 %w目录 %f文件
    -e 监控事件

6.4脚本

0#/bin/bash
/usr/bin/inotifywait -mrq --format '%w%f'-e create,close_write,delete /backup |while read file #发生更改的文件列表都接收到file 然后循环,但有什么鬼用呢?下面的命令都没有引用这个$file 下面做的是全量rsync
do
cd /backup && rsync -az --delete /backup/ rsync_backup@192.168.24.101::backup/--password-file=/etc/rsync.password
done

执行脚本

chomd +x rsync.sh
./rsync.sh

优化版

0#!/bin/bash
src=/data/ # 需要同步的源路径
des=data # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。
rsync_passwd_file=/etc/rsyncd.passwd # rsync验证的密码文件
ip1=192.168.0.18 # 目标服务器1
ip2=192.168.0.19 # 目标服务器2
user=root # rsync --daemon定义的验证用户名
cd ${src} # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果
/usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file # 把监控到有发生更改的"文件路径列表"循环
do
INO_EVENT=$(echo $file | awk '{print $1}') # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
INO_FILE=$(echo $file | awk '{print $2}') # 把inotify输出切割 把文件路径部分赋值给INO_FILE
echo "-------------------------------$(date)------------------------------------"
echo $file
#增加、修改、写入完成、移动进事件
#增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] # 判断事件类型
then
echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} && # INO_FILE变量代表路径哦 -c校验文件内容
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
#仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
fi
#删除、移动出事件
if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
then
echo 'DELETE or MOVED_FROM'
rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&
rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
#看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。
fi
#修改属性事件 指 touch chgrp chmod chown等操作
if [[ $INO_EVENT =~ 'ATTRIB' ]]
then
echo 'ATTRIB'
if [ ! -d "$INO_FILE" ] # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
then
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
fi
fi
done

rsync实现数据备份的更多相关文章

  1. 开源服务专题之-------rsync数据备份

    RSYNC是Remote Sync 远程同步的简称,与SCP的比较,SCP= 无法备份大量数据,类似windows的复制,而rsync=边复制 ,边统计,边比较,可以备份大量数据.可以镜像保存整个目录 ...

  2. rsync命令(同步/备份数据)

    rsync命令rsync命令是一个远程数据同步工具,可通过 lam/wan快速同步多台主机间的文件.rsync使用所谓的 "rsync算法"来使用本地和远程两个主机之间的文件达到同 ...

  3. rsync+inotify实现全网自动化数据备份-技术流ken

    rsync简介 “rsync是linux系统下的数据镜像备份工具.使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH.rsync主机同步” rsync的功能和特点 ...

  4. rsync用于数据迁移/备份的几个细节

    上周我们的一个GitLab服务频繁出现web页面卡死问题,得重启虚拟机才可恢复,但重启之后没多久又会卡死.后来发现是虚拟机的磁盘大小超过了2T,而虚拟机管理那层的文件系统是ext3,最大单文件只能支持 ...

  5. (转)rsync数据备份方案

    rsync数据备份方案 原文:http://blog.51cto.com/irow10/1826458 最近整理了下公司的数据备份情况.以下是部分操作的过程 1.rsync数据备份,具体备份过程就不详 ...

  6. Linux基础学习-数据备份工具Rsync

    数据备份工具rsync 作为一个系统管理员,数据备份是非常重要的,如果没有做好备份策略,磁盘损坏了,那么你的数据将全部丢失,所以在日常的维护工作中,一定要时刻牢记给数据做备份. rsync不仅可以可以 ...

  7. centos7 rsync+inotify软件实现集群服务的数据备份(一)

    一.rsync软件的说明: 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达 ...

  8. linux之rsync远程数据同步备份

    rsync服务是一种高效的远程数据备份的工具,该服务的port号为873, 是Liunx下的一种非独立服务.由xinetd超级服务管理,取代监听873port. 长处: 1.rsync能够利用ssh和 ...

  9. Linux系统备份还原工具4(rsync/远程数据同步工具)

    rsync即是能备份系统也是数据同步的工具. 在Jenkins上可以使用rsync结合SSH的免密登录做数据同步和分发.这样一来可以达到部署全命令化,不需要依赖任何插件去实现. 命令参考:http:/ ...

随机推荐

  1. 性能监控(1)--linux下的top命令

    Linux下的监控工具 top命令 top命令能够实时显示系统中各个进程的资源占用情况,其输出信息分为两部分,前半部分为系统统计信息,后半部分是进程信息. 第一行是任务队列信息,它的结果等同于upti ...

  2. javascript基于对象的弹出框封装

    先睹为快,移动端:戳这里,打开页面后点击投票查看效果.PC端测试直接切换body的overflow属性:hidden和auto一样可以,比下面相对简化,又有人说这样偶尔不行..如果你知道优缺点欢迎给出 ...

  3. blfs(systemv版本)学习笔记-配置远程访问和管理lfs系统

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 要实现远程管理和配置lfs系统需要配置以下软件包: 前几页章节脚本的配置:https://www.cnblogs.com/ren ...

  4. Python 类的祖宗--metaclass

    1.Python 中一切事物都是对象 2.类都是 type 类的对象 类的两种申明方法 # 方法一: class Foo: def func(self): print(666) obj = Foo() ...

  5. 随机x到x之间的值

    function rand(max, min){ return Math.floor(Math.random()*(max-min+1)+min) }

  6. 谷歌迂回入华:Waymo无人车抢先进驻上海!

    谷歌迂回入华:Waymo无人车抢先进驻上海! https://mp.weixin.qq.com/s/d5Cw2uhykMJ9urb6Cs8aNw 谷歌又双叒叕要回归中国了?这已经是第不知道多少次的传言 ...

  7. Use Slim to overview model in Tensorflow like model.summary() in Keras

    model.summary() in Tensorflow like Keras Use Slim Example: import numpy as np from tensorflow.python ...

  8. loadrunner Vugen-Tools General-Options-Replay设置

    Vugen-Tools General-Options-Replay设置 by:授客 QQ:1033553122 可以以动画模式或非动画模式(animated mode or non-animated ...

  9. OneAPM大讲堂 | 谁更快?JavaScript 框架性能评测

    文章系国内领先的 ITOM 管理平台供应商 OneAPM 编译呈现. 网页性能是一个丰富且又复杂的话题.在本帖中,我们会将讨论的范围局限在前端 JavaScript 框架上,探究相对于另外一种框架而言 ...

  10. Configure Monit on AWS CentOS7 to guard Squid proxy

    Install Monit:sudo -iamazon-linux-extras install epelyum -y install monit Config monit: vim /etc/mon ...