rsync 远程同步+inotify实时同步部署

news2024/11/22 17:02:16

目录

  • 一、rsync概述
    • 1.1 rsync服务器
    • 1.2 同步方式
      • 1.2-1 全量备份
      • 1.2-2 增量备份
      • 1.2-3 rsync同步源服务器
      • 1.2-4 scp与rsync的区别
  • 二、配置rsync源
    • 2.1 基本思路
    • 2.2 配置文件rsyncd.conf
    • 2.3 独立的账号文件
    • 2.4 启用rsync服务
    • 2.5 rsync功能及特点
      • 2.5-1 rsync功能
      • 2.5-2 rsync特点
    • 2.6 与rsync相同类型的服务
    • 2.7 cp与rsync的比较
  • 三、rsync命令
  • 四、配置源的两种方式
  • 五、inotify概述
  • 六、配置rsync
    • 6.1 配置rsync源服务器
    • 6.2 发起端
    • 6.3 免交互格式配置
  • 七、发起端配置 rsync+inotify
    • 7.1 修改rsync源服务器配置文件
    • 7.2 调整 inotify 内核参数
    • 7.3 安装 inotify-tools
    • 7.4 在另外一个终端编写触发式同步脚本


一、rsync概述

1.1 rsync服务器

①.rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。

②.rsync软件适用于unix/linux/windows等多种操作系统平台

③.rsync是一个快速和非常同样的文件复制工具。它能本能复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制

④.以其delta-transfer算法闻名。

⑤.rsync监听端口:873

⑥.rsync运行模式:C/S

1.2 同步方式

1.2-1 全量备份

  • 原有的数据全部传送
  • 把原来的文件和新的文件一起统一传送
    (全量复制,效率低)

1.2-2 增量备份

在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输。

(增量复制,效率高)

1.2-3 rsync同步源服务器

在远程同步任务中,负责发起 rsync 同步操作的客户机称为发起端,而负责响应来自客户机的 rsync 同步操作的服务器称为同步源。

在下行同步(下载)中,同步源负责提供文档的原始位置,发起端应对该位置有读取权限。
在上行同步(上传)中,同步源负责提供文档的目标位置,发起端应对该位置具有写入权限。
在这里插入图片描述

1.2-4 scp与rsync的区别

(1)功能差距

  • rsync远程拷贝可以附带软链接/硬链接。(参数-l 保留软链接,-H 保留硬链接)
  • scp不支持链接的拷贝。

(2)效率差异
简单的解析scp和rsync,前是复制,后是同步。

rsync和scp在文件夹均不存在时,执行时间相差不大,但是文件夹存在的情况下差异很大。原因是scp是复制:若目的地文件不存在则新建,若存在则覆盖。而rsync是同步,比较两边文件是否相同,相同的话,就什么都不做,若存在差异就直接更新。

起到同步的作用时用rsync会快一些,起到复制作用时两者均可(目的地无文件)。视情况来选择rsync或scp。

二、配置rsync源

2.1 基本思路

  • 建立rsyncd.conf配置文件、独立的账号文件
  • 启用rsync的 --daemon模式

2.2 配置文件rsyncd.conf

认证配置auth users、secrets file,不加则为匿名

2.3 独立的账号文件

  • 用户名:密码
  • 每行一个用户记录
  • 独立的账号数据,不依赖系统账号

2.4 启用rsync服务

  • 通过 --daemon独自提供服务,rsync --daemon
  • 执行kill $(cat /var/run/rsyncd.pid)关闭服务

2.5 rsync功能及特点

2.5-1 rsync功能

作为命令:实现本地-远程文件同步
作为服务:实现本地-远程文件同步

2.5-2 rsync特点

  • 可以镜像保存整个目录树和文件系统
  • 可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等
  • 传输效率高,使用同步算法,只比较变化的
  • 支持匿名传输,方便网站镜像;也可以做验证,加强安全

