文件实时同步

article/2025/8/28 23:28:11

rsync

   remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的、数据在内存缓存区完成之后还没有写入到磁盘中去、所以有时候要同步到磁盘中去的,而rsync说白了跟复制差不多、能将一个文件从一个地方复制到另外一个地方的、但是他也可以实现跨主机复制,兼具了cp和scp的功能,但是在跨主机时不具备scp的加密功能。
   rsync有个特点,就是当你用rsync复制或跨主机复制时如果另一端也有一个同名的文件,他会先比较这两个文件的特征码是不是一致,如果不一致就会复制,并覆盖,如果一致他将不会复制,所以说这是一个快速复制工具,尤其是同步目录时,特别好用。

rsync命令的工作模式有四种:
   1、shell模式,也称为本地模式,速度要比cp快
   2、远程shell模式,其可以借助于ssh协议承载其数据传输过程
   3、列表模式,其工作方式与ls相似,仅列出源的内容:-nv
   4、服务器模式,此时,rsync可以工作为守护进程,能够接收客户端的数据传输请求,在使用时可以在客户端使用rsync命令发送给守护进程,也可以向服务器主获取文件。

rsync命令的选项:
   -n:如果担心命令执行不正确,一同步复制,可能这个复制的后果是致命的,那后果可就严重了,这里我们可以加-n先测试一下
   -v: --verbose,详细输出模式、显示详细过程的
   -q: --quiet,静默模式,尽可能输出少的信息
   -c: --checksum,可以对传输的文件进行较验的,强制对文件传输进行校验
   -r: --recursive,递归复制
   -a: --archives,归档,复制时可以保存原有的属主属主等属性信息,甚至包括一点额外的属性、如访问控制列表
   -p: --perms,保存文件的权限
   -t: --times,保留文件的时间戳
   -l: --links,保留文件的符号链接
   -g: --group,保留文件的属组
   -o: --owner,保留文件的属主
   -D: --devices,保留设备文件

   -e SSH:远程复制时,表示使用ssh协议作承载
   -z:基于网络时使用,对文件压缩后传输
   --progress:显示压缩进度条的
   --stats:显示如何执行压缩和传输的,也就是显示传输状态的

注意:rsync命令使用中,如果源参数的末尾有斜线,就会复制指定目录内容,而不复制目录本身;没有斜线,则会复制目录本身,因此有如下命令:
   # rsync -r /mydata/data /backups/:会把目录data直接同步至/backups目录中去
   # rsync -r /mydata/data/ /backups/:会把目录中的data/中的内容同步至/backups目录中

rsync本地用法:
   # cd /etc /tmp/
   # rsync /tmp/etc/passwd /tmp/test/passwd -nv
推送到远程主机上去,把本地的etc文件推送到172.16.251.244主机上去:
   # rsync -r -e ssh /tmp/etc root@172.16.251.244:/tmp/

拉取远程服务器上的文件:
   # rsync -e ssh -r -a root@172.16.251.244:/etc/pam.d ./ --stats

把文件推送到服务器端上去:
# rsync -auzv messages myuser@172.16.27.1::my_data_rsync

如果我们从服务器上拉取文件时必须要指定文件路径
# rsync myuser@172.16.27.1::my_data_rsync/messages /tmp/

Inotify

   Inotify 是一个 Linux特性,是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。

=====================rsync+inotify实现实时同步过程============================================

这里我们以两台服务器来做这个实验:

wKiom1NBVQLgE-HRAADrvX0RH-c594.jpg

以下步骤在从服务上操作:

配置rsync以daemon的方式运行:也就是在服务器端以守护进程的方式运行
   1、设定rsync服务器端
       1)安装相关的程序包,他是基于xinetd工作的,超级守护进程
       # yum -y install xinetd
       安装好之后在/etc/xinetd.d/这个目录下有一个rsync的文件
       2)为rsync服务提供配置文件,而他的配置文件在/etc/rsyncd.conf,这个配置文件大概由两部分组成,一部分定义全局的,另一部分可以定义多个rsync共享目录:    

