阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

rsync+inotify实现数据自动同步

462次阅读
没有评论

共计 5735 个字符,预计需要花费 15 分钟才能阅读完成。

rsync 简介

rsync 是一个远程数据同步工具,可通过 lan/wan 快速同步多台主机间的文件。它使用所谓的“rsync 演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。所以通常可以作为备份工具来使用。

运行 rsync server 的机器也叫 backup server,一个 rsync server 可同时备份多个 client 的数据;也可以多个 rsync server 备份一个 client 的数据。rsync 可以搭配 ssh 甚至使用 daemon 模式。rsync server 会打开一个 873 的服务通道(port),等待对方 rsync 连接。连接时,rsync server 会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。

inotify 介绍

inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux 内核从 2.6.13 开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动 / 重命名、删除、创建或者改变属性。

实验

拓扑

rsync+inotify 实现数据自动同步 

服务器端(数据接收方)的配置

[root@backupserver ~]# vim /etc/sysconfig/selinux    #关闭 selinux

SELINUX=disabled

[root@backupserver ~]#reboot  #重启

[root@backupserver ~]# yum -y install rsync  #安装 rsync, 默认情况下已经安装

[root@backupserver ~]# vim /etc/rsyncd.conf  #编辑 rsync 配置文件

log file = /var/log/rsyncd.log  #日志文件位置,启动 rsync 后自动产生这个文件,无需提前创建

pid file = /var/run/rsyncd.pid  #pid 文件的存放位置

lock file = /var/run/rsync.lock  #支持 max connections 参数的锁文件

secrets file = /etc/rsync.password  #用户认证配置文件,里面保存用户名称和密码

motd file = /etc/rsyncd.motd    #启动时欢迎信息页面文件位置(文件内容自定义)

[web_log]  #定义模板,自定义名称

path = /rsydata/  #rsync 服务端数据目录路径, 自定义

comment = web_log  #模块名称与 [web_log] 自定义名称相同

uid = root  #设置 rsync 运行权限为 root

gid = root  #设置 rsync 运行权限为 root

port=873    #默认端口

use chroot = false  #默认为 true,修改为 false,增加对目录文件软连接的备份

read only = false    #设置 rsync 服务端文件为只读权限

list = false  #不显示 rsync 服务端资源列表

max connections = 200  #最大连接数

timeout = 600    #设置超时时间

auth users = backuser  #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开

hosts allow = ip 地址    #允许进行数据同步的客户端 IP 地址,可以设置多个,用英文状态下逗号隔开

hosts deny = IP 地址  #禁止数据同步的客户端 IP 地址,可以设置多个

[root@backupserver ~]# mkdir /rsydata  #创建备份目录

[root@backupserver ~]# vim /etc/rsync.password  #编辑用户认证配置文件

backuser:RedHat

root@backupserver ~]# chmod 600 /etc/rsync.password  #一定要把用户认证配置文件的权限改成 600

[root@backupserver ~]# /usr/bin/rsync –daemon &  #后台运行 rsync 服务

[1] 3392

[root@backupserver ~]# systemctl enable rsyncd.service  #设置 rsync 服务开机自启

[root@backupserver ~]# firewall-cmd –permanent –add-port=873/tcp  #配置防火墙

[root@backupserver ~]# firewall-cmd –reload

 

 

客户端(数据发送方)的配置

 

[root@backupclient ~]# yum -y install rsync  #安装 rsync, 默认情况下已经安装

[root@backupclient ~]# vim /etc/rsync.password  #编辑认证文件,只保存密码

redhat

[root@backupclient ~]# chmod 600 /etc/rsync.password  #一定要把认证文件权限修改成 600

[root@backupclient~]#wget

http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz  #下载 inotify 源码包

[root@backupclient ~]# tar -xzvf inotify-tools-3.14.tar.gz -C /usr/local/  #解压到 /usr/logcal 目录

[root@backupclient ~]# mkdir /usr/local/inotify  #创建安装目录

[root@backupclient ~]# cd /usr/local/inotify-tools-3.14/

[root@backupclient inotify-tools-3.14]# ./configure –prefix=/usr/local/inotify  #指定安装目录为 /usr/local/inotify

[root@backupclient inotify-tools-3.14]# make &&make install  #编译安装

[root@backupclient ~]# systemctl restart rsyncd

[root@backupclient ~]# systemctl enable rsyncd

 

验证

[root@backupclient ~]# mkdir /tmp/test

[root@backupclient ~]# cd /tmp/test

[root@backupclient test]# touch a{1..9}

[root@backupclient test]# ls

a1  a2  a3  a4  a5  a6  a7  a8  a9

[root@backupclient~]#rsync -vzrtopg –progress /tmp/test/ backuser@192.168.23.134::web_log –password-file=/etc/rsync.password# 把客户端 /tmp/test 目录下的文件同步到服务器端的 /rsydata 目录下

[root@backupserver ~]# cd /rsydata/

[root@backupserver rsydata]# ls

a1  a2  a3  a4  a5  a6  a7  a8  a9  #数据已经同步

 

写一个脚本实现当客户端 /tmp/test/ 下的文件有变化时,把此目录下的数据自动同步到服务器端的 /rsydata 下