2.6 与rsync相同类型的服务

  • sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
  • async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。
  • rsync 远程同步:remote synchronous

2.7 cp与rsync的比较

  • cp将源文件完整复制到指定路径下 全备
  • rsync 做本地复制的时候
  • 先将源文件和目标文件进行比较,找出差异部分
  • 根据目的位置的文件与源文件差异的部分,进行一致性同步
  • scp:secure copy 同样是用来进行远程复制的命令,但是每次备份数据都是完全备份

三、rsync命令

命令使用的语法

rsync 【选项】原始位置 目标位置

常用选项
在这里插入图片描述
–delete的作用简单来说,就是删除差异文件,保留一致性

四、配置源的两种方式

格式一:

用户名@主机地址::共享模块名

格式二:

rsync://用户名@主机地址/共享模块名

五、inotify概述

可以监控文件系统的变动情况,并做出通知响应

  • 调整inotify内核参数(优化)
  • /etc/sysctl.conf(内核参数配置文件)
max_queue_events         #监控事件队列大小

max_user_instances        #最多监控实例数

max_user_watches          #每个实例最多监控文件数
  • notifywait:用于持续监控,实时输出结果
  • inotifywatch:用于短期监控,任务完成后再输出结果
  inotifywait -mrq -e modify,create,move,delete /var/www/html

在这里插入图片描述

六、配置rsync

rsync源服务器 192.168.154.10
rsync发起端 192.168.154.11

6.1 配置rsync源服务器

#关闭防火墙和核心防护
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
rpm -q rsync	#一般系统已默认安装rsync

#建立/etc/rsyncd.conf 配置文件
vim /etc/rsyncd.conf		#添加以下配置项
uid = root
gid = root
use chroot = yes										#禁锢在源目录
address = 192.168.154.10								#监听地址
port = 873												#监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/log/rsyncd.log							#日志文件位置
pid file = /var/run/rsyncd.pid							#存放进程 ID 的文件位置
hosts allow = 192.168.154.0/24							#允许访问的客户机地址
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z		#同步时不再压缩的文件类型

[wwwroot]												#共享模块名称
path = /var/www/html									#源目录的实际路径
comment = Document Root of www.kgc.com
read only = yes											#是否为只读
auth users = backuper									#授权账户,多个账号以空格分隔
secrets file = /etc/rsyncd_users.db						#存放账户信息的数据文件

在这里插入图片描述
在这里插入图片描述

如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。
#为备份账户创建数据文件
vim /opt/rsyncd_users.db
backuper:abc123					#无须建立同名系统用户

chmod 600 /opt/rsyncd_users.db

在这里插入图片描述
在这里插入图片描述

#保证所有用户对源目录/var/www/html 都有读取权限
mkdir -p /var/www/html
chmod +r /var/www/html/
ls -ld /var/www/html/

在这里插入图片描述

#启动 rsync 服务程序
rsync --daemon				#启动 rsync 服务,以独立监听服务的方式(守护进程)运行 

netstat -anpt | grep rsync

在这里插入图片描述

cat /var/run/rsyncd.pid 
cd html/
cp /etc/passwd /etc/shadow /etc/fstab ./

在这里插入图片描述

6.2 发起端

基本格式:rsync [选项] 原始位置 目标位置

常用选项:
-r:递归模式,包含目录及子目录中的所有文件。
-l:对于符号链接文件仍然复制为符号链接文件。
-v:显示同步过程的详细(verbose)信息。
-z:在传输文件时进行压缩(compress)。
-p:保留文件的权限标记。
-t:保留文件的时间标记。 (atime访问时间,mtime修改内容时间,ctime修改文件时间)
-g:保留文件的属组标记(仅超级用户使用)。
-o:保留文件的属主标记(仅超级用户使用)。
-H:保留硬连接文件。
-a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。
-A:保留 ACL 属性信息。
-D:保留设备文件及其他特殊文件。
–delete:删除目标位置有而原始位置没有的文件。
–checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。

