Rsync+inotify

一、Rsync概念

1、rsync是Liunx系统下的数据镜像备份工具,可以远程同步数据,可以在不同主机之间进行同步,可以实现全量备份和增量备份,保持连接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适合用于架构集中备份或异地备份等应用。同时Rsync支持本地复制,或者与其他SSH、rsync主机同步

2、rsync与scp之间的区别比较:

scp无法备份大量数据,类似Windows的复制

rsync边复制,边统计,边比较

二、Rsync特性和优点

1、可以镜像保存整个目录树和文件系统

2、可以很容易做到保持原来文件的权限、时间、软硬连接等等

3、无须特殊权限即可安装

4、快速:第一次同步时rsync复制全部内容,但在下一次只传输修改过的文件

5、压缩传输:rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽

6、安全:可以使用scp、ssh等方式来传输文件

7、支持匿名传输,以方便进行网站镜像

8、选择性保持:符号链接、硬链接、文件属性、权限、时间等

三、Rsync的知识点

1、采用C/S的模式

2、端口号:873

3、配置文件:/etc/rsync.conf

4、rsync的术语

服务端:运行rsyncd服务,准备备份的文件(源文件)

客户端:存放备份文件的服务器

发起端(源端):执行rsync的命令的服务器

同步源(备份源):存放备份文件的服务器

四、rsync的命令选项

-a:--archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等。

-r:--recursive 复制所有下面的资料,递归处理。

-p:--perms 保留档案权限,文件原有属性。

-t:--times 保留时间点,文件原有时间。

-g:--group 保留原有属组。

-o:--owner 保留档案所有者(root only)。

-D:--devices 保留device资讯(root only)。

-l:--links 复制所有的连接,拷贝连接文件。

-z:--compress 压缩模式,当资料在传送到目的端进行档案压缩。

-H:--hard-links 保留硬链接文件。

-A:--acls 保留ACL属性文件,需要配合--perms。

-P:-P参数和 --partial --progress 相同,只是为了把参数简单化,表示传进度。

--version:输出rsync版本。

-v:--verbose 复杂的输出信息。

-u:--update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件。

--port=PORT:定义rsyncd(daemon)要运行的port(预设为tcp 873)。

--delete:删除那些目标位置有的文件而备份源没有的文件。(备份目录和源目录文件一致,把备份目录里不一致的文件删除)

--password-file=:从 指定密码文件中获取密码。

--bwlimit=KBPS:限制 I/O 带宽。

--filter “-filename”:需要过滤的文件。

--exclude=filname:需要过滤的文件。

--progress:显示备份过程。

通常常用的选项 –avz

rsync远程传输用法

rsync 选项 用户@IP ::共享模块(源数据) 备份路径

rsync 选项 源文件 备份路径(和scp基本一样)

rsync -az test 192.168.94.114:/root/

rsync -avz backup@192.168.94.114::share /databack

share:共享模块(目录),把共享目录下的文件传输到 /databack目录下

rsync -avz  /databack  backup@192.168.78.192::share  

把/databack里的文件上传到共享目录(/var/www/html)下 

五、Rsync的操作实验

两台机器

94.114(服务端)

94.115 (客户端)

1、关闭防火墙

关闭内核安全机制

配置yum 源

服务端操作(192.168.94.114)

2、安装rsync

yum -y install rsync

3、查看命令存放路径

which rsync

4、本地备份(文件)

rsync 源文件路径 备份路径

rsync /etc/hosts /opt

5、两个文件比较(编辑的方式对比)

vimdiff /etc/hosts /opt/hosts

6、本地备份目录

rsync -r /boot/ /opt

7、查看配置文件路径

rpm -qc rsync

8、修改配置文件

vim /etc/rsyncd.conf

全局配置

uid = root 指定用户和组

gid = root

use chroot = yes 禁锢到源目录(增加了安全性,root用户才可以指定)

max connections = 0 客户端连接数(0,表示,不限制有多少个客户端连接)

pid file = /var/run/rsyncd.pid pid文件

log file = /var/log/rsyncd.log 日志存放位置

transfer logging = yes 传输时记录日志

timeout = 900 超时时间900秒

address = 192.168.94.114 本机IP

port = 873 端口号

ignore nonreadable = yes 忽略不可读的文件

