Linux(CentOS 8)文件实时自动同步备份(rsync+inotify)

一、rsync+inotify 简介

1、rsync简介

rsync(remote synchronize)是 Liunx/Unix 下的一个远程数据同步工具,它可通过 LAN/WAN 快速同步多台主机间的文件和目录。

Linux 之间同步文件一般有两种方式,分别是 rsync 与 scp 。scp 相当于复制,粘贴,文件不存在则新建,若存在则覆盖,而 rsync 则是比较两边文件是否相同,不相同才进行更新。所以 rsync 和 scp 在文件夹存在的情况下差异很大,因为 scp 是复制和覆盖,从执行性能来说 rsync 更胜一筹。而且 rsync 能将文件夹、文件的权限等信息也保存下来。

但是 rsync 也有一定的缺点,在同步数据时,需要扫描所有文件后进行比对,如果文件数量相当大时,扫描文件就非常耗费时间和性能。其次,rsync 不能够实时监测、同步数据,这就可能导致一些时间段数据不一致。解决这个问题的方法就是实时同步,所以需要使用 rsync+inotify 组合。

2、inotify简介

inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux 内核从2.6.13版本起,加入了对 inotify 的支持。通过 inotify 可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,inotify-tools 便可以监控文件系统下文件的各种变化情况了。

首先检查系统内核是否支持 inotify,出现以下三个文件表示系统默认支持 inotify,如下所示。

uname -r  #查询系统内核版本
ll /proc/sys/fs/inotify
-rw-r--r-- 1 root root 0 Mar 11 09:34 max_queued_events
-rw-r--r-- 1 root root 0 Mar 11 09:34 max_user_instances
-rw-r--r-- 1 root root 0 Mar 11 09:34 max_user_watches

二、整体架构

这里使用两个Linux服务器节点进行演示,实现两个节点间文件的实时同步,192.168.100.46为client节点,就是需要同步数据的节点,部署rsync+inotify,192.168.100.47为server节点,也就是接收同步数据的节点,只需要部署rsync。

三、server端部署(rsync)

1、安装rsync

dnf install rsync rsync-daemon -y

2、配置rsync

vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes
max connections = 10
strict mode=yes
pid file = /var/run/rsyncd.pid
lock file=/var/run/rsync.lock
log file=/var/log/rsyncd.log
[backup]
        path = /backup129/
        comment = backup file
        ignore errrors
        read only=no
        write only=no
        hosts allow=192.168.100.46
        hosts deny=*
        list=false
        uid=root
        gid=root
        auth users=ai
        secrets file=/etc/rsync.password

2.2.创建密码文件,也就是上面配置的 secrets file 的值 /etc/rsync.password,内容格式为:user:password,user 就是上面配置的 root,password 就是密码。

[root@localhost ~]# echo "ai:admin@123" > /etc/rsync.password

2.3.修改密码文件权限

[root@localhost ~]# chmod 600 /etc/rsync.password 

2.4.启动rsync服务

[root@localhost ~]# systemctl restart rsyncd 
[root@localhost ~]# systemctl enable rsyncd 
Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service.

2.5.防火墙开放873端口

[root@localhost ~]# firewall-cmd --add-port=873/tcp --permanent --zone=public 
success
[root@localhost ~]# firewall-cmd --reload 
success

2.6.创建同步文件夹

mkdir /backup129/ #和配置文件中的文件名一致

四、client端部署(rsync+inotify)

1、安装rsync

dnf install rsync rsync-daemon -y

2、配置rsync

2.1.client节点中只需要配置认证密码文件,首先在etc文件夹下创建rsync.password文件,只需要密码,不需要用户,密码需要和同步节点node2中一致。

[root@localhost ~]# vim /etc/rsync.password
[root@localhost ~]# cat /etc/rsync.password 
password

2.2.修改密码文件权限

[root@localhost /]# chmod 600 /etc/rsync.password 

2.3.启动rsync服务

[root@localhost /]# systemctl restart rsyncd 
[root@localhost /]# systemctl enable rsyncd 
Created symlink /etc/systemd/system/multi-user.target.wants/rsyncd.service → /usr/lib/systemd/system/rsyncd.service.

2.4.防火墙开放873端口

[root@localhost /]# firewall-cmd --add-port=873/tcp --permanent --zone=public
success
[root@localhost /]# firewall-cmd --reload 
success

3、手动同步测试

3.1.创建测试文件夹

mkdir -p /root/data/backuptest/test

3.2.使用如下命令进行同步测试,其中一些参数要和同步节点配置文件中相对应,如认证模块名 backup、用户名 ai 等

 rsync -avH --port 873 --delete /root/data/backuptest/ ai@192.168.100.47::backup --password-file=/etc/rsync.password 

**[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kzuiUZdh-1683354016344)(C:\Users\Ai\AppData\Roaming\marktext\images\716ab32a893057daefd761bcb70d7ec10aefe3d9.jpg)]**

文件同步成功,接下来部署inotify实现文件实时同步备份

4、部署inotify

4.1.安装阿里epel源

yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

4.2.安装inotify-tools

[root@localhost ~]# dnf install inotify-tools -y 

4.3.创建rsync同步shell脚本

[root@localhost backuptest]# cat inotifyrsync.sh 
#!/bin/bash
hst1=192.168.100.47
src=/root/data/backuptest/
dst1=backup
user1=ai
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src \
        | while read files
do
                /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.password $src $user1@$host1::$dst1 > /dev/null 2>&1
                        echo "${files} was rsynced." >> /tmp/rsync.log 2>&1
                done

host 是 server 的 ip,src 是 client 端要实时监控的目录,des 是认证的模块名,需要与 server 一致,user 是建立密码文件里的认证用户。

4.4.赋予脚本权限

chmod 755 /root/data/backuptest/inotifyrsync.sh 

4.5.后台运行脚本文件

/root/data/backuptest/inotifyrsync.sh &

4.6.将脚本加入系统自启动文件中

echo "/root/data/backuptest/inotifyrsync.sh &" >> /etc/rc.local

五、实时同步备份验证

5.1.在client节点中添加、删除文件或文件夹,看server端是否会自动同步,经过验证自动同步备份功能实现。

在这里插入图片描述

  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值