#192.168.154.11
mkdir /data
rsync -avc backuper@192.168.154.10::wwwroot /data/

在这里插入图片描述

#rsync源服务器 192.168.154.10
rm -rf fstab 
cp /etc/hostname /etc/os-release  ./

在这里插入图片描述

#192.168.154.11
rsync -avz rsync://backuper@192.168.154.10/wwwroot /data

在这里插入图片描述
rsync源服务器的fstab删掉了,但发起端的没有删掉,要跟rsync源服务器同步

rsync -avz --delete rsync://backuper@192.168.154.10/wwwroot /data

在这里插入图片描述

–delete 删除目标有,而原位置没有的文件

6.3 免交互格式配置

rsync源服务器

rm -f *
echo a > a 
echo b > b
echo c > c
echo d > d

在这里插入图片描述
发起端

cd /opt
vim rsync_pass
cat rsync_pass 
chmod 600 rsync_pass 

在这里插入图片描述

#发起端
rsync -az --delete --password-file=/opt/rsync_pass backuper@192.168.154.10::wwwroot /data/

crontab -e -u root
crontab -l
systemctl restart crond
systemctl enable crond

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

rsync -avz -e 'ssh -p 22' /var/www/html/index.html root@192.168.154.10:/opt/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#发起端
rsync -az --password-file=/opt/rsync_pass /etc/yum.repos.d/ backuper@192.168.154.10::wwwroot

rsync服务器收到了发起端的文件
在这里插入图片描述
rsync 有两种常用的认证方式,一种为 rsync-daemon 方式,另外一种则是 ssh。在一些场合,使用 rsync-daemon 方式会比较缺乏灵活性,ssh 方式则成为首选。
-e ‘ssh -p 22’:rsync 使用 ssh 指定端口,端口如果是 22 默认端口则不用指定该参数。

rsync -avz -e 'ssh -p 22' /etc/yum.repos.d/  root@192.168.154.10::/opt/rh

在这里插入图片描述

在这里插入图片描述

七、发起端配置 rsync+inotify

使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。
因为 inotify 通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。

7.1 修改rsync源服务器配置文件

vim /etc/rsyncd.conf
......
read only = no											#关闭只读,上行同步需要可以写

kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
rsync --daemon	
netstat -anpt | grep rsync

chmod 777 /var/www/html/

7.2 调整 inotify 内核参数

在Linux内核中,默认的inotify机制提供了三个调控参数:max_queue_events(监控事件队列,默认值为16384)、max_user_instances(最多监控实例数,默认值为128)、max_user_watches(每个实例最多监控文件数,默认值为8192)。当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。

cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches

vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

sysctl -p

在这里插入图片描述
在这里插入图片描述

7.3 安装 inotify-tools

用 inotify 机制还需要安装 inotify-tools,以便提供 inotifywait、inotifywatch 辅助工具程序,用来监控、汇总改动情况。
inotifywait:可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。
inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。

tar zxvf inotify-tools-3.14.tar.gz -C /opt/

cd /opt/inotify-tools-3.14
./configure
make && make install

在这里插入图片描述

#可以先执行“inotifywait”命令,然后另外再开启一个新终端向 /var/www/html 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。

inotifywait -mrq -e modify,create,move,delete /var/www/html

选项“-e”:用来指定要监控哪些事件
选项“-m”:表示持续监控
选项“-r”:表示递归整个目录
选项“-q”:简化输出信息
在这里插入图片描述

7.4 在另外一个终端编写触发式同步脚本

(注意,脚本名不可包含 rsync 字符串,否则脚本可能不生效)

vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/opt/rsyncd_users.db /var/www/html/ backuper@192.168.154.10::wwwroot/"
#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录
$INOTIFY_CMD | while read DIRECTORY FILE EVENT
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
	#如果rsync未在执行,则立即启动
        $RSYNC_CMD
    fi