# Global Settings 全局设定
uid = nobody :以哪个用户的身份运行或获取数据的
gid = nobody :用户都以来宾帐号的方式运行
use chroot = no :在服务运行时要不要把他锁定在家目录
max connections = 10 :做为服务器端最大并发连接数
strict modes = yes :表示是否工作在严格模式下,严格检查文件权限等相关信息
pid file = /var/run/rsyncd.pid : 定义pid文件路径
log file = /var/log/rsyncd.log : 定义日志文件存放路径的
# Directory to be synced  定义共享目录的模块
[my_data_rsync] 要同步的目录名称,多个目录名称是不能重名的
path = /myrsync/data : 定义目录的路径
ignore errors = yes : 表示如果中间复制过程有一个文件出错了是要继续复制还是中止复制,yes表示继续复制,no表示中止复制
read only = no :如果打算让别人仅仅是来拉取数据的,yes就可以了,如果打算让别人推送过来做备份的那就为no,表示客户端是否可以推送的
write noly = no :只允别人在里面写数据,但不可以拉取数据
hosts allow = 172.16.251.244:做白名单的,是否允许哪些主机可以访问的
hosts deny = * :黑名单的说明:1、二者都不出现时,默认为允许访问2、只出现hosts allow,定义白名单,但没有被匹配到的主机由默认规则处理,即为允许3、只出现hosts deny,定义黑名单,出现在名单中的都被拒绝4、二者同时出现,先检查hosts allow,如果匹配就allow,否则检查hosts deny,如果匹配则拒绝,如是二者都不匹配,则由默认规则处理,即为允许
list = false :是否允许用户列出文件列表的
uid = root :以哪个用户身份去获取文件的
gid = root
auth users = myuser:做用户验证的,只允许哪个用户来复制
secrets file = /etc/.rsync.passwd :存放验证用户的密码的
#配置密码文件/etc/rsyncd.passwd,文件格式是明文的,所以文件权限设为600:
# vim /etc/rsyncd.passwd
myuser:mypasswd
# chmod 600 /etc/rsyncd.passwd
#配置服务能够启动,监听在873/tcp端口上
# chkconfig rsync on
# service xinetd start
# ss -tnl

接下来在内容发布的服务器上操作:

   由于inotify特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否达到了2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify的支持,也可以用如下方法判断,内核是否支持inotify:
   # uname -r
   2.6.32-431.el6.x86_64
   查看内核是否支持inotify API,如果有以下三项,表示系统已经默认支持inotify,接着就可以开始安装inotify-tools了,我这里使用的是inotify-tools-3.14.tar.gz。
   # ll /proc/sys/fs/inotify
   -rw-r--r-- 1 root root 0 04-13 19:56 max_queued_events
   -rw-r--r-- 1 root root 0 04-13 19:56 max_user_instances
   -rw-r--r-- 1 root root 0 04-13 19:56 max_user_watches

简单介绍一下这三个文件是做什么用的:
   max_queued_evnets:表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
   max_user_instances:表示每一个real user ID可创建的inotify instatnces的数量上限。
   max_user_watches:表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小,例如:echo "9000000" > /proc/sys/fs/inotify/max_user_watches

查看完相关的安装环境后那接下来我们就可以安装inotify-tools这个程序包了,安装步骤很简单,程序包获取方法这里不再提供:

