rsync

作用:

实现文件的备份

备份位置可以是当前主机,也可以是远程主机

备份过程可以是完全备份,也可以是增量备份

功能:

1)类似于cp的复制功能

将本地主机的一个文件复制到另一个位置下

2)将本地主机的文件推送到远程主机: 也可以是从远程主机拉取文件到本地

使用模式:

shell模式:

就是本地复制

远程shell模式:

可以利用ssh来实现数据的加密传输到远程主机

服务器模式:

rsync工作在守护进程模式下

列表模式:

类似ls

确保各主机时间一致

ntp

补充:

实现文件实时同步

rsync+inotify

rsync+ sersync

rsync: 只负责传递文件到远程主机

inotify/sersync: 将发生了改变的文件找出来

rsync:

模式1:local(本地模式)

  1. 格式:rsync [选项] 源位置... [目的位置]
  2. 选项:
  3.   -p 复制文件过程中,保持文件属性不变
  4.   -v: 显示复制过程信息
  5.   -a:使用归档模式 (如果复制目录必须使用此选项)
  6.   -z:在传输过程中,以压缩方式进行传输

模式2: 远程shell模式

  1. 格式:
  2.   Pull: rsync [选项...] [USER@]HOST:源地址... [目的地址]
  3.   Push: rsync [选项...] 源地址... [USER@]HOST:目的地址
  4. push:  
  5. # rsync -avz -e "ssh" 1.txt root@192.168.1.102:/var/robot/video
  6. sending incremental file list
  7. 1.txt

  8. sent 91 bytes received 34 bytes  14.71 bytes/sec
  9. total size is 20 speedup is 0.16

  10. pull
  11. # rsync -avz -e "ssh" root@192.168.1.102:/var/robot/video/1.txt /var/robot
  12. receiving incremental file list
  13. 1.txt

  14. sent 30 bytes received 84 bytes  32.57 bytes/sec
  15. total size is 20 speedup is 0.18

补充:

说明:rsync: 在传递文件的时候,会首先对比源和目的下的文件的特征码,只有在特征码不同的时候,才会进行传递。

重点说明:

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

  1. # rsync -avz -e ssh root@192.168.1.102:/var/robot/video/ /var/robot/
  2. receiving incremental file list
  3. ./
  4. 2.txt

  5. sent 33 bytes received 102 bytes  90.00 bytes/sec
  6. total size is 20 speedup is 0.15
  1. # echo "123123" >> 1.txt
  2. # rsync -avz -e ssh root@192.168.1.102:/var/robot/video/ /var/robot/
  3. receiving incremental file list
  4. 1.txt

  5. sent 36 bytes received 112 bytes  98.67 bytes/sec
  6. total size is 20 speedup is 0.14

模式3:守护进程模式 daemon

案例:将web1,web2上的数据备份到backup上

准备:

关闭:

selinux

关闭防火墙

配置时间同步

  1. 关闭:selinux
  2. #临时关闭
  3. setenforce 0
  4. #永久关闭
  5. sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
  6. #关闭防火墙
  7. systemctl disable --now firewalld.service
  8. #配置时间同步
  9. ntpdate ntp1.aliyun.com
  10. //也可以修改配置文件
  11. vim /etc/ntp.conf

第一步:配置backup上的rsync,让其工作在守护进程模式(配置服务器端)

1)修改配置文件 (若不存在创建)

  1.   #touch /etc/rsyncd.conf

内容如下:

  1. uid = rsync
  2. gid = rsync
  3. use chroot = yes
  4. max connections = 4
  5. timeout = 100
  6. pid file = /var/lock/rsync.pid
  7. lock file = /var/lock/rsync.lock
  8. log file = /var/log/rsync.log

  9. [mod]
  10. path = /var/robot/video
  11. read only = false
  12. hosts allow = 192.168.1.0/24
  13. auth users = vuser
  14. secrets file = /var/robot/video/rsync.passwd
  15. list = false

2)创建相关目录

  1. mkdir -p /var/robot/video

3)创建运行rsync的系统用户

  1. groupadd -r rsync
  2. useradd -r -s /sbin/nologin -g rsync rsync

4)启动rsync

  1. ~# rsync --daemon

补充:

rsync默认配置文件/etc/rsyncd.conf

如果想使用其他位置配置文件,可以--config=/path/to/confiFile

  1. rsync --daemon --config=/home/agc.conf

5)检查rsync的端口 (默认873)

  1. ~# lsof -i :873
  2. COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
  3. rsync   26152 root   5u IPv4 110834     0t0 TCP *:rsync (LISTEN)
  4. rsync   26152 root   6u IPv6 110835     0t0 TCP *:rsync (LISTEN)