done


chmod +x /opt/inotify.sh
chmod 777 /var/www/html/
chmod +x /etc/rc.d/rc.local
echo 'nohup /opt/inotify.sh &' >> /etc/rc.d/rc.local				#加入开机自动执行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上述脚本用来检测本机/var/www/html 目录的变动情况,一旦有更新触发 rsync 同步操作,上传备份至服务器 192.168.154.10 的 wwwroot 共享目录下。
触发式上行同步的验证过程如下:
(1)在本机运行 /opt/inotify.sh 脚本程序。
(2)切换到本机的 /var/www/html 目录,执行增加、删除、修改文件等操作。
(3)查看远端服务器中的 wwwroot 目录下的变化情况。

使用rsync来实现快速删除大量文件。
假如要在linux下删除大量文件,比如100万、1000万,像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf * 可能就不好使了,因为要等待很长一段时间。在这种情况下我们可以使用rsync来巧妙处理。rsync实际用的是替换原理。

先建立一个空的文件夹:

mkdir /home/blank

用rsync删除目标目录:
rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp/
这样目标目录很快就被清空了
选项说明:
–delete-before 接收者在传输进行删除操作
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-H 保持硬连接的文件
-v 详细输出模式
–progress 在传输时显示传输过程
–stats 给出某些文件的传输状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++综合学习

1.函数调用 传值调用:在函数内部修改形式参数,不改编实际参数的值;引用调用:即指针调用,传入的是变量的指针,则在函数内部修改形式参数,实际参数跟着改变。 2. 数组 数组名即该数组的首地址&a…

chatgpt赋能Python-python_9

Python 9:提高SEO排名的最佳解决方案 对于许多公司和品牌,搜索引擎优化(SEO)是一项至关重要的任务。仅依靠传统广告和宣传的时代已经过去了,现在需要利用搜索引擎来增加流量和吸引更多客户。而Python 9则是一款已经被…

Linux权限2详解

粘滞位 现在我们学习了目录和普通文件的权限后,对这两种类型的文件权限都有了深刻的理解和认识,但是这又衍生出了一个新问题,这些目录/普通文件的使用都很局限,一旦设定了权限,别人都无法访问。 举个生活的例子&#x…

Jmeter性能测试工具之性能测试的概念

性能测试的概念 性能测试是指通过特定方式,对被测系统按照一定策略施加压力,获取系统 响应时间、TPS(Transaction Per Second)、吞吐量、资源利用率等性能指标,以期保证生产系统的性能能够满足用户需求的过程。 性能…

坚持刷题2个月,终于......

最近一个读者和我反馈,他坚持刷题2个月,终于去了他梦寐以求的大厂,薪资涨幅非常可观,期间面字节跳动还遇到了原题…并表示目前国内的大厂和一些独角兽,已经越来越效仿硅谷公司的做法,通过面试给定题&#x…

存放页的大池子——InnoDB表空间

在上一章节中,我们知道了提到了表空间,表空间里面没有直接存放表,有的是许多许多的页,我们也说了表空间的分类,有系统表空间,独立表空间,其他表空间。 每个新建的表都会在对应的数据库目录里面…

性能优化之影响分析

页面性能的影响 性能非常重要,而具体反映到我们的业务场景中,可能会有如下影响: 不利于用户留存 站点页面的展现速度非常影响用户体验,很多用户会因等待的不耐而放弃站点。研究表明,47 % 的消费者希望页面能够在 2s …

chatgpt赋能Python-python_bonjour

Python Bonjour: 通过Python实现Bonjour协议 介绍 Bonjour是苹果公司推出的一种新型、免配置的网络协议,它可以使局域网中的电脑、打印机、电话等各种设备自动发现及配置,从而促进了网络设备的普及。Python作为一种高效、简洁、易学的语言&…

