首页 > 其他分享 >rsync远程同步:下行同步、上行同步+inotify实时同步

rsync远程同步:下行同步、上行同步+inotify实时同步

时间:2023-04-11 09:23:47浏览次数:35  
标签:文件 rsync 同步 inotify rsyncd var

一、rsync远程同步
1、什么是rsync远程同步
rsync是C/S架构的数据镜像备份工具,可以实现全量备份和快速增量备份支持本地复制或ssh、rsync主机同步。

rsync默认端口为 873

rsync特性:可以在不通主机之间镜像同步整个目录树,支持增量备份、保持链接和权限、时间、属性且传输前自动执行压缩、rsync不需要特殊权限即可安装,centos系统默认安装,支持匿名传输,注意发起端要有对应目录位置的读权限

2、rsync备份类型
完全备份:每次备份将备份源所有文件或目录备份到目的。

差量备份:备份上次完全备份以后有变化的数据。

增量备份:备份上次完全备份以后有变化的数据。

3、rsync同步方式
①本地复制:首先是将源文件和目的位置文件对比找出差异,然后将源文件与目的位置的差异部分进行一致性同步。

②上行同步:客户端与服务端同步内容,可以理解为客户端从服务器上下载内容

③下行同步:服务端与客户端同步内容,可以理解为客户端将内容上传到服务器

4、rsync命令使用
基本格式:rsync [选项] 原始位置 目的位置

注意:原始位置文件夹若加/则是同步文件夹下所有内容,不包括文件夹本身,若需要整个目录同步则不加/

选项 作用
r 递归,包含目录中所有文件
l 对符号链接仍然复制为符号链接
v 显示同步过程
z 传输时进行压缩
a 归档模式,保留所有属性权限等
e 指定使用什么方式同步ssh等
p 保留文件夹权限的标记
t 保留文件夹时间的标记
g 保留文件属组的标记(只能root使用)
o 保留文件属主的标记(只能root使用)
H 保留硬链接文件
A 保留ACL属性信息
D 保留设备文件及其他特殊文件
delete 删除目的位置有但是原始位置没有的文件同步客户端和服务端数据
checksum 根据校验和(不是文件大小、修改时间)来决定是否跳过文件
password-file password-file=密码文件位置,可以在同步时使用免交互登录
5、rsync同步的表达方式
格式1:rsync -avz 用户名(rsync用户)@主机地址::模块名 文件

例子:rsync -avz [email protected]::wwwroot /opt/

格式2:rsync -avz rsync://用户名(rsync用户)@主机地址/模块名 文件

例子:rsync -avz rsync:// [email protected]/模块名 文件

二、rsync下行同步实验部署
1、实验环境
客户端ip 服务端ip
192.168.30.11 192.168.30.13:873
2、服务端配置

mkdir /var/www/html -p
#创建要同步的文件夹
vim /etc/rsyncd.conf
#编辑rsync服务配置文件
文件内容:
uid = root #用户id,注意不用root使用rsync同步时可能会报错
gid = root #组id,注意不用root使用rsync同步时可能会报错
use chroot =yes #开启禁锢目录,只允许模块授权的源路径
address =192.168.30.11 #监听的地址即server地址
port 873 #监听地址的那个端口
log file =/var/log/rsyncd.log #日志文件位置
pid file =/var/run/rsyncd.pid #pid文件位置
hosts allow = 192.168.30.0/24 #允许谁使用
max connections = 4 #最大连接数
[lhjhtml] #模块名称
path = /var/www/html #源文件路径
comment = Document root of www.lhj.com #模块说明,随便写
read only =yes #是否只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z #这些类型结尾的文件不压缩
auth users = lhj cxx #授权可登录用户 lhj cxx 多用户以空格隔开
secrets file = /etc/rsyncd_users.db #rsyncd服务账户密码文件位置,保存退出
vim /etc/rsyncd.users.db #编辑rsyncd账户密码文件
lhj:123456 #添加账户密码,以:隔开
cxx:123456 #添加完成后保存退出
chmod 600 /etc/rsyncd_users.db #修改rsyncd服务文件权限为只允许属主可读写
rsync --daemon #启动rsyncd服务
netstat -antp |grep rsync #查看是否启动成功
echo "test rsync">/var/www/html/a.txt #同步源目录中创建文件a.txt内容为"test rsync"

