rsync+inotify实时同步环境部署

rsync
作用:
实现文件的备份
备份位置可以是当前主机,也可以是远程主机
备份过程可以是完全备份,也可以是增量备份

功能:
1、类似于cp的复制功能
将本地主机的一个文件复制到另一个位置下。
2、将本地主机的文件推送到远程主机,也可以从远程主机拉取文件到本地。
3、显示文件列表

使用模式
shell模式
本地复制功能
远程shell模式
可以利用ssh来实现数据的加密到远程主机
守护进程(服务器模式)
rsync工作在守护进程模式下
列表模式
ls 仅仅显示内容,不做操作

确保各个主机的时间同步
[[email protected] ~]# crontab -l
* * * * * /usr/sbin/ntpdate -u ntp1.aliyun.com &>/dev/null
* * * * * /usr/sbin/hwclock -w &>/dev/null

[[email protected] ~]# crontab -l
* * * * * /usr/sbin/ntpdate -u 192.168.85.132 & > /dev/null

[[email protected] ~]# crontab -l
* * * * * /usr/sbin/ntpdate -u 192.168.85.132 & > /dev/null

rsync+inotify
rsync+sersync

rsync只负责传递文件到远程主机
inotiyf/sersync:将发生了改变的文件找出来

sync模式一
格式:Local: rsync [OPTION...] SRC... [DEST]
选项:
-p :复制文件的过程中,保持文件的属性不变
-v :显示复制过程信息
-a :使用归档模式,(复制目录必须使用此选项)
-z :在传输过程中,以压缩方式进行传输
-e : "ssh [-p22]" :指定所使用的传输通道
-r : 递归复制
模式二、远程shell模式
[[email protected] ~]# rsync -avz -e "ssh -p22" /tmp/passwd [email protected]:/tmp/
[[email protected] ~]# rsync -avz -e "ssh -p22" /tmp/passwd [email protected]:/tmp/
[[email protected] ~]# rsync -avz -e "ssh -p22" /tmp/passwd [email protected]:/tmp/

rsync同步时,会首先对比源和目的下的文件的校验码,只有当特征码不同时,才会传递。

重点说明:工作中通常都是用rsync+ssh密钥认证方式,目的是为了用免密码登录。

模式三、守护进程模式

安例:将ntp(132)和samba(131)上的数据备份到backup
准备工作
关闭selinux
关闭防火墙
配置时间同步

第一步:配置服务器端 配置backup上的rsync,让其工作在守护进程模式。
1、修改配置文件 (默认不存在)
[[email protected] ~]# vim /etc/rsyncd.conf

rsyncd.conf的基本构成
全局参数
[模块1]
模块参数……
[模块2]
模块参数……

全局参数
pid file:指定rsync进程的pid文件的路径和名称
lock file:指定rsync进程的锁文件的路径和名称
log file:rsync的日志文件路径和名称
uid:指定rsync进程以什么身份在后台运行(必须是系统用户)
gid:指定rsync进程以什么组身份在后台运行
port:端口号

模块参数
path:指定备份目录的路径
use chroot:是否将用户锁定在家目录中
max connections:指定可以进行同时连接的用户的最大数量
read only:只读
write only:只写
list:true|false :设置是否可以显示全部的模块列表
auth users:指定访问模块需要使用的用户名,这里的是虚拟用户。(不是存在于/etc/passwd)
secrets file:指定保存虚拟用户名和密码的数据库文件
hosts allow:指定可以访问模块或者rsync服务器端的IP地址
hosts deny:黑名单

补充:两个参数都没用的时候,那么所有用户都可以任意访问
只有allow,那么仅仅允许白名单的用户可以访问模块
只有deny,那么仅仅黑名单中的用户禁止访问模块
两个参数都存在,优先检查白名单,如果匹配成功,则允许访问,如果失败,就去检查黑名单。成功则禁止访问,如果都没有匹配成功,则允许访问。
timeout:指定空闲超时时间。

[[email protected] ~]# vim /etc/rsyncd.conf

uid = rsync
gid = rsync
use chroot = no
max connections = 100
timeout = 100
pid file = /var/lock/rsync.pid
lock file = /var/lock/rsync.lock
log file = /var/log/rsync.log
[mod1]
path = /rsync/samba
read only = false
hosts allow = 192.168.85.0/24
auth users = vuser1
secrets file = /rsync/rsync.passwd
list = false

