Rsync+inotify搭建实时同步系统

Rsync 优点

rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期地备份文件服务器数据到远程服务器上,对本地磁盘定期进行数据镜像等。

Rsync 不足

随着应用系统规模的不断扩大,对数据的安全性和可靠性提出了更高的要求,rsync便暴露出了很多不足之处。首先,rsync同步数据时,需要扫描所有文件后进行比对,然后进行差量传输。如果文件数量达到了百万量级及以上时,扫描文件就非常耗费时间,有时还会出现只是很少一部分数据发生了变化,因此rsync就变得非常低效了。其次,rsync不能够实时监测、同步数据,虽然它可以通过Linux守护进程的方式触发同步,但是两次触发动作一定会出现时间差,可能导致服务器端和客户端的数据出现不一致,后期无法在出现故障时完全恢复数据。

Rsync+inotify组合

为解决以上问题而出现的,实现了数据的实时同步

inotify是什么 ?

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

检查内核是否支持inotify:

Rsync+inotify搭建实时同步系统

实验案例:rsync+inotify搭建实时同步系统

案例描述:在前文Haproxy搭建高可用Web集群的网站拓扑架构图基础上,实现两台Web站点数据的实时同步,web1服务器为内容发布节点,web2服务器为同步节点(本文主要说明rsync+inotify实时同步数据技术,其他请阅读前文,谢谢!)。

系统环境

主机操作系统IP地址web站点目录软件包
负载调度服务器:CentOS 7.0 x86_64192.168.100.25haproxy-1.5.19.tar.gz
web1节点服务器:CentOS 7.0 x86_64192.168.100.26/www/wwwrootnginx-1.12.0.tar.gz、rsync-3.1.3.tar.gz、inotify-tools-3.14.tar.gz
web2节点服务器:CentOS 7.0 x86_64192.168.100.27/web2/wwwrootnginx-1.12.0.tar.gz、rsync-3.1.3.tar.gz
Win 7 客户端:Windows 7192.168.100.30

关闭防火墙及Selinux

systemctl stop firewalld
setenforce 0

软件包:rsync+inotify 密码:do45

开始部署

inotify-tools是用来监控文件系统变化的工具,因此必须安装在内容发布系统上,服务节点无需安装它,而web2服务器上需要安装rsync实现文件传输。

一、web2服务器(待同步数据:rsync)

1.安装rsync软件包
#解压
tar zxvf rsync-3.1.3.tar.gz -C /opt

#切换目录
cd /opt/rsync-3.1.3

#配置
./configure

#编译及安装
make && make install
2.修改rsync配置文件:

vim /etc/rsyncd.conf

#/etc/rsyncd: configuration file for rsync daemon mode
#See rsyncd.conf man page for more options.
#configuration example:
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
[web1]
        path = /web1/wwwroot
        comment = web1 file
        ignore errrors
        read only=no
        write only=no
        hosts allow=*
        hosts deny=192.168.100.10
        list=false
        uid=root
        gid=root
        auth users=web1user
        secrets file=/etc/web1.pass
3.创建密码文件(文件格式:user:pass)
/etc/web1.pass

web1user:www123

修改密码文件权限
chmod 600 /etc/web1.pass
4.启动rsync守护进程
/usr/local/bin/rsync --daemon       
5.加入系统自启动文件
echo "/usr/local/bin/rsync --daemon" >> /etc/rc.local
6.查看rsync进程
ps -ef | grep rsync

Rsync+inotify搭建实时同步系统

二、web1服务器(内发发布节点:rsync+inotify)

1.安装rsync软件包
#解压
tar zxvf rsync-3.1.3.tar.gz -C /opt

#切换目录
cd /opt/rsync-3.1.3

#配置
./configure

#编译及安装
make && make install
2.新建密码文件,需和节点服务器密码一致
vim /etc/server.pass

www123

3.修改密码文件权限
chmod 600 /etc/server.pass
4.启动rsync守护进程
/usr/local/bin/rsync --daemon       
5.加入系统自启动文件
echo "/usr/local/bin/rsync --daemon" >> /etc/rc.local
6.安装inotify-tools
#解压
tar zxvf inotify-tools-3.14.tar.gz -C /opt

#切换目录
cd -C /opt/inotify-tools-3.14

#配置
./configure

#编译及安装
make && make install
7.编写shell脚本来配置内容发布节点

vim /web/inotifyrsync.sh

#!/bin/bash
host1=192.168.100.26
src=/web/wwwroot/
dst1=web1
user1=web1user
/usr/local/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/server.pass $src $user1@$host1::$dst1 > /dev/null 2>&1
        echo "${files} was rsynced." >> /tmp/rsync.log 2>&1
done

Rsync+inotify搭建实时同步系统

8.为其指定可执行权限,然后放入后台运行
chmod 755 /web/inotifyrsync.sh
/web/inotifyrsync.sh &
9.将脚本加入系统自启动文件
echo "/web/inotifyrsync.sh &" >> /etc/rc.local

测试

在web1服务器节点的/web/wwwroot目录下添加、删除、修改文件,然后到web2服务器节点对应目录去查看文件是否跟随发布节点同步变化。

web1服务器为内容发布节点:

Rsync+inotify搭建实时同步系统

web2服务器进行数据同步:

Rsync+inotify搭建实时同步系统

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值