6)创建虚拟用户文件,以及相关的虚拟用户

  1. ~# mkdir -p /var/robot/video
  2. ~# touch rsync.passwd
  3. ~# chmod 600 rsync.passwd (该文件的权限必须是600
  4. ~# chown rsync.rsync rsync.passwd
  5. ~#chown -R rsync:rsync /var/robot/video
  6. ~#chmod 750 /var/robot/video
  7. ~# vim rsync.passwd
  8.   vuser:123123

补充:

虚拟用户就是这个我文件中的记录

一个用户占一行,冒号前是用户名,冒号后是用户密码

第二部:配置客户端

1) 创建密码文件(权限要求为600)

  1. echo "123123" > /etc/rsync.password
  2. chmod 600 /etc/rsync.password

2)用rsync来传递数据到服务器的端模块mod中

使用格式:

  1.     rsync [options] [user@]host::modulename /path

  2.     rsync [options] /path/ [user@]host::modulename

  3. rsync -avz /var/robot/video vuser@host::mod --password-file=/etc/rsync.password
  1.  

说明:

--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>)

实例:

  1. @web1 ~]#inotifywait -mrq --timefmt "%F%T" --format "%T %w%f %e" -e create,delete,modify /var/robot/video/
  2. @web1 video]# touch 1.txt
  3. web1 ~]# inotifywait -mrq --timefmt "%F%T" --format "%T %w%f %e" -e create,delete,modify /var/robot/video/
  4. 2024-07-1915:11:58 /var/robot/video/1.txt CREATE

实时监控脚本如下:

  1. #!/bin/bash
  2. prog="inotifywait"
  3. events="create,delete,modify,attrib"
  4. iopt="-mrq"

  5. lpath="/var/robot/video"

  6. rhost="192.168.1.10"
  7. user="vuser"
  8. secfile="/etc/rsync.passwd"
  9. ropt="-az"
  10. modName="mod"


  11. $prog $iopt --format "%w%f" -e $events $lpath | while read line
  12. do
  13. rsync $ropt $line $user@$rhost::$modName --password-file=$secfile
  14. 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. Django——form组件之循环生成标签

    from django.contrib import admin from django.urls import path from app01.views import index urlpatte ...

  2. Android 13 - Media框架(19)- ACodec(一)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节我们将会一起了解 ACodec 的设计方式,在看具体的实现细节前我们要先了解它内部的状态转换机制,这也是ACodec的核心难点之一. 1.AH ...

  3. React 的 KeepAlive 探索

    什么是 KeepAlive? 用过 Vue 的童鞋都知道 Vue 官方自带了 Keep-Alive 组件,它能够使组件在切换时仍能保留原有的状态信息,并且有专门的生命周期方便去做额外的处理.该组件在很 ...

  4. 容器化tomcat9.0

    #启动tomcat容器: docker run -d --name tomcat9.0 -p 8080:8080 registry.cn-hangzhou.aliyuncs.com/chenleile ...

  5. UINavgationBar事件穿透

    一.事件起因 最近在开发一版本的需求中,遇到一个问题,需要在一个ViewController的顶部,UINavgationBar的下面放置一个View,这个View需要能够正常收到事件 将我们的Vie ...

  6. uniapp 添加操作

    1 分析: 2 需要动态的向数据库中插入数据,既然要进行添加操作,就会触发一个点击的事件,所以我们的第一步就是要先绑定事件 3 向服务器进行请求接口操作,请求的方法为 'POST' 4 最后就是在me ...

  7. 支付宝支付jemter 插件,导入到高版本jmeter 中使用

    官方支付宝压力测试文档中: 蚂蚁金服开放平台 - 文档中心 (alipay.com) 有个 temp.jmx 文件(http://p.tb.cn/rmsportal_10157_temp.jmx.zi ...

  8. 论文阅读 《Pingmesh: A Large-Scale System for Data Center Network Latency Measurement and Analysis》

    背景 在我们内部产品中,一直有关于网络性能数据监控需求,我们之前是直接使用 ping 命令收集结果,每台服务器去 ping (N-1) 台,也就是 N^2 的复杂度,稳定性和性能都存在一些问题,最近打 ...

  9. Python 调整PDF页面尺寸大小

    在处理PDF文件时,我们可能会遇到这样的情况:原始PDF文档不符合我们的阅读习惯,或者需要适配不同显示设备等.这时,我们就需要及时调整PDF文档中的页面尺寸,以满足不同应用场景的需求. 利用Pytho ...

  10. Exception:kylin构建cube, Cannot modify mapReduce.queue.name at runtime

    Failed to open new session: java.lang.IllegalArgumentException: Cannot modify tez.queue.name at runt ...