【WSN覆盖】基于麻雀搜索算法的三维混合无线传感器网络覆盖优化 三维WSN覆盖空洞修复【Matlab代码#25】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. SSA算法2. 节点感知模型3. 三维混合WSN覆盖问题4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法,获取资源请见文章第6节:资源获取】 1. SSA算法 2. 节…

机器学习与深度学习——通过奇异值分解算法压缩图片

机器学习与深度学习——通过奇异值分解算法压缩图片 什么是奇异值分解? 奇异值分解(Singular Value Decomposition,SVD)是一种重要的线性代数方法,用于将一个矩阵分解成三个部分的乘积形式。它的应用非常广泛&#x…

Leecode98

leecode98 验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 &#x1…

【Linux】shell编程—Here Document免交互

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、免交互概述二、免交互常规用法1.read 命令的读取2.wc -l 的内容行数统计3.passwd用户密码的修改4.cat 查看内容并输出到文件中5.cat 查看交互内容并输出到新的文…

Spring传播机制(七种)

一、概述 Spring在TransactionDefinition接口中规定了7种类型的事务传播行为。Propagation枚举则引用了这些类型,开发过程中我们一般直接用Propagation枚举。 1.1 Propagation源码 public enum Propagation {REQUIRED(0),SUPPORTS(1),MANDATORY(2),REQUIRES_NEW(…

redis源码浅析-ziplist实现

redis中的list是有多种实现的,其中一种是ziplist,其介绍如下 ziplist 是一个经过特殊编码的双向链表,旨在提高内存效率。 它存储字符串和整数值,其中整数被编码为实际整数而不是一系列字符。 它允许在 O(1) 时间内在列表的任一侧进…

戴尔 Dell Latitude E7480电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网,转载需注明出处。(下载请直接百度黑果魏叔) 硬件配置 硬件型号驱动情况 主板戴尔 Dell Latitude E7480 处理器Intel Core i7-7700U已驱动 内存8GB 2133MHz DDR4 * 2已驱动 硬盘Sandisk 1T M.2 NVMe SSD已驱动 显…

windows解决python安装django架构没有django-admin命令

目录 一.尝试安装与配置 1.直接pip命令安装 2.用pycharm测试 3.官网下包安装 二.解决 1.找到django安装的路径 2.配置系统变量 3.测试创建项目 3.1.执行访问页面 3.2.解决 3.3.继续测试 4.pycharm打开 一.尝试安装与配置 1.直接pip命令安装 pip install django dja…

chatgpt赋能Python-python_7

Python 7 - 探索最受欢迎的Python版本 如果你是一位Python开发人员,你就会知道Python 7是什么。Python 7是Python编程语言的第7个主要版本,它带来了许多新的功能和改进,包括内置类型注释、上下文变量、字节码优化和更多。 在本文中&#xf…

度小满科技金融迭代:普惠小微与技术创新并肩而行

2015年,深度贫困乡镇隘口镇推出“本土人才”政策,呼吁大学生人才下基层,助力乡村经济振兴工作。 叶茂的人生轨迹因此而发生改变。彼时,20多岁的叶茂果断辞去药材公司的高薪工作,开始了回乡种植黄精的创业路,并成功竞选东坪村村主任…

log4cpp的安装(vs/visual studio版)

log4cpp安装下载源visual studio安装方法 log4cpp安装 下载源 log4cpp visual studio安装方法 将下载好的压缩包解压缩后得到下列目录(解压缩的文件夹最好放C盘,不然在编译阶段往往会出现链接不上的问题) 找到mscv10文件夹内的mscv10.sl…

【概念篇】浅谈 AOP、OOP、DDD、IOC

前言 在招聘要求中,有没有经常看见,对AOP、OOP、DDD、IOC有一定的认识,能够自主开发模块,这一类的要求。听起来是不是挺高大上,然后百度一搜,给你出来一堆概念性的东西——结果就是,东西…