3、客户端配置

mkdir -p /opt/ky26 #创建client同步接收文件位置
chmod 777 /opt/ky26 #接收文件位置权限添加
vim /etc/server.pass #创建免交互密码文件将密码输入
123456 #lhj和cxx的密码为123456
chmod 600 /etc/server.pass #秒交互密码文件只允许属主可读写
rsync -avz --password-file=/etc/server.pass [email protected]::lhjhtml /opt/ky26 同步到ky26文件夹中
注意:若同步失败需要先在client上ssh一下server登录再退出。
注意:如果报错为 error: some files/attrs were not transferred (see previous errors) (code 23)t main ,c(1179) [sender=3.1.2]则是因为rsyncd.conf配置文件中的uid和组id不是root
cat /opt/ky26/a.tx#client上验证是否有a.txt

三、rsync实时同步部署

1、实验环境及原理

客户端ip 服务端ip
192.168.30.11

192.168.30.13:873

2、服务端配置

#基于下行同步完成的情况下
vim /etc/rsyncd.conf
read only =no
#关闭下行同步的只读,保存退出
kill `cat /var/run/rsyncd.pid`
#杀死rsync进程即关闭服务
rsync --daemon
#开启rsync服务
chmod 777 /var/www/html
#给lhjhtml模块的目录加权限

3、客户端配置

#查看inotify内核参数
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 #优化inotify内核参数
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p #加载内核生效

4、安装inotify

#客户端安装inotify
yum install gcc gcc-c++ -y #安装编译工具
cd /opt
#将安装包放入/opt下
tar zxvf inotify-tools-3.14.tar.gz
#解压安装包
cd inotify-tools-3.14
./configure && make && make install
#编译安装inotify
#编写脚本监控客户端/var/www/html目录,当这个目录发生改变时使用rsync同步上传到服务端
vim inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html [email protected]::lhjhtml"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
#脚本内容解析:定义2个变量,变量INOTIFY_CMD监控客户端的/var/www/html文件夹。变量RSYNC_CMD执行rsync同步将/var/www/html/文件夹内容同步上传到服务端。将变量INOTIFY_CMD监控标准输入结果传给while函数,while函数读取若有后面这些关键字则执行if语句,当执行过滤rsync命令行数小于等于0则执行变量$RSYNC_CMD

5、验证实时同步

cd /opt/
chmod +x inotify.sh
./inotify.sh
执行脚本后会在前台执行占用窗口,重新开个窗口执行以下命令验证
cd /opt/ky26
echo "123">1.txt
然后到服务端查看是否上传完成

四、rsync删除大量数据

1、本地复制删除

mkdir -p /date/blank
#建立一个空的文件夹
mkdir -p /date/test
cd /date/test
touch {1..10000}
#模拟/date/test文件中有1万个文件数据
rsync --delete-before -avH --progress --stats /home/blank /date/test
#使用rsync删除/date/test目录中的文件,用空文件夹同步了test文件夹
选项说明:
--delete-before 接收者在传输进行删除操作
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性-H 保持硬连接的文件
-v 详细输出模式
-H 保持硬连接的文件
--progress 在传输时显示传输过程
--stats 给出某些文件的传输状态
cd /date/test
ls
#进入查看数据为空

2、rsync+inotify实时同步删除

#基于以上rsync+inotify实时同步实验
服务端:
mkdir -p /date/test
touch {1..10000}
#模拟/date/test文件中有1万个文件数据
客户端:
/opt/inotify.sh
#运行inotify.sh,前台运行需要再开启一个窗口
新窗口
cd /var/www/html
echo " ">a.txt
rm -rf *
创建一个空给a.txt
然后再服务端验证/date/test中文件夹已全部删除只有刚同步的a.txt文件

