rsync教程、rsync+inotufy、sersync

这篇具有很好参考价值的文章主要介绍了rsync教程、rsync+inotufy、sersync。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

rsync教程、rsync+inotify实时同步

rsync介绍

英文全称为Remote synchronization服务软件

rsync是一个linux应用程序,可以实现全量以及增量本地或者是远程数据同步(拷贝)备份

使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSHrsync主机同步

rsync与scp:rsync可以增量复制

安装

yum -y install rsync

i

rsync使用

语法格式:
//Rsync的命令格式常用的有以下三种:
    rsync [OPTION]... SRC DEST
    rsync [OPTION]... SRC [USER@]HOST:DEST
    rsync [OPTION]... [USER@]HOST:SRC DEST
    
常用参数:
-a, --archive: 归档模式,表示以递归方式复制文件,并保持文件的所有属性,包括权限、时间戳等。
-v, --verbose: 显示详细输出,即显示文件传输的进度和其他信息。
-z, --compress: 在传输时进行压缩,可以减少网络带宽的使用。
-r, --recursive: 递归复制文件夹及其内容。
-u, --update: 只复制源文件中新于目标文件的文件。
-c, --checksum: 使用校验和比较文件内容,而不是仅仅比较时间和大小。
-h, --human-readable: 以人类可读的格式显示输出信息,例如文件大小以K、M、G等单位显示。
-P, --progress: 显示传输进度。
--delete: 删除目标目录中不存在于源目录中的文件。
--exclude: 排除指定的文件或目录。
--include:包括指定的文件或目录,即使在排除列表中。
--exclude-from:从指定文件中读取排除列表。
--include-from:从指定文件中读取包含列表。

常用命令:
1.将本地文件复制到远程主机:
rsync [选项] 源文件/目录 远程主机:目标路径

2.将远程主机文件复制到本地:
rsync [选项] 远程主机:源文件/目录 目标路径

3.同步本地两个目录:
rsync [选项] 源目录/ 目标目录/

4.仅复制新文件或有变化的文件:
rsync -u 源目录/ 目标目录/

5.递归复制整个目录树:
rsync -r 源目录/ 目标目录/

6.删除目标目录中不存在于源目录中的文件:
rsync -r --delete 源目录/ 目标目录/

7.显示详细信息:
rsync -av 源目录/ 目标目录/

8.使用 SSH 连接远程主机:
rsync -avz -e ssh 源目录/ 远程主机:目标路径

9.源文件中有删除时,同步删除以后的文件
rsync -av --delete 源目录/ 目标目录/

rsync定时同步(ssh方式)

可以通过crontab定时使用rsync命令

例如:定时备份机器2中的数据

准备1:机器2(25)/tmp/rsync/中需要定时备份的数据 同步到机器1(28)中/tmp/backup/目录下 也就是机器1(28)获取机器2(25)上的数据
[ root@localhost test]# tree /tmp/rsync/
/tmp/rsync/
└── test
    ├── test2.txt
    └── test.txt
1 directory, 2 files

准备2:
因为rsync从远程主机上同步数据需要ssh密码验证,所需要先在机器1(28)上ssh-keygen 
ssh-keygen 一路回车 有y 填y
ssh-copy-id root@192.168.70.25
测试一下 ssh root@192.168.70.25 可以发现直接连接上不需要密码验证

开始实验
创建crontab定时任务
crontab -e
* * * * * rsync -av root@192.168.70.25:/tmp/rsync/ /tmp/backup &>/dev/null

一分钟后 可以发现文件都同步过来了
[root@localhost tmp]# tree backup/
backup/
└── test
    ├── test2.txt
    └── test.txt
1 directory, 2 files

rsync+inotify实时同步

原理介绍

1.实时同步的方法

  • inotify rsync方法实现数据同步
  • sersync 在inotify软件基础上进行开发的,功能更强大

2.工作原理

  • 要利用监控服务,监控同步数据服务器目录中信息的变化
  • 发现目录中数据产生变化,就利用rsync服务推送到备份服务器上

inotify:

​ 异步的文件系统监控机制,利用事件驱动机制,而无须通过诸如cron等轮询机制来获取时间。

​ linux内核从2.6.13起支持inotify,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件。

grep -i inotify /boot/config-3.10.0-1160.el7.x86_64 
CONFIG_INOTIFY_USER=y

实现inotify软件:

  • inotify-tools
  • sersync
  • lrsyncd

inotify+rsync使用方式

  • inotify 对同步数据目录信息的监控
  • rsync 完成对数据的同步
  • 利用脚本进行结合

inotify

内核是否支持inotify

