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的更多相关文章

  1. 【转】Zabbix 3.0 从入门到精通(zabbix使用详解)

    [转]Zabbix 3.0 从入门到精通(zabbix使用详解) 第1章 zabbix监控 1.1 为什么要监控 在需要的时刻,提前提醒我们服务器出问题了 当出问题之后,可以找到问题的根源   网站/ ...

  2. (openssh、telnet、vsftpd、nfs、rsync、inotify、samba)

    (openssh.telnet.vsftpd.nfs.rsync.inotify.samba) 一:OpenSSH服务与Telnet服务(必须掌握) 前言:OpenSSH是加密传输,Telnet是明文 ...

  3. <程序员从入门到精通> -- How

    定位 自己才是职业生涯的管理者,想清楚自己的发展路径: 远期的理想是什么?近期的规划是什么?今日的任务和功课又是什么? 今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想? ...

  4. 【无私分享:从入门到精通ASP.NET MVC】从0开始,一起搭框架、做项目 目录索引

    索引 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(1)搭建MVC环境 注册区域 [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(2)创建 ...

  5. ASP.NET MVC4入门到精通系列目录汇总

    序言 最近公司在招.NET程序员,我发现好多来公司面试的.NET程序员居然都没有 ASP.NET MVC项目经验,其中包括一些工作4.5年了,甚至8年10年的,许多人给我的感觉是:工作了4.5年,We ...

  6. Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引

    因为内容比较多,所以每篇讲解一些内容,最后会放出全部代码,可以参考.操作中总会遇到各式各样的问题,个人对部分问题的研究在最后一篇 问题研究 里.欢迎大家探讨学习. 代码都经过个人测试,但仍可能有各种未 ...

  7. 1、ASP.NET MVC入门到精通——新语法

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 在学习ASP.NET MVC之前,有必要先了解一下C#3.0所带来的新的语法特性,这一点尤为重要,因为在MVC项目中我们利用C#3.0的新特 ...

  8. 5、ASP.NET MVC入门到精通——NHibernate代码映射

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 上一篇NHibernate学习笔记—使用 NHibernate构建一个ASP.NET MVC应用程序 使用的是xml进行orm映射,那么这一 ...

  9. 6、ASP.NET MVC入门到精通——ASP.Net的两种开发方式

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 目前,ASP.NET中两种主流的开发方式是:ASP.NET Webform和ASP.NET MVC.从下图可以看到ASP.NET WebFo ...

  10. 7、ASP.NET MVC入门到精通——第一个ASP.NET MVC程序

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 开发流程 新建Controller 创建Action 根据Action创建View 在Action获取数据并生产ActionResult传递 ...

随机推荐

  1. Dubbo SPI扩展机制源码详解(基于2.7.10)

    Dubbo SPI 一. 概述 本文主要分享 Dubbo 的拓展机制 SPI. 想要理解 Dubbo ,理解 Dubbo SPI 是非常必须的.在 Dubbo 中,提供了大量的拓展点,基于 Dubbo ...

  2. 高精度离线免费 的C#文字识别PaddleOCR库

    随便打开一个Microsoft Visual Studio,新建一个WinForms项目,从下面列表中随便选择一个NET框架.目标平台要设置成X64,该OCR仅支持64位. net35;net40;n ...

  3. 开发者说PaddleOCR的.NET封装与应用部署

  4. 创建 Vue3 项目

    前提条件 安装 Nodejs 下载:https://nodejs.org/en/download/prebuilt-installer 切换 npm 源 npm config set registry ...

  5. iOS 如何保持线程一直在运转

    1.简单的可以想到,写一个while循环 while (TRUE) { } 但是这种方式存在缺陷,将导致CPU占用100%,两个核. p.p1 { margin: 0; font: 12px &quo ...

  6. ztree.js 禁止点击事件和鼠标禁用

    先看样式 var _t = this; var setting = { view: { fontCss: { color: "#5E5F61" }, showIcon: true, ...

  7. 异步长传文件插件 jquery validate 前端验证

    异步文件上传插件:http://fex.baidu.com/webuploader/getting-started.html html5 FormData 可以实现无刷新上传  有空了解 FileRe ...

  8. 讲课 PPT 公开啦

    目前限于时间原因,只在 Github Pages 上托管了. 之后有时间会托管到 pythonanywhere 上,因为 Github Pages 是在太慢了.

  9. ETL工具-nifi干货系列 第十一讲 处理器UpdateAttribute使用教程

    1.在这里我们重温下nifi里面一个重要的概念FlowFile,如下图所示: FlowFile:FlowFile代表NiFi中的单个数据.nifi数据流中流动的就是flowfile,每个nifi处理器 ...

  10. .net core .net6 webapi 连接mysql 8

    1.表结构: CREATE TABLE `table2` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `myname` varchar(255) NOT NULL, ...