rsync+inotify实现实时同步
前言
我们都知道一旦 Linux 系统被入侵了,或者 Linux 系统由于硬件关系而死机,会丢失重要的数据,而最好的解决方法就是做好备份,但是每次都靠我们自己手动备份太过麻烦,这时rsync+inotify刚好可以解决这个问题
本篇文章将对 Linux 主机之间文件实时自动同步备份进行讲解,使用 rsync+inotify 组合的方式来实现,避免由于硬件或者软件导致的 Linux 系统死机或损坏造成的损失
一、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 便可以监控文件系统下文件的各种变化情况了。
二、环境搭建
主机 | 服务器 | 系统 | ip地址 | 软件 |
---|---|---|---|---|
node1 | 原服务器 | CentOS7 64位 | 192.168.100.11 | rsync,inotify |
node1 | 同步服务器 | CentOS7 64位 | 192.168.100.12 | rsync |
三、实操环节
1.原服务器 向 同步服务器做免登陆
在我的上一篇博客
2.实验步骤
上传数据包
链接: https://pan.baidu.com/s/1Qn9Dyrqf19vkwTlJcxge3w 提取码: wvqb
1.源码包安装
[root@7-11 ~]# tar xf inotify-tools-3.13.tar.gz
[root@7-11 ~]# cd inotify-tools-3.13/
[root@7-11 inotify-tools-3.13]# ./configure --prefix=/usr/local/inotify && make && make intall
2.修改配置文件如下
[root@7-11 ~]# vi /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 监控队列大小
fs.inotify.max_user_instances = 1024 最多监控实例数
fs.inotify.max_user_watches = 1048576 每个实例最多监控文件数
3、在100.11上新建源地址
[root@7-11 ~]# sysctl -p
[root@7-11 ~]# mkdir /opt/dgf
[root@7-11 ~]# chown -R nobody:nobody /opt/dgf
4、在100.11上新建一个脚本如下
[root@7-11 ~]# vi dgf.sh
#!/bin/bash
INOTIFY_CMD="/usr/local/inotify/bin/inotifywait -mrq -e modify,create,attrib,move,delete /opt/dgf"
RSYNC_CMD="/usr/bin/rsync -avz --delete /opt/dgf root@192.168.100.12:/opt"
$INOTIFY_CMD | while read files
do
$RSYNC_CMD
done
5、把脚本放到后台运行,主要是完成实时监控
[root@7-11 ~]# bash dgf.sh &
6、查看是否同步
[root@7-11 ~]# cd /opt/dsk/
[root@7-11 dsk]# ls
1.txt 2.txt docker.txt dsk-lvs-keep.doc
查看100.12是否同步
[root@7-12 dsk]# ls
1.txt 2.txt docker.txt dsk-lvs-keep.doc
[root@7-12 dsk]#