read only = no 是否为只读模式

ignore errors 忽略错误信息

dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 支持压缩的类型

局部配置

[share] 模块名随意

path = /var/www/html/ 指定模块目录(共享目录)

comment = backup web 模块描述自己定义

hosts allow = 192.168.94.0/24 限制访问的网段

auth user = backup 认证的用户,不需要创建

secrets file =/etc/rsyncd.secrets 密码存放路径(backup的密码路径)

9、创建共享目录

mkdir -p /var/www/html

cd /var/www/html/

touch aa bb 创建目录文件,验证用

10、创建密码文件

echo “backup:123456” > /etc/rsyncd.secrets

11、修改密码权限

chmod 600 /etc/rsyncd.secrets

12、启动rsync

rsync --deamon (停止,只能杀死)

systemctl start rsyncd

用rsync启动杀死后,再用systemctl启动会报错

把/var/run/rsyncd.pid 删除就好了

netstat -anpt | grep rsync

客户端(94.115)

1、下载rsync

yum -y install rsync

下载就好了,不用修改配置文件,启动

2、远程传输验证

rsync -az test 192.168.94.114:/root/ (和scp一样)

把当前目录下的test文件传输(上传)到94.154服务端的/root目录下

rsync -avz 192.168.94.114:/root/a.test /root

把94.114服务端的/root/a.test文件 (下载)到本机的/root

rsync -avz  --progress --delete backup@192.168.94.114::share /databack  

把94.114共享模块(/var/www/html)下的文件 下载到 本机的/backup目录下

 --progress :传输时显示详细信息

--delete :不/databack目录里跟共享目录不一致的文件删除

3、定时任务

crontba -e

30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/rsyncd.secrets backuper@192.168.94.114::share /backup

4、创建密码文件

vim /etc/rsyncd.secrets

密码:123456

5、修改密码文件权限

chmod 600 /etc/rsyncd.secrets

systemctl restart crontab

六、rsync数据同步+inotify实时同步

计划任务不能实时同步数据(每秒,数据没改变,浪费资源)

Linux 内核从 2.6.13 版本开始提供了 inotify 通知接口,用来监控文件系统的各种变化情况,

如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。

将 inotify 机制与 rsync 工具相结合,可以实现触发式备份(实时同步)——只要原始位置的文档发生变化,则立即启动增量备份操作;

否则处于静默等待状态,就避免了按固定周期备份时存在的延迟性、周期过密等问题。

客户端(94.115)

1、修改内核参数

vim /etc/sysctl.conf

max_queue_events =16384(监控事件队列,默认值为16384)

max_user_instances =1024 (最多监控实例数,默认值为128)

max_user_watches =1048576(每个实例最多监控文件数,默认值为8192)

当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。

sysctl -p

2、下载依赖包

yum -y install gcc gcc-c++ make

3、安装 inotify-tools

tar zxvf inotify-tools-3.14.tar.gz -C /usr/src

cd /usr/src/inotify-tools-3.14/

./configure && make && make install

4、查看软件存放目录

which inotifywait

inotifywait:持续性监控,实时输出

inotifywatch:短期的监控,在监控任务完成之后才会输出结果

5、inotifywait的用法

 inotifywait -mrq -e modify,create,move,delete /var/www/html

选项“-e”用来指定要监控哪些事件: modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件

选项“-m”表示持续监控,选项“-r”表示递归整个目录,选项“-q”简化输出信息。

监控/var/www/html目录,目录下一有变化,立刻输出结果

6、编写触发式同步脚本

vim /opt/inotify_rsync.sh

#!/bin/bash

INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /backup/"

RSYNC_CMD="rsync -azH --delete --password-file=/etc/rsyncd.secrets /backup/ backup@192.168.94.115::share"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE

# read 查看 DIRECTORY:目录 EVENT :事件 FILE:文件

do

if [ $(pgrep rsync | wc -l) -le 0 ] ; then

$RSYNC_CMD

fi

done

7、给脚本权限

chmod +x /opt/inotify_rsync.sh

8、后台运行

nohup sh /opt/inotify_rsync.sh > /dev/null 2>&1 &

9、验证

监控目录下创建文件

touch /backup/888

94.115 模块下查看

ls -lh /var/www/html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值