# tar xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure
# make && make install
安装好之后可以查看/usr/local/bin下生成两个二进制文件:
# ll /usr/local/bin
创建一个目录存放要同步的数据:
# mkdir /myrsync_data/mydata
# cd /myrsync_data/mydata
# vim inotifyrsync.sh
#!/bin/bash
host=172.16.27.1 #从服务器的主机地址
data_dir=/myrsync_data/data #内容发布服务器上创建的同步数的路径
dst=my_data_rsync #从服务器上导出的共享目录
username=myuser #从服务器上/etc/rsyncd.passwd这个文件中定义的用户名
#决对路径执行inotifywait这个程序,
#-m, 即--monitor,表示始终保持事件监听状态。
#-r, 即--recursive,表示递归查询目录。
#-q, 即--quiet,表示打印出监控事件。
#-e, 即--event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等。
#--timefmt:指定时间的输出格式。
#--format:指定变化文件的详细信息。
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $data_dir | while read filesdo/usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.passwd $data_dir $username@$host::$dstecho "${files} was rsynced" >> /tmp/rsync.log 2>&1 #写入日志done
#保存退出
# chmod 755 /web/wwwroot/inotifyrsync.sh
# bash /myrsync_data/mydata/inotifyrsync.sh &

测试一下同步的效果:

wKioL1NBOTLDUjy_AADrYNtTBo4637.jpg

wKiom1NBOXSxUQHTAAEEWdeBivY508.jpg

wKiom1NBOY_h2vNaAAQl0kVLZXQ056.jpg

wKiom1NBObKzQ3EIAAIj18bNxvY065.jpg

wKiom1NBOciSJCnOAAFgv8k0KfI474.jpg

wKiom1NBYFbwLkk_AAcQ6h9cQaQ009.jpg


http://chatgpt.dhexx.cn/article/bRk6tgfR.shtml

相关文章

系统间通讯实现数据信息实时同步解决方案

项目开发阶段遇到一个需求,描述大致就是同一个用户在A系统数据库保存的数据信息与在B系统数据库保存的数据信息要保持同步。当A系统用户修改了个人信息,A系统后台在将用户修改后的信息入库的同时也会向B系统发送消息,让B系统后台进行自动数据…

一文带你玩转实时数据同步方案

1、概述 1.1、目标 实时数据同步主要实现从源数据库到目标数据库的实时数据同步。源数据主要支持mysql数据库,目标数据包括mysql数据库和hbase数据库。 下面是实时数据同步的数据流转图,mysql的增量订阅数据经过canal和kafka,数据最终实时…

两台服务器同时写文件 怎么做同步,两台服务器做实时数据同步

两台服务器做实时数据同步 内容精选 换一换 DCS Memcached即将下线,部分Region已暂停售卖,建议使用Redis4.0/5.0。本章节主要描述Memcached主备实例。Memcached主备实例在单机实例基础上,增强服务高可用以及数据高可靠性。Memcached主备实例具…

实时数据同步方案

一.Flume收集各数据库日志,准实时抽取到HDFS 安装HDP,包含Flume 方案优点: 1.配置简单,不用编程:只要在flume.conf文件中配置source、channel及sink的相关属性 2.采用普通SQL轮询的方式实现,具有通用性&…

如何实现数据自动化的实时同步?

企业在日常业务中,比如总分支机构之间、数据中心之间、不同节点之间、跨国业务之间等,都需要将文件及时的传输,以供协同使用。所以,很多企业会选择一些同步工具或软件。 谈到文件同步备份大家使用较多的可能是Rsync、同步盘等一些…

像素是什么,一个像素有多大,像素和分辨率的关系

图片的像素和分辨率 对于像素和分辨率这两个词,主要见于图片和显示设备上。只要你用到手机里的照相功能,你都要接触到这两个概念。只是大多数人都是一知半解,而更多的人却根本就不知道,白白浪费了手机里500万、800万像素的摄影头&…

屏幕尺寸、分辨率、DPI、PPI

屏幕尺寸 下面这张图是华为荣耀7的尺寸图,图上写的是5.2英寸。我们所说的这个5.2英寸是手机屏幕对角线的长度。 我们平时是不用英寸这个单位的,我们用的是毫米,厘米,米这些单位。那么英寸和毫米,厘米之间怎样的换算关…

像素(Pixel)、DPI与PPI一看就明白

像素(Pixel)、DPI与PPI 像素(Pixel)DPI 英文全写是(Dots Per Inch,每英寸点数)PPI 英文全写是(Pixels Per Inch,每英寸像素数)比喻来区分应用(这张图熟悉吗)1.分辨率啥意思&#xff…

