关于LINUX 解决多台服务器间的文件实时同步问题()

1.1 inotify相关介绍

     1、rsync

       与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据 时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的 一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定 会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!

    2、inotify

        Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统 中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样 的一个第三方软件。
在上面章节中,我们讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。

1.2 rsync+inotify同步逻辑图

1.3 环境部署

1、先官网下载最新安装包

a、rsync下载路径:   wget https://download.samba.org/pub/rsync/src/rsync-3.1.3.tar.gz

    b、inotify下载路径:wget https://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz

2、第一台服务器(192.168.220.150)配置(从192.168.220.151同步到本台服务器):

a、安装rsync:

[root@server150 src]# tar zxvf rsync-3.1.3.tar.gz

   [root@server150 src]# cd rsync-3.1.3/

         [root@server150 rsync-3.1.3]# ./configure –prefix=/usr/local/rsync

         [root@server150 rsync-3.1.3]# make && make install

b、创建密码认证文件:

[root@server150 rsync-3.1.3]# echo “rsync:s@^201809” > /usr/local/rsync/rsync1.passwd

[root@server150 rsync-3.1.3]# chmod 600 /usr/local/rsync/rsync1.passwd   //授权

c、创建rsync.conf

uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[web] // 模块名
path = /app/anjia/data
comment = rsync_web
ignore errors
read only = no
write only = no
hosts allow = 192.168.220.150
hosts deny = *
list = false
uid = root
gid = root
auth users = rsync
secrets file = /usr/local/rsync/rsync.passwd

    d、启动rsync服务

[root@server150 rsync-3.1.3]#/usr/bin/rsync –daemon –config=/usr/local/rsync/rsync.config

3、配置数据源服务器(192.168.220.151)

a、创建密码认证文件:

         [root@server150 rsync-3.1.3]# echo “s@^201809” > /usr/local/rsync/rsync1.passwd

[root@server150 rsync-3.1.3]# chmod 600 /usr/local/rsync/rsync1.passwd   //授权

b、安装inotify:

[root@server150 src]# tar zxvf inotify-tools-3.13.tar.gz

[root@server150 src]# cd inotify-tools-3.13/

[root@server150 inotify-tools-3.13]# ./configure –prefix=/usr/local/inotify

[root@server150 inotify-tools-3.13]# make && make install

c、创建监控脚本rsnyc1.sh(chmod 644 rsync1.sh):

#!/bin/bash
host=192.168.220.150
src=/app/anjia/data  //要同步的目录
des=web  //目标服务器的模块名
user=rsync
/usr/local/inotify/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f%e’ -e modify,delete,create,attrib $src |\

 while read files
do
/usr/bin/rsync -vzrtopg –delete –progress –password-file=/usr/local/rsync/rsync1.passwd $src $user@$host::$des
echo “${files} was rsynced” >>/tmp/rsync.log 2>&1
done

d、执行sh rsync1.sh &

注意密码要保持一致,如何是相互同步,那就互相配置与执行方可生效

发表评论

电子邮件地址不会被公开。 必填项已用*标注