[mod2]
path = /rsync/ntp
read only = false
hosts allow = 192.168.85.0/24
auth users = vuser2
secrets file = /rsync/rsync.passwd
list = false

2、创建目录
[[email protected] ~]# mkdir -pv /rsync/{samba,ntp}
chown rsync.rsync /rsync/{samba,ntp}
3、创建运行rsync的系统用户
[[email protected] ~]# groupadd -r rsync
[[email protected] ~]# useradd -r -s /sbin/nologin -g rsync rsync

4、启动rsync
[[email protected] ~]# rsync --daemon
[[email protected] ~]# rsync --daemon
[[email protected] ~]# failed to create pid file /var/lock/rsync.pid: File exists
补充:rsync默认配置文件/etc/rsyncd.conf
如果想使用其他位置的配置文件,可以--config=/path/to/confFile

5、查看rsync端口(默认873)
[[email protected] ~]# netstat -an | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN
tcp6 0 0 :::873 :::* LISTEN

6、创建虚拟用户文件以及虚拟用户
[[email protected] ~]# cd /rsync/
[email protected] rsync]# touch rsync.passwd
[[email protected] rsync]# chmod 600 rsync.passwd <<<<< 该文件的权限必须是600
[[email protected] rsync]# vim rsync.passwd
vuser1:123
vuser2:123
补充:虚拟用户就是这个文件中的记录
一个用户占一行,冒号前是用户名,冒号后是用户的密码

第二步:配置客户端:
使用格式
rsync [options] [[email protected]]host::moduleName /path/
rsync [options] /path/[[email protected]]host::moduleName

[[email protected] home]# rsync -avz /home/ [email protected]::mod2

服务端
[[email protected] ntp]# ll

客户端免密码
[[email protected] home]# vim /etc/rsync.passwd
123
rsyncd.conf rsync.passwd
[[email protected] home]# chmod 600 /etc/rsync.passwd
使用rsync传递文件
[[email protected] home]# rsync -avz /home/ [email protected]::mod2 --password-file=/etc/rsync.passwd

说明:
--password-file 系统可以自动从该位置下指定密码

总结:
服务器端的配置
1、创建配置文件
2、创建密码文件,修改权限为600
3、创建系统用户
4、创建模块对应的目录,修改目录的属主组为系统用户。
5、启动Damon模式

客户端
1、创建虚拟用户密码文件,修改权限为600
2、向模块传递文件或者从目录拉取文件

如果出现错误
第一步:检查日志
第二步:检查selinux、iptables是否启动
第三步:检查虚拟用户的文件名称是否正确、权限是否正确

重启rsync
[[email protected] ntp]# killall rsync
没有killall 的话安装
[[email protected] ntp]# yum install psmisc -y
[[email protected] ntp]# ss -tnl | grep 873
[[email protected] ntp]# rsync --daemon

编写rsync服务管理脚本
[[email protected] ntp]# cd /etc/init.d/

补充:
--delete:让客户端和服务器端的文件完全一致
--exclude:在进行文件传送的时候,排除指定的文件

排除实现方式:方式1:排除一个文件
[[email protected] home]# touch /home/{1..10}.txt
[[email protected] home]# rsync -avz /home/ --exclude=3.txt [email protected]::mod2

方式2:排除多个文件(客户端)
--exclude{ }
[[email protected] home]# touch /home/{11..15}.txt
[[email protected] home]# rsync -avz /home/ --exclude={11,12}.txt [email protected]::mod2

方式3:通配符
[[email protected] ~]# rsync -avz /home/ --exclude=*.txt [email protected]::mod2

排除实现方式(服务端)
在配置文件中添加一个关键字exclude,这里指定要排除文件列表,列表中的内容以空格为分隔符。
例子:exclude = q* a.txt *conf

完全同步的原理
在文件的传输过程中,发送方有的,会直接传输到接收方,发送方没有,但是接收方有的文件则会删除。
[[email protected] ~]# rsync -avc --delete /test/ [email protected]::mod2

[[email protected] ~]# rsync -avc --delete /test/ [email protected]::mod2

文件的实时同步
rsync+inotify
rsync+sersync

inotify软件
功能:可以实时监控指定目录下的文件,当文件发生了更改,则会触发事件,输出信息
监控的事件类型
创建
删除
修改
移动
……

