入门到精通rsync和inotify
rsync
作用:
实现文件的备份
备份位置可以是当前主机,也可以是远程主机
备份过程可以是完全备份,也可以是增量备份
功能:
1)类似于cp的复制功能
将本地主机的一个文件复制到另一个位置下
2)将本地主机的文件推送到远程主机: 也可以是从远程主机拉取文件到本地
使用模式:
shell模式:
就是本地复制
远程shell模式:
可以利用ssh来实现数据的加密传输到远程主机
服务器模式:
rsync工作在守护进程模式下
列表模式:
类似ls
确保各主机时间一致
ntp
补充:
实现文件实时同步
rsync+inotify
rsync+ sersync
rsync: 只负责传递文件到远程主机
inotify/sersync: 将发生了改变的文件找出来
rsync:
模式1:local(本地模式)
格式:rsync [选项] 源位置... [目的位置]
选项:
-p: 复制文件过程中,保持文件属性不变
-v: 显示复制过程信息
-a:使用归档模式 (如果复制目录必须使用此选项)
-z:在传输过程中,以压缩方式进行传输
模式2: 远程shell模式
格式:
Pull: rsync [选项...] [USER@]HOST:源地址... [目的地址]
Push: rsync [选项...] 源地址... [USER@]HOST:目的地址
push:
# rsync -avz -e "ssh" 1.txt root@192.168.1.102:/var/robot/video
sending incremental file list
1.txt
sent 91 bytes received 34 bytes 14.71 bytes/sec
total size is 20 speedup is 0.16
pull
# rsync -avz -e "ssh" root@192.168.1.102:/var/robot/video/1.txt /var/robot
receiving incremental file list
1.txt
sent 30 bytes received 84 bytes 32.57 bytes/sec
total size is 20 speedup is 0.18
补充:
说明:rsync: 在传递文件的时候,会首先对比源和目的下的文件的特征码,只有在特征码不同的时候,才会进行传递。
重点说明:
工作中通常都是用rsync+ssh密钥认证方式,目的是为了用免密登录。
# rsync -avz -e ssh root@192.168.1.102:/var/robot/video/ /var/robot/
receiving incremental file list
./
2.txt
sent 33 bytes received 102 bytes 90.00 bytes/sec
total size is 20 speedup is 0.15
# echo "123123" >> 1.txt
# rsync -avz -e ssh root@192.168.1.102:/var/robot/video/ /var/robot/
receiving incremental file list
1.txt
sent 36 bytes received 112 bytes 98.67 bytes/sec
total size is 20 speedup is 0.14
模式3:守护进程模式 daemon
案例:将web1,web2上的数据备份到backup上
准备:
关闭:
selinux
关闭防火墙
配置时间同步
关闭:selinux
#临时关闭
setenforce 0
#永久关闭
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
#关闭防火墙
systemctl disable --now firewalld.service
#配置时间同步
ntpdate ntp1.aliyun.com
//也可以修改配置文件
vim /etc/ntp.conf
第一步:配置backup上的rsync,让其工作在守护进程模式(配置服务器端)
1)修改配置文件 (若不存在创建)
#touch /etc/rsyncd.conf
内容如下:
uid = rsync
gid = rsync
use chroot = yes
max connections = 4
timeout = 100
pid file = /var/lock/rsync.pid
lock file = /var/lock/rsync.lock
log file = /var/log/rsync.log
[mod]
path = /var/robot/video
read only = false
hosts allow = 192.168.1.0/24
auth users = vuser
secrets file = /var/robot/video/rsync.passwd
list = false
2)创建相关目录
mkdir -p /var/robot/video
3)创建运行rsync的系统用户
groupadd -r rsync
useradd -r -s /sbin/nologin -g rsync rsync
4)启动rsync
~# rsync --daemon
补充:
rsync默认配置文件/etc/rsyncd.conf
如果想使用其他位置配置文件,可以--config=/path/to/confiFile
rsync --daemon --config=/home/agc.conf
5)检查rsync的端口 (默认873)
~# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 26152 root 5u IPv4 110834 0t0 TCP *:rsync (LISTEN)
rsync 26152 root 6u IPv6 110835 0t0 TCP *:rsync (LISTEN)
6)创建虚拟用户文件,以及相关的虚拟用户
~# mkdir -p /var/robot/video
~# touch rsync.passwd
~# chmod 600 rsync.passwd (该文件的权限必须是600)
~# chown rsync.rsync rsync.passwd
~#chown -R rsync:rsync /var/robot/video
~#chmod 750 /var/robot/video
~# vim rsync.passwd
vuser:123123
补充:
虚拟用户就是这个我文件中的记录
一个用户占一行,冒号前是用户名,冒号后是用户密码
第二部:配置客户端
1) 创建密码文件(权限要求为600)
echo "123123" > /etc/rsync.password
chmod 600 /etc/rsync.password
2)用rsync来传递数据到服务器的端模块mod中
使用格式:
rsync [options] [user@]host::modulename /path
rsync [options] /path/ [user@]host::modulename
rsync -avz /var/robot/video vuser@host::mod --password-file=/etc/rsync.password
说明:
--password-file= 系统可以自动从该位置下指定的文件中读取密码
总结:
服务器端的配置
1,创建配置文件
2,创建密码文件,修改权限为600
3,创建系统用户
4,创建模块对应的目录,修改目录的属主,属组为系统用户
5,启动damon模式
客户端的配置
1,创建虚拟用户的密码文件,权限为600
2,向模块传递文件或者从目录拉取文件
如果出现错误
第一步; 检查日志
第二部: 检查selinux,iptables是否启动
第三步:检查虚拟用户的文件名称是否正确,权限是否正确
补充:
--delete:让客户端和服务器端的文件完全一致
--exclude:在进行文件传送的时候,排除指定的文件
排除实现方式(客户端)
方式一:排除一个文件
--exclude=file
方式二:排除多个文件
--exclude={file1,file2}
方式3:通配符的方式
排除实现方式(服务端)
在配置文件中添加一个关键字 exclude:这里指定要排除的文件列表,列表中的内容以空格为分隔符
例子:
exclude = a.txt b.txt c.txt
完全同步原理
在文件的传输过程中
发送方有的,会直接传输到接收方
发送方没有的,但是接收方有的文件,则会删除
rsyncd.conf的基本构成
全局参数
......
[模块1]
模块参数
. . . . . .
[模块2]
模块参数
. . . . . .
全局参数
pid file: 指定rsync进程的pid文件的路径和名称
lock file: 指定rsync进程的所文件的路径和名称
log file: rsync的日志文件路径和名称
uid:指定rsync进程以什么身份在后台运行,(必须是系统用户)
gid:指定用户组
模块参数 (可以写在全局部分,如果写在全局部分,则对所有的模块都生效)
path:指定备份目录的路径
use chroot: 是否将用户锁定在家目录中
max connections:指定可以进行同时连接的用户的最大数量
read only:true|false
write only:true|false
list=true|false:设置是否可以显示全部的模块列表
auth users:指定访问模块需要使用的用户名,这里的是虚拟用户(不是存在/etc/password)
secrets file: 指定保存虚拟用户名和密码的数据库文件
hosts allow:指定可以访问模块或者rsync服务器端的ip地址
hosts deny:黑名单
timeout:指定空闲超时时间
补充:
两个参数都没有的时候,那么所有用户都可以任意访问
只有allow,那么仅仅允许白名单的用户可以访问模块
只有deny,那么仅仅是黑名单的用户禁止访问模块
两个参数都存在,优先检查白名单
如果匹配成功,则允许访问
如果匹配失败,就去检查黑名单,如果匹配成功则禁止访问
如果都没匹配成功,则允许访问呢
文件实时同步
rsync+inotify
rsync+sersync
inotify
软件
功能:
可以监控指定目录下的文件
当文件发生了改变,则会触发事件,这样就可以输出触发事件的文件的信息
监控事件
创建
删除
修改
移动
epel
安装位置
客户端
应用程序:
/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_nowrote: 当文件从只读模式下关闭的时候,会触发该事件
close:无论以什么方式打开文件,再关闭文件的时候,都会触发该事件
open:当文件被打开的时候,会触发该事件
moved——to:当一个文件被移动到该目录,就会触发该事件
moved_from:当一个文件,从监控目录下移走的时候,触发该事件
moved_self: 在监控目录下执行移动操作,就会触发该事件
move:只要发生了文件的移动,就会触发该事件
create:创建文件的事件
delete:删除文件的事件
-- timefmt <fmt>: 指定输出发生这个事件的时间点的显示格式
--format <ftm>: 指定的当发生事件以后所输出的信息,以及输出的个数
%f:记录发生事件的文件名
%w:记录发生事件的文件所在的目录的绝对路径
%e:记录发生事件的名称(如果有多个事件多个事件用空格分隔)
%xe:记录发生事件的名称(如果有多个事件,多个事件用X分隔)
%T:输出发生事件的时间(时间的格式由 --timefmt <fmt>)
实例:
@web1 ~]#inotifywait -mrq --timefmt "%F%T" --format "%T %w%f %e" -e create,delete,modify /var/robot/video/
@web1 video]# touch 1.txt
web1 ~]# inotifywait -mrq --timefmt "%F%T" --format "%T %w%f %e" -e create,delete,modify /var/robot/video/
2024-07-1915:11:58 /var/robot/video/1.txt CREATE
实时监控脚本如下:
#!/bin/bash
prog="inotifywait"
events="create,delete,modify,attrib"
iopt="-mrq"
lpath="/var/robot/video"
rhost="192.168.1.10"
user="vuser"
secfile="/etc/rsync.passwd"
ropt="-az"
modName="mod"
$prog $iopt --format "%w%f" -e $events $lpath | while read line
do
rsync $ropt $line $user@$rhost::$modName --password-file=$secfile
done
主要:
在实际使用的时候,需要首先进行一次完全备份(rsync)
然后在执行脚本进行实时监控
入门到精通rsync和inotify的更多相关文章
- 【转】Zabbix 3.0 从入门到精通(zabbix使用详解)
[转]Zabbix 3.0 从入门到精通(zabbix使用详解) 第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源 网站/ ...
- (openssh、telnet、vsftpd、nfs、rsync、inotify、samba)
(openssh.telnet.vsftpd.nfs.rsync.inotify.samba) 一:OpenSSH服务与Telnet服务(必须掌握) 前言:OpenSSH是加密传输,Telnet是明文 ...
- <程序员从入门到精通> -- How
定位 自己才是职业生涯的管理者,想清楚自己的发展路径: 远期的理想是什么?近期的规划是什么?今日的任务和功课又是什么? 今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想? ...
- 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引
索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(1)搭建MVC环境 注册区域 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(2)创建 ...
- ASP.NET MVC4入门到精通系列目录汇总
序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...
- Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引
因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...
- 1、ASP.NET MVC入门到精通——新语法
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...
- 5、ASP.NET MVC入门到精通——NHibernate代码映射
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一篇NHibernate学习笔记—使用 NHibernate构建一个ASP.NET MVC应用程序 使用的是xml进行orm映射,那么这一 ...
- 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC.从下图可以看到ASP.NET WebFo ...
- 7、ASP.NET MVC入门到精通——第一个ASP.NET MVC程序
本系列目录:ASP.NET MVC4入门到精通系列目录汇总 开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递 ...
随机推荐
- Dubbo SPI扩展机制源码详解(基于2.7.10)
Dubbo SPI 一. 概述 本文主要分享 Dubbo 的拓展机制 SPI. 想要理解 Dubbo ,理解 Dubbo SPI 是非常必须的.在 Dubbo 中,提供了大量的拓展点,基于 Dubbo ...
- 高精度离线免费 的C#文字识别PaddleOCR库
随便打开一个Microsoft Visual Studio,新建一个WinForms项目,从下面列表中随便选择一个NET框架.目标平台要设置成X64,该OCR仅支持64位. net35;net40;n ...
- 开发者说PaddleOCR的.NET封装与应用部署
- 创建 Vue3 项目
前提条件 安装 Nodejs 下载:https://nodejs.org/en/download/prebuilt-installer 切换 npm 源 npm config set registry ...
- iOS 如何保持线程一直在运转
1.简单的可以想到,写一个while循环 while (TRUE) { } 但是这种方式存在缺陷,将导致CPU占用100%,两个核. p.p1 { margin: 0; font: 12px &quo ...
- ztree.js 禁止点击事件和鼠标禁用
先看样式 var _t = this; var setting = { view: { fontCss: { color: "#5E5F61" }, showIcon: true, ...
- 异步长传文件插件 jquery validate 前端验证
异步文件上传插件:http://fex.baidu.com/webuploader/getting-started.html html5 FormData 可以实现无刷新上传 有空了解 FileRe ...
- 讲课 PPT 公开啦
目前限于时间原因,只在 Github Pages 上托管了. 之后有时间会托管到 pythonanywhere 上,因为 Github Pages 是在太慢了.
- ETL工具-nifi干货系列 第十一讲 处理器UpdateAttribute使用教程
1.在这里我们重温下nifi里面一个重要的概念FlowFile,如下图所示: FlowFile:FlowFile代表NiFi中的单个数据.nifi数据流中流动的就是flowfile,每个nifi处理器 ...
- .net core .net6 webapi 连接mysql 8
1.表结构: CREATE TABLE `table2` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `myname` varchar(255) NOT NULL, ...