关于像素、分辨率、PPI、DPI等概念的分析

关于影像图的比例尺和分辨率:https://blog.csdn.net/liliiii/article/details/40261953 当我们说到 像素、分辨率、DPI、PPI等专业术语的时候,一般会涉及到图像、屏幕、打印机等等。 像素(Pixel)为图像显示的基本单位,…

分辨率 PPI DPI概念定义详解

我们在开发中,涉及到UI显示时,经常会遇到的一些概念,比如分辨率,ppi,dpi等,这些概念,在百度百科中,发现都有对它们的定义,一些博客中,也有对这几个概念的对比…

DPI与PPI的区别

开发中不免会遇到分辨率、DPI、PPI和屏幕尺寸等术语,那就弄弄清楚这些概念的真正含义。 分辨率 分辨率这个词在很多地方都有,比如相机、视频、扫描仪。这里说的就是显示器的分辨率。显示器是由一个个像素点(pixel)所组成的,一般所说的显示器…

传感器尺寸、像素、DPI分辨率、英寸、毫米的关系

虽然网上有很多这种资料,但是太过于复杂,每个人的说法都不一样,看的让人云里雾里的,我总结了一下,不知道对不对! 1. 1英寸25.4mm 2. 传感器尺寸:传感器的尺寸是指传感器的大小,一般…

dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

一、基本概念 dip : Density independent pixels ,设备无关像素。dp :就是dippx : 像素dpi :dots per inch , 直接来说就是一英寸多少个像素点。常见取值 120,160&…

什么是 PPI、DPI 及 像素、分辨率的区别?

什么是 PPI、DPI 及 像素、分辨率的区别? AbstractPPIDPI像素 Pixels分辨率 Resolution Abstract 笔者通过本篇文章重点来阐明相对迷惑的PPI、DPI概念,PPI 和 DPI 是处理图像时需要深入理解的概念,两者都指的时分辨率或清晰度,但…

DPI、像素与分辨率的区别和联系

DPI(Dot Per Inch) 表示打印分辨率,指每英寸长度上的点数。DPI 又可细分为水平分辨率和垂直分辨率,例如一张 “1英寸*1英寸” (1英寸2.54cm)的图片,如果它的水平分辨率是100 dpi,垂直…

一文详解像素、DPI、分辨率之间的关系

1.像素 像素:是指在由一个数字序列表示的图像中的一个最小单位,称为像素。 像素可以用一个数表示,比如一个“0.3兆像素”数码相机,它有额定30万像素;也可以用一对数字表示,例如“640x480显示器”&#xff0…

分辨率、Dpi 的关系

概念:分辨率,指的是图像或者显示屏在长和宽上各拥有的像素个数。比如一张照片分辨率为1920x1080,意思是这张照片是由横向1920个像素点和纵向1080个像素点构成,一共包含了1920x1080个像素点。dpi是分辨率的表示单位之一。它是英文D…

图片分辨率像素与DPI的关系

来自网络的一张图片:https://www.duitang.com/blog/?id788101874 这张图片大小(通过鼠标右键点击菜单"属性"获得): 这里面图片的分辨率和dpi两种值。 现在讲讲两者关系。 将图片复制粘贴到word,我们可以获得图片的"原始尺寸"。 如下图所示…

SPSS新手教程——进行距离分析的方法

我们在使用IBM SPSS Statistics来进行数据分析的时候,难免会遇上这种情况:变量非常多,多到我们不能对其一一控制的地步,但每个变量都有分析的价值,同时又彼此重叠。这个时候最直接的方法就是把所有变量按照一定的标准来进行分类&a…

SPSS的入门

1.SPSS的起源 SPSS(全称:Statistical Product and Service Solutions)是世界上最早的统计分析软件,由美国斯坦福大学的三位研究生Norman H. Nie、C.Hadlai (Tex) Hull和Dale H. Bent于1968年研发成功。SPSS采用类似EXCEL表格的方…