安装inotify (客户端)
[[email protected] ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[[email protected] ~]# yum install inotify-tools -y
[[email protected] ~]# rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch
/usr/lib64/libinotifytools.so.0
/usr/lib64/libinotifytools.so.0.4.1
/usr/share/doc/inotify-tools-3.14
/usr/share/doc/inotify-tools-3.14/AUTHORS
/usr/share/doc/inotify-tools-3.14/COPYING
/usr/share/doc/inotify-tools-3.14/ChangeLog
/usr/share/doc/inotify-tools-3.14/NEWS
/usr/share/doc/inotify-tools-3.14/README
/usr/share/man/man1/inotifywait.1.gz
/usr/share/man/man1/inotifywatch.1.gz

应用程序
/usr/bin/inotifywait: 真正实现文件监控程序
/usr/bin/inotifywatch :数据统计

inotify+rsync
inotifywait
选项
-r:递归,对目录中的文件做监控
-q:仅仅打印少量信息(打印监控事件)
-m:一直处于监控状态(默认是在前台监控)
-d:以守护进程的方式来运行(运行在后台)
-o file:将监控到的事件输出到一个文件中(默认是输出到标准输出)
-s:将错误信息输出到系统日志中(默认是将错误信息输出)
--excludei:忽略文件的大小写
-e <event>:指定要监控的事件
access:访问事件
modify:编辑事件
attrib:修改文件属性事件(修改文件的元数据)
close_write:当文件从写模式关闭的时候,会触发该事件
close_nowrite:当文件从只读模式下关闭的时候,会触发该事件
close:无论以什么方式打开文件,在关闭文件的时候,都会触发该事件
open:当文件被打开的时候,就会触发该事件
moved_to:当一个文件被移动到监控的目录下就会触发该事件
moved_from:当一个文件从监控目录下移走的时候,就会触发该事件
move:主要发生了文件的移动,就会触发该事件
moved_self:在监控目录下执行移动操作,就会触发该事件
create:创建文件的事件
delete:删除文件的事件
--timefmt<fmt>:指定输出发生这个时间点的显示格式
--format<fmt>: 指定的当发生事件以后所输出的信息,以及输出的个数
%f 输出记录发生事件的文件名
%w输出记录发生事件的文件所在的目录的绝对路径
%e:输出记录发生事件的名称(如果有多个事件,多个事件用空格分隔)
%Xe:输出记录发生事件的名称(如果有多个事件,多个事件用X分割)
%T:输出发生事件的时间(时间个格式由 --timefmt<fmt>)

[[email protected] ~]# inotifywait -mrq --timefmt "%F%T" --format ‘%T %w%f‘ -e create,delete,modify /test
2020-04-0419:27:26 /test/1
2020-04-0419:27:26 /test/2
2020-04-0419:27:26 /test/3

[[email protected] ~]# mkdir /test/{1,2,3}

[[email protected] ~]# inotifywait -mrq --timefmt "%F%T" --format ‘%T %w%f %e‘ -e create,delete,modify /test
2020-04-0419:30:28 /test/11 CREATE,ISDIR
2020-04-0419:30:28 /test/12 CREATE,ISDIR
2020-04-0419:30:28 /test/13 CREATE,ISDIR
[[email protected] ~]# mkdir /test/{11,12,13}

2020-04-0419:32:21 /test/a DELETE,ISDIR
2020-04-0419:32:33 /test/aa CREATE

[[email protected] ~]# rm -rf /test/a
[[email protected] ~]# touch /test/aa

开发inotify实时同步备份脚本
[[email protected] ~]# cat CheckFile.sh
#!/bin/bash
#
prog="inotifywait"
events="create,delete,modify,attrib"
iopt="-mrq"

lpath="/test/"
rhost="192.168.85.133"
vuser="vuser2"
secfile="/etc/rsync.passwd"
ropt="-az --delete"
modName="mod2"

$prog $iopt --format "%w%f" -e $events $lpath | while read line
do
rsync $ropt $lpath [email protected]$rhost::$modName --password-file=$secfile
done

测试:
[[email protected] test]# mkdir {1..10}
[[email protected] test]# touch {11..20}
[[email protected] test]# ls
1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9
[[email protected] test]# rm -rf *1*
[[email protected] test]# ls
2 20 3 4 5 6 7 8 9

[[email protected] ntp]# ls
[[email protected] ntp]# ls
1 10 11 12 13 14 15 16 17 18 19 2 20 3 4 5 6 7 8 9
[[email protected] ntp]# ls
2 20 3 4 5 6 7 8 9

原文地址:https://blog.51cto.com/14015577/2485003

时间: 2024-10-29 16:51:53

rsync+inotify实时同步环境部署的相关文章

rsync+inotify实时同步环境部署记录

随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足.首先,rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,并且正在发生变化的往往是其中很少的一部分,这是非常低效的方式.其次,rsync不能实时的去监测.同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应

rsync+inotify实时同步案例

rsync+inotify实时同步案例 随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输.如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的.而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式.其次,rsync不能实时的去监测.同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务

rsync+inotify实时同步方案

rsync+inotify实时同步,inotify可以实时监控本地文件或目录变化,当检测到本地文件变化,执行rsync同步命令,将变化的文件同步到其他服务器节点. 1.配置环境 3.在服务节点1.服务节点2.内容发布节点,都安装rsync软件:在内容发布节点再安装inotify实时监控软件.安装步骤建上篇. 4.编辑同步脚本 #!/bin/bash/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y' --format '%T %

rsync远程同步及rsync+inotify实时同步

rsync远程同步及rsync+inotify实时同步 思维代入 正确.有效的备份方案是保障系统及数据安全的重要手段.在服务器中,通常会结合计划性任务.shell脚本来执行本地备份.但有时候为了提高备份的可靠性,异地备份也是非常有必要的.那下面就给大家介绍一种异地远程备份的方法:rsync远程备份. rsync简介 rsync是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份.保持链接和权限,且采用优化的同步算法,在传输前执行压缩,因此非常适用于异地备份.镜像服务等应用

配置rsync+inotify实时同步

配置rsync+inotify实时同步Linux从2.6.13版内核开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件的存取,删除,移动,修改内容及属性等.利用这个机制,可以实现文件异动警告,增量备份,针对目录或文件的变化及时做出响应. 将inotify机制与rsync工具结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份,否则处于静默等待状态,避免了按固定周期备份是存在的延迟性,周期过密等问题. 正因为inotify通知机制有Linux内

rsync+inotify实时同步

一.Rsync简介: rsync是一个远程数据同步工具,可通过lan/wan快速同步多台主机间的文件.它使用所谓的"rsync演算法"来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快.所以通常可以作为备份工具来使用. 运行rsync server的机器也叫backup server,一个rsync server可同时备份多个client的数据:也可以多个rsync server备份一个client的数据.rsync可以搭配

rsync + inotify 实时同步数据

简介 Rsync (remote sync)是一款开源.快速,多功能.可实现增量的本地或远程数据镜像同步备份优秀工具.它可通过 LAN/WAN 快速同步多台主机间的文件.rsync 当前由 rsync.samba.org 维护.rsync 使用所谓的"rsync演算法"来使本地和远程主机之间的文件达到同步,该算法只传送两个文件中的不同部分,而不是每次都整份传送,因此速度相当快. 特点:   1.可以镜像保存整个目录树或文件系统:   2.可实现增量同步,既只同步发生变化的数据,因此数据

rsync+inotify实时同步文件

一.inotify简介 inotify是Linux内核2.6.13 (June 18, 2005)版本新增的一个子系统(API),它提供了一种监控文件系统(基于inode的)事件的机制,可以监控文件系统的变化如文件修改.新增.删除等,并可以将相应的事件通知给应用程序.该机制由著名的桌面搜索引擎项目beagle引入用于替代此前具有类似功能但存在诸多缺陷的dnotify. inotify既可以监控文件,也可以监控目录.当监控目录时,它可以同时监控目录及目录中的各子目录及文件的.此外,inotify

inotify介绍及rsync + inotify 实时同步备份

1.前言 rsync (remote sync)是一款非常好的数据同步工具,能够通过对比同步双方的数据变动,实现增量同步,还可以通过LAN/WAN实现远程多台主机间文件的同步,还能结合crond任务计划来执行自动备份,又可以结合ssh实现远程数据备份的安全,种种特性使他看起来相当优秀.但如果需备份数据十分庞大时,它的不足之处就显现出来了,比如每次执行同步操作时,rsync都会扫描全部数据进而计算出增量部分,而后再同步增量数据,这将会十分耗时,使其变得低效:并且受限于crond计划任务最小时间间隔