列出下面文件,说明服务器内核支持inotify
[root@localhost ~]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Jul 29 11:05 max_queued_events
-rw-r--r-- 1 root root 0 Jul 29 11:05 max_user_instances
-rw-r--r-- 1 root root 0 Jul 29 11:05 max_user_watches

[root@localhost ~]# cat /proc/sys/fs/inotify/max_queued_events 
16384
[root@localhost ~]# cat /proc/sys/fs/inotify/max_user_instances 
128
[root@localhost ~]# cat /proc/sys/fs/inotify/max_user_watches 
8192

inotify内核参数说明:

  • max_queued_events:inotify事件队列最大长度,如值太小会出现Event Queue Overflow错误,默认值:16384,生产环境建议调大,比如:327679
  • max_user_instances:每个用户创建inotify实例最大值,默认值:128
  • max_user_watches:可以监视的文件总数量(inotifywait 单进程),默认值:8192,建议调大

范例:

在/etc/sysctl.conf最下面添加
[root@localhost ~]# vim /etc/sysctl.conf 
fs.inotify.max_queued_events=327679
fs.inotify.max_user_watches=100000

[root@localhost ~]# sysctl -p
fs.inotify.max_queued_events = 327679
fs.inotify.max_user_watches = 100000

inotify-tools工具

安装inotify-tools:基于epel源

yum install inotify-tools -y

inotify-tools包主要工具:

  • inotifywait:在被监控的文件或目录上等待特定文件系统事件(open,close,delete等)发生,常用于实时同步的目录监控
  • inotifywatch:收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计

inotifywait命令

inotifywait [options] file1 [file2] [file3] [...]

常用参数

-m –monitor 始终保持监听状态,默认触发事件即退出
-r –recursive 递归查询目录
-d –daemon 跟–monitor一样,除了是在后台运行,需要指定–outfile把事情输出到一个文件。也意味着使用了–syslog。
-q –quiet 减少不必要的输出(只打印事件信息)
-s –syslog 输出错误信息到系统日志
-e –event 定义监控的事件,可用参数:
    open   打开文件
    access 访问文件
    modify 修改文件
    delete 删除文件
    create 新建文件
    attrib 属性变更
--timefmt 时间格式
    %y年 %m月 %d日 %H小时 %M分钟
--format 输出格式    
    %w 表示发生事件的目录
    %f 表示发生事件的文件
    %e 表示发生的事件
    %Xe 事件以“X”分隔
    %T 使用由–timefmt定义的时间格式
--exclude <pattern> 指定要排除监控的文件/目录

可监控事件

access	访问,读取文件。
modify	修改,文件内容被修改。
attrib	属性,文件元数据被修改。
move	移动,对文件进行移动操作。
create	创建,生成新文件
open	打开,对文件进行打开操作。
close	关闭,对文件进行关闭操作。
delete	删除,文件被删除。

示例

[root@localhost yum.repos.d]# inotifywait -mr --timefmt "%Y-%m-%d %H:%M:%S" --format "%T %w%f event: %;e" /tmp/rsync/
Setting up watches.  Beware: since -r was given, this may take a while!
Watches established.
2023-07-29 14:12:01 /tmp/rsync/ event: OPEN;ISDIR
2023-07-29 14:12:01 /tmp/rsync/ event: CLOSE_NOWRITE;CLOSE;ISDIR

筛选一些事件,对于"打开" "查看"一些事件不监控
[root@localhost yum.repos.d]# inotifywait -mrq --timefmt "%Y-%m-%d %H:%M:%S" --format "%T %w%f event: %;e" -e create,delete,move,modify,attrib /tmp/rsync/
2023-07-29 14:18:01 /tmp/rsync/test/test2.txt event: DELETE

rsync

开始提到的rsync是使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。
与上述rsync不同这里不是走ssh,而是rsync独立的服务 rsync-daemon。
两台机器都需要安装rsync。

准备:

在28机器上安装rsync服务(之前是在25机器上) 执行以下命令即可 再查看以下873端口是否开启

[root@localhost etc]# rsync --daemon

[root@localhost etc]# netstat -tunlp
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      3599/rsync      

再写配置rsyncd.conf文件
vim /etc/rsyncd.conf
在最下面添加
[backup]
path = /tmp/backup/
read only = no

格式:

rsync daemon:
pull:
rsync [OPTION]... [USER@]HOST::SRC DEST 

push:
rsync [OPTION...] SRC... [USER@]HOST::[DEST]

测试:

[root@localhost yum.repos.d]# rsync /etc/networks root@192.168.70.28::backup
rsync: mkstemp "/.networks.hTs4QS" (in backup) failed: Permission denied (13)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]

