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. Python OpenCV #1 - OpenCV介绍

    一.OpenCV介绍 1.1 OpenCV-Python教程简介 OpenCV由 Gary Bradsky 于1999年在英特尔创立,第一个版本于2000年发布. Vadim Pisarevsky 加 ...

  2. Flutter TextField开始输入中文的时候,被打断导致错误输入字母问题

    一.Bug样例 建立一个web demo flutter run -d chrome --web-renderer html 出现问题: 输入中文的时候,比如打字 hao, 第一个字母h会先输入,变成 ...

  3. 《剑指offer - 题目2》

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.   注意方 ...

  4. uniapp 复选框全选(基于colorui组件)

    说明:本案例的样式基于colorui组件库 感兴趣的小伙伴可以看下教程 colorui组件库开发文档或者csdn的文档,顺便再分享下 colorui的群资源 html <checkbox-gro ...

  5. python+k8s(基础,遇到的问题)

    python+k8s(基础,遇到的问题) CoreV1Api和ApiClient的区别 kubernetes.client.CoreV1Api kubernetes.client.ApiClient ...

  6. Linux进程间通信-FIFO(命名管道)

    本系列文章主要是学习记录Linux下进程间通信的方式. 常用的进程间通信方式:管道.FIFO.消息队列.信号量以及共享存储. 参考文档:<UNIX环境高级编程(第三版)> 参考视频:Lin ...

  7. Centos安装Redis(极速安装)

    下载 从官网找到下载文件,我下载的是redis-6.0.16.tar.gz. 安装 1. 解压文件 解压文件然后,进入解压文件夹: tar -zxvf redis-6.0.16.tar.gz cd r ...

  8. mysql删除主键索引,删除索引语法

    mysql删除主键索引,删除索引语法 ### Incorrect table definition; there can be only one auto column and it must be ...

  9. linux elasticsearch-8.2.0安装

    1.下载,解压缩,命令行前不要留空格 官网下载地址: https://www.elastic.co/cn/downloads/elasticsearch https://artifacts.elast ...

  10. 基于SDF的光照效果

    基于SDF的光照效果 好久没写博客了,怠惰了,就当爬了一步 原神二次元风格面部渲染 效果 Show me the code Shader "Unlit/SDF" { Propert ...