标签:文件,rsync,同步,inotify,rsyncd,var
From: https://www.cnblogs.com/bzc1/p/17305064.html

相关文章

  • 【Java 并发】【十】【JUC数据结构】【六】SynchronousQueue同步阻塞队列原理
    1 前言看过了LinkedBlockingQueue、ArrayBlockingQueue、DelayQueue等阻塞队列,这节我们又要看一个不一样的队列,SynchronousQueue同步阻塞队列。2 SynchronousQueue是什么SynchronousQueue的同步队列,使用的场景比较少,主要是用来做线程之间的数据同步传输的。线程之间的同步......
  • 基于TiDB Binlog架构的主备集群部署及数据同步操作手册
    作者:Liuhaoao最近手头有个系统,有需要搭建灾备库的需求(rto要求4小时内,根据实际情况计算)。考虑到生产系统是5版本,TiCDC存在一些兼容性问题,且TiDBBinlog已经有实践案例及经验可供参考,故选择使用TiDBBinlog来实现主集群-->灾备集群的增量数据同步。数据全量初始化采用Dumpling+Ti......
  • C++多核多线程同步实现
    使用MakefileC++11工程模拟dsp的多核同步逻辑,使用多线程模拟多核,多个线程通过C++11的条件变量实现同步。当某一线程执行到同步函数syn_func时,判断是否其他线程执行到此处了,若有其他线程没有执行到此处,本线程就应阻塞。当最后一个线程执行到同步函数时,通知所有线程解除阻塞,实现......
  • 同步,异步,阻塞,非阻塞的区别
    同步,异步,阻塞,非阻塞的区别同步与异步同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式;同步:当一个同步调用发出去后,调用者要一直等待调用结果的通知,直到得到调用结果;异步:当一个异步调用发出去后,这个调用就直接返回了,调用者不能立即得......
  • mogodb 同步数据到 ElasticSearch
    1、需安装:mogodb  ElasticSearch monstache2、mogodb创建副本集主副主开启副本集设置:replication:replSetName:"S1"副机关闭防火墙,设置net:port:27017bindIp:0.0.0.0"C:\ProgramFiles\MongoDB\Server\4.4\bin\mongo.exe"127.0.0.1:27017配置:rs.initiate({......
  • 同步合约数据到数据库经典案例1
    之前在《数字藏品发行平台的架构》里讲过,有一种架构希望以区块链的数据为核心。这样就需要将合约保存在区块链上的数据同步到数据库里,方便后续中间件接口的开发。本次我们以同步ConfirmSale事件日志为例,介绍数据同步程序开发的相关知识点。一、先上全部代码```javascriptconst{......
  • 直驱式永磁同步风力发电系统的仿真模型
    直驱式永磁同步风力发电系统的仿真模型YID:5365668131862029......
  • Java多线程之共享资源和同步
    一、竞争条件所谓竞争条件,即两个或更多的任务竞争响应某个条件,因此产生冲突或不一致结果的情况。IntGenerator.java生成一个整数:publicabstractclassIntGenerator{privatevolatilebooleancanceled=false;(1)publicabstractintnext();(2)public......
  • 17 同步与互斥(三) 中断屏蔽
    中断处理流程1简介中断屏蔽是一种可以防止并发导致竞态的方法。在进入临界区之前屏蔽系统中断可以保证正在执行的内核路径不被打断(进程调度也依赖于中断)。不过在驱动编程中此方法并不值得推荐。因为驱动并不一定运行在单核上,面对SMP系统中断屏蔽并不能屏蔽掉别的CPU的中断操......
  • 永磁同步电机(pmsm,全速度切换无位置传感器控制(高速可以是超螺旋滑模)
    永磁同步电机(pmsm,全速度切换无位置传感器控制(高速可以是超螺旋滑模)低速可以是脉振高频方波注入,if开环等仿真模型。切换有加权切换和双坐标切换。YID:3180697422312043......