报错了,需要在28机器上指定目录给nobody权限,默认用户以nobody访问此目录
setfacl -m u:nobody:rwx /tmp/backup

再次在25机器上执行
rsync /etc/networks root@192.168.70.28::backup
可以发现成功了 在28机器上查看
[root@localhost backup]# ll
total 4
-rw-r--r-- 1 nobody nobody 58 Jul 29 16:18 networks
drwxr-xr-x 2 root   root   22 Jul 29 14:18 test

其实我们在这里可以发现这种没有密码验证的方式传输文件是不安全的,我们可以把rsyncd.conf文件以标准的形式编写

vim /etc/rsyncd.conf
motd file = /etc/rsyncd.motd
transfer logging = yes
log file =/var/log/rsyncd.log
pid file =/var/run/rsyncd.pid
lock file =/var/run/rsync.lock
port = 873
uid = root
gid = root
reverse lookup = no
ignore errors
use chroot = no
max connections = 10

[backup]
comment = backup dir #描述
path = /tmp/backup
read only = no
auth users = root,zhangsan #只有这些账号能访问backup目录
secrets file = /etc/rsyncd.password #这些账号的密码
#hosts allow=192.168.0.0/255.255.255.0
#hosts deny=*
list= false

编写rsyncd.password 这个文件名需要跟上述配置文件secrets file = /etc/rsyncd.password 一致!

vim rsyncd.password
root:123456
zhangsan:123456

修改属性 600 除了root其他人不能查看

chmod 600 /etc/rsyncd.password

再测试:

[root@localhost rsync]# rsync -av /etc/group root@192.168.70.28::backup
Password: 
输入root密码即可 

使用--password-file=FILE 命令 可以以非交互的方式
注意:此步骤是在25机器上创建,之前几个步骤都是在28机器上 (1.内容取决于你等下要用哪个用户的密码 2.路径可以不一致)

echo "123456" > /etc/rsyncd.password

测试:

[root@localhost rsync]# rsync -av --password-file=/etc/rsyncd.password /etc/passwd root@192.168.70.28::backup
sending incremental file list
passwd

sent 642 bytes  received 35 bytes  1,354.00 bytes/sec
total size is 552  speedup is 0.82

可以看到不用交互式输入密码即可完成文件传输

rsync+inotify+shell 脚本实现实时数据同步

先要确保两主机初始数据处于同步状态(需要被同步数据的机器装好inotify rsync [25机器],同步数据的机器装好rsync并配置好文件 [28机器]),此脚本实现后续的数据同步

#!/bin/bash
SRC='/tmp/backup'
DEST='root@192.168.70.28::backup'
inotifywait -mrq --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} | while read DATE TIME DIR FILE;do
        FILEPATH=${DIR}${FILE}
        rsync -az --delete --password-file=/etc/rsyncd.password $SRC $DEST && echo "At ${TIME} on ${DATE},file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done

sersync

上述rsync+inotify脚本形式实时同步的缺陷是:利用inotify监控,有时会产生重复事件,或者同一个目录下多个文件的操作会产生多个事件,导致重复调用rsync命令。另外比如:vim文件时,inotify会监控到临时文件的事件,但这些事件相对于rsync来说是不应该被监控的。

sersync官网地址

sersync tar包

下载后移动到linux环境下 然后解压

tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz

解压好之后把文件移动到/usr/local/ (这里我下载在opt目录下)

[root@localhost opt]# mv GNU-Linux-x86/ /usr/local/sersync
[root@localhost opt]# ln -s /usr/local/sersync/sersync2 /usr/bin/ 

查看帮助文档
[root@localhost bin]# sersync2 -help
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
_______________________________________________________
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序

修改xml文件

vim /usr/local/sersync/confxml.xml

rsync教程、rsync+inotufy、sersync

如果监控目录没有需要创建以下

mkdir /data/www

25机器上执行

[root@localhost sersync]# sersync2 -dro /usr/local/sersync/confxml.xml 
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d      run as a daemon
option: -r      rsync all the local files to the remote servers before the sersync work
option: -o      config xml name:  /usr/local/sersync/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost     host port: 8008
daemon start,sersync run behind the console 
use rsync password-file :
user is root
passwordfile is         /etc/rsyncd.password
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads) 
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /data/www && rsync -artuz -R --delete ./ root@192.168.70.28::backup --password-file=/etc/rsyncd.password >/dev/null 2>&1 

测试

[root@localhost www]# ls
[root@localhost www]# echo "111" >test.txt

回到28机器上
[root@localhost backup]# ls
test.txt