[root@backupclient ~]# vim inotify.sh

#!/bin/bash

/usr/local/inotify/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f’ -e modify,delete,create,attrib /tmp/test | while read file

do

/usr/bin/rsync -vzrtopg –delete /tmp/test/ backuser@192.168.23.134::web_log –password-file=/etc/rsync.password

echo “${files} was rsynced” >> /var/log/rsync.log 2>&1

done

[root@backupclient ~]# chmod +x inotify.sh

[root@backupclient ~]# sh inotify.sh &  #后台运行脚本

[1] 15435

[root@backupclient ~]# jobs  #查看后台作业

[1]+  Running                sh inotify.sh &

[root@backupclient ~]# echo “/root/inotify.sh” >> /etc/rc.local  #把脚本写到开机自启动文件里面

 

为了防止 inotify 服务由于意外情况停止服务,编写监控 inotify 进程的脚本

[root@backupclient ~]# vim /root/inotify_status.sh

#!/bin/bash

ps -elf | grep inotify &> /dev/null

if [-z $?]

  then

      echo “inotify service is running”

  else

      /root/inotify.sh &

      echo “inotify service is activing”

fi

[root@backupclient ~]# chmod +x /root/inotify_status.sh

[root@backupclient ~]# crontab -e  #编写一个计划任务,每时每刻执行这个脚本

* * * * * /root/inotify_status.sh & > /dev/null

附:

参数说明

语法:inotifywait [-hcmrq] [-e] [-t] [–format] [–timefmt] […]

-h,–help
输出帮助信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以 @开头。
-m, –monitor
接收到一个事情而不退出,无限期地执行。默认的行为是接收到一个事情后立即退出。
-d, –daemon
跟–monitor 一样,除了是在后台运行,需要指定–outfile 把事情输出到一个文件。也意味着使用了–syslog。
-o, –outfile
输出事情到一个文件而不是标准输出。
-s, –syslog
输出错误信息到系统日志
-r, –recursive
监视一个目录下的所有子目录。
-q, –quiet
指定一次,不会输出详细信息,指定二次,除了致命错误,不会输出任何信息。
–exclude
正则匹配需要排除的文件,大小写敏感。
–excludei
正则匹配需要排除的文件,忽略大小写。
-t , –timeout
设置超时时间,如果为 0,则无限期地执行下去。
-e , –event
指定监视的事件。
-c, –csv
输出 csv 格式。
–timefmt
指定时间格式,如(“%”后面的大小写代表不同的格式,如 %y 表示 2 位的年)

    %Y-%M-%D 日期:2012-10-13

    %H:%M:%S 时间:15:45:05

 是否显示该参数指定的时间,取决于–format 选项中是否指定了“%T”。
–format
指定输出格式。
%w 表示发生事件的目录
%f 表示发生事件的文件
%e 表示发生的事件
%Xe 事件以“X”分隔
%T 显示由–timefmt 定义的时间格式

参数说明

语法:inotifywatch [-hvzrqf] [-e] [-t] [-a] [-d] […]
参数:
-h, –help
输出帮助信息
-v, –verbose
输出详细信息
@
排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–fromfile
从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以 @开头。
-z, –zero
输出表格的行和列,即使元素为空
–exclude
正则匹配需要排除的文件,大小写敏感。
例:要排除 /home/mjb 目录下的 test1,test2,cc 目录,可这样写 –exclude=”/home/mjb/(test1/|test2/|cc/)”。多个目录或文件一定要用“|”分开,不能在命令行中用两个 –exclude,否则最后的 –exclude 会覆盖其它的。系统只是在文件路径中查找是否有上面参数指定的字符,如果有就排除。因此在 test1 后面加了“/”。否则 /home/mjb/test123 也会被排除。
–excludei
正则匹配需要排除的文件,忽略大小写。
-r, –recursive
监视一个目录下的所有子目录。
-t , –timeout
设置超时时间
-e , –event
只监听指定的事件。
-a , –ascending
以指定事件升序排列。
-d , –descending
以指定事件降序排列。

可监听事件
access 文件读取
modify 文件更改。
attrib  文件属性更改,如权限,时间戳等。
close_write 以可写模式打开的文件被关闭,不代表此文件一定已经写入数据。
close_nowrite  以只读模式打开的���件被关闭。
close  文件被关闭,不管它是如何打开的。
open  文件打开。
moved_to  一个文件或目录移动到监听的目录,即使是在同一目录内移动,此事件也触发。
moved_from 一个文件或目录移出监听的目录,即使是在同一目录内移动,此事件也触发。
move  包括 moved_to 和 moved_from 
move_self 文件或目录被移除,之后不再监听此文件或目录。
create  文件或目录创建
delete  文件或目录删除
delete_self  文件或目录移除,之后不再监听此文件或目录
unmount  文件系统取消挂载,之后不再监听此文件系统。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-03/141996.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5735字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7822000
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛NAS硬件03:五盘位+N5105+双网口的成品NAS值得入手吗

星哥带你玩飞牛 NAS 硬件 03:五盘位 +N5105+ 双网口的成品 NAS 值得入手吗 前言 大家好,我...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...