Bootstrap

【inotify+rsync同步】

inotify和rsync是两个不同的工具,它们分别具有以下的作用和特点:


  1. inotify:

    • 作用:inotify 是 Linux 内核提供的一个监视文件系统变化的机制。它可以实时监视文件或目录的变化,如创建、修改、删除、移动等操作,并及时通知相关的事件。程序可以通过监听inotify接口来获取文件系统变化的事件,并做出相应的处理。
    • 特点:
      • 实时性:inotify 可以实时监测文件系统的变化,即时通知事件。
      • 精确性:inotify 提供了对文件和目录级别的监视,可以捕捉到具体的变动操作。
      • 高效性:inotify 使用内核事件驱动机制,避免了轮询查找,提供了高效的文件系统监控功能。
  2. rsync:

    • 作用:rsync 是一个用于文件同步和备份的工具,它可以实现本地和远程文件之间的高效同步、备份和文件传输。通过增量复制算法,rsync 仅传输发生变化的部分,可以大幅度提高文件传输效率。
    • 特点:
      • 增量复制:rsync 只传输发生变化的部分,而不是整个文件,可以节省带宽和时间。
      • 强大的文件同步能力:rsync 可以在本地或远程之间进行文件同步和备份,支持多种文件传输协议。
      • 支持断点续传:rsync 支持断点续传,如果中断了文件传输过程,可以从中断的位置继续传输,而不需要重新开始传输。
      • 多种同步模式:rsync 提供了不同的同步模式,如单向同步、双向同步等,可以根据需求进行灵活配置。

综上所述,inotify用于实时监控文件系统的变化,而rsync用于文件同步、备份和传输,可以根据实际需求选择使用。

常见的备份工具和rsync软件包的安装

1)常见的备份工具

cp

tar

scp

sftp

Rsync

2)rsync命令的常见选项

-a归档模式包含-rlptoD

-r递归模式,同步目录使用

-l同步符号连接

-v显示详细信息

-z传输进行压缩

-p保留权限

-t保持源文件时间标记

-g保留组标识

-o保留用户标识

-H保留硬链接文件

-A保留ACL属性

-D保留设备文件特殊文件使用

--delete:同步数据删除目标源文件数据

--checksum:校验同步数据

源端到发起端同步

源端(服务端)的配置

inotify+rsync同步配置流程


准备两台虚拟机

         192.168.1.100

              192.168.1.122

关闭防火墙并查询reync版本

[root@yuan ~]# systemctl stop firewalld

[root@yuan ~]# setenforce 0

[root@yuan ~]# iptables -F

[root@yuan ~]# rpm -qa rsync(查询已安装在系统中的 rsync 软件包的版本)

uid = nobody 管理账户

gid = nobody 管理组

use chroot = yes 禁锢在源目录

pid file = /var/run/rsyncd.pid rsync服务的id号

port 873 rsync服务启动监听的端口

address = 192.168.100.10 rsync服务器监听的ip地址

hosts allow = 192.168.100.* 允许192.168.100.0网络同步数据

[bdqn] 共享模块的名字

 path = /bdqn rsync客户端同步根下的bdqn目录数据

 comment = test 同步目录数据说明

 dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 文件后缀不需要压缩

 read only = yes 同步目录数据只有读取权限

 auth users = bob 同步验证账户bob

 secrets file = /etc/rsync_user.db 配置身份验证数据库

[root@yuan ~]# vim /etc/rsyncd.conf

uid = nobody

  gid = nobody

  use chroot = yes

  address = 192.168.1.100

  port 873

log file = /var/log/rsyncd.log

  pid file = /var/run/rsyncd.pid

  hosts allow = 192.168.1.0/24

[wwwroot]

  path=/var/www/html

  comment = wwwroot

  read only = no   

  dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

  auth users = haha   

  secrets file = /etc/rsyncd_users.db

[root@yuan ~]# vim /etc/rsyncd_users.db

写入:haha:123456

[root@yuan ~]# chmod 600 /etc/rsyncd_users.db(修改权限)

[root@yuan ~]# rsync --daemon(启动 rsync 作为守护进程)

[root@yuan ~]# netstat -lanpt |grep rsync(查询正在运行的 rsync 守护进程)

[root@yuan ~]# mkdir -p /var/www/html(创建目录)

[root@yuan ~]# touch /var/www/html/111.txt

(指定路径 /var/www/html 下创建一个新的文件)

发起端进行同步

关闭防火墙

[root@fa ~]# systemctl stop firewalld

[root@fa ~]# setenforce 0

[root@fa ~]# iptables -F

[root@fa ~]# export RSYNC_PASSWORD=123456

(用于设置环境变量 RSYNC_PASSWORD 的命令,将其值设置为 123456)

[root@fa ~]# mkdir html(创建目录)

[root@fa ~]# rsync -avz --delete [email protected]::wwwroot /root/html

(使用 rsync 命令通过 SSH(远程同步)将远程主机上的 wwwroot 目录同步到本地 /root/html 目录)

rsync的实时同步数据


1、rsync同步数据的方式

1)rsync计划任务

同步容易延迟

无法实时同步数据

必须通过计划任务实现

灵活性差

2)inotify和rsync结合实时同步数据

需要通过脚本实现

3)inotifywait监控常见的命令选项

-e指定监控事件

-m持续监控

4)inotifywait监控事件的类型

create:创建目录或者文件触发同步

move:移动或者重命名触发同步

delete:删除数据触发同步

modify:修改数据触发同步

attrib:修改文件目录属性触发同步

发现源更新数据自动触发更新

源端要安装监控软件

[root@yuan ~]#rz

[root@yuan ~]# tar xf inotify-tools-3.14.tar.gz

[root@yuan ~]# cd inotify-tools-3.14/

[root@yuan inotify-tools-3.14]# ./configure && make && make install

如果安装过程中还需要其它依赖可自行选择安装

yum -y install gcc-c++

yum -y install pcre-devel

yum -y install zlib-devel

[root@yuan ~]# ssh-keygen

[root@yuan ~]#ssh-copy-id –i [email protected]

[root@yuan ~]# rsync -avz /var/www/html/ [email protected]:/root/html

脚本实时同步

[root@yuan ~]# vim a.sh

#!/bin/bash

INW="inotifywait -rmq -e MOVE,DELETE,CREATE,ATTRIB /var/www/html"

RSY="rsync -azH --delete /var/www/html/ [email protected]:/root/html"

$INW | while read DIRECTORY EVENT FILE

do

        $RSY

done

[root@yuan ~]# sh a.sh

;