我们还可以不用rsync --daemon 守护进程的方式,直接使用ssh方式,这样可以不设置rsync一系列配置文件,只需将设置好ssh-keygen免密登录即可。

修改xml文件

rsync教程、rsync+inotufy、sersync

设置ssh免密:

ssh-keygen
ssh-copy-id root@192.168.70.28

关闭之前开启的守护进程

[root@localhost www]# pkill sersync2
[root@localhost www]# ps -ef | grep rsync
root      11823   1297  0 01:10 pts/0    00:00:00 grep --color=auto rsync

28机器关闭rsync服务
[root@localhost ~]# pkill rsync

测试:文章来源地址https://www.toymoban.com/news/detail-616281.html

[root@localhost www]# sersync2 -dro /usr/local/sersync/confxml.xml

到了这里,关于rsync教程、rsync+inotufy、sersync的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux】企业实战项目rsync+inotify实现实时同步(inotify安装及介绍、rsync + inotify 实现实时同步、rsync + inotify实现开机自启 )

    rsync与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。 随着应用系统规模的不断扩大,对数据的安全性和可

    2024年02月04日
    浏览(37)
  • Rsync(二十七)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、概述 二、特性 三、应用场景 四、数据的同步方式 五、rsync传输模式 六、rsync应用 七、rsync 命令 1. 格式  1.1 作为远程命令  1. 2 作为rsync服务 2. 选项 3. 配置文件  3.1  全局配置      

    2024年02月16日
    浏览(25)
  • rsync远程同步服务

    rsync(Remote Sync,远程同步) 是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。 在远程同步任务中,负责发起rsync同步操作的

    2024年01月18日
    浏览(32)
  • rsync

    rsync 是 linux 系统下的数据镜像备份工具。使用快速增量备份工具 Remote Sync 可以远程同步,支持本地复制,或者与其他 SSH 、 rsync 主机同步。 rsync 支持很多特性: 可以镜像保存整个目录树和文件系统 可以很容易做到保持原来文件的权限、时间、软硬链接等等 无须特殊权限即

    2024年01月20日
    浏览(18)
  • rsync安装与配置

    一、软件简介 rsync是Linux系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。它的特性如下: 1、可以镜像保存整个目录树和文件系统。 2、可以很容易做到保持原来文件的

    2024年02月04日
    浏览(17)
  • rsync全面讲解

    rsync 是一个常用的 Linux 应用程序,用于文件同步。 它可以在本地计算机与远程计算机之间,或者两个本地目录之间同步文件(但不支持两台远程计算机之间的同步)。它也可以当作文件复制工具,替代 cp 和 mv 命令。 它名称里面的 r 指的是 remote,rsync 其实就是\\\"远程同步\\\"(

    2024年01月16日
    浏览(18)
  • Rsync远程同步

      rsync是C/S架构的数据镜像备份工具,可以实现全量备份和快速增量备份支持本地复制或ssh、rsync主机同步。 rsync默认端口为 873 rsync特性:可以在不通主机之间镜像同步整个目录树,支持增量备份、保持链接和权限、时间、属性且传输前自动执行压缩、rsync不需要特殊权限即可

    2024年02月08日
    浏览(34)
  • rsync命令常用参数详解

    Usage: rsync [OPTION]… SRC [SRC]… DEST or rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST or rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST or rsync [OPTION]… SRC [SRC]… rsync://[USER@]HOST[:PORT]/DEST or rsync [OPTION]… [USER@]HOST:SRC [DEST] or rsync [OPTION]… [USER@]HOST::SRC [DEST] or rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

    2024年01月25日
    浏览(26)
  • Linux服务器与群晖rsync同步,linux服务器通过rsync的方式备份数据到群晖

    准备需要备份linux服务器的配置,安装rsync即可 1.登录群晖服务器,点击套件中心  2.点击红色框框,跳转到套件界面 3.点击Active Backup for Business 4.点击文件服务器-添加服务器-选择rsync服务器-下一步 5.填写远程服务器信息 6.在群晖系统上创建备份任务 打开群晖的Active Backup fo

    2024年02月10日
    浏览(44)
  • Rsync实现windows文件同步

    服务端:本机 ip:192.168.182.1 客户端:虚拟机 ip:192.168.182.130 安装rsync 下载地址:https://gitee.com/buchengfeng/cwRsync?_from=gitee_search 下载内容如下 cwRsyncServer_4.0.5_Installer.zip 为服务端软件 cwRsync_4.0.5_Installer.zip为客户端软件 服务端安装 一路next,然后到安装目录中配置conf文件 需要关注下

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包