码迷,mamicode.com
首页 > Web开发 > 详细

企业案例rsync+inotify同步web数据

时间:2015-07-04 01:13:02      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:web服务器   linux   socket   安全性   客户机   

应用场景:

公司后端有两台nginx服务器,因还在测试阶段。故开发经常需要更新web程序,而每次更新都需要上传两次。现在两台web服务器还好。如果以后随着业务量的增长,4、5台的时候还需要挨个上传就有点苦逼了。故我打算使用rsync+inotify组合来实现服务器的数据时时同步。


rsync介绍:

rsync是linux/UNIX系统下的文件同步和数据传输工具,采用rsync算法使一个客户机和远程文件服务器之间的文件同步。通过rsync可以将同一个服务器的数据从一个分区备份到另一个分区,也可以将本地系统的数据通过网络传输方式备份到任何一个远程主机上,rsync可以在中断之后恢复传输,只传输源文件和目标文件之间不一致的部分,可以执行完整备份或增量备份。rsync有shell(本地模式)、远程shell、查询(列表,与ls命令实现的功能类似)、和服务器模式。


rsync的功能特性:

可以镜像保存整个目录树和文件系统。

可以增量同步数据,文件传输效率高,因此同步时间很短

可以保持原有文件的权限、时间等属性

加密传输数据,保证数据的安全性

可以使用rcp、ssh等方式来传输文件,也可以直接通过Socket连接传输文件

支持匿名传输


一、rsync的安装:

我需要两台web服务器之间的数据时时同步,10.171.22.124向10.172.186.241同步。因此,124称为客户端,241称为服务端。


1.1    服务端安装:

使用yum安装和源码安装都可,我选择源码。

cd /usr/local/src

wget https://download.samba.org/pub/rsync/src/rsync-3.0.4.tar.gz

tar -zxvf rsync-3.0.4.tar.gz

cd rsync-3.0.4

./configure --prefix=/usr/local/rsync

make  && make install

mkdir /etc/rsyncd

touch /etc/rsyncd/rsyncd.conf                      #rsync安装之后要手动创建配置文件和验证密码文件

touch /etc/rsyncd/rsyncd.secrets                 

chmod 600 /etc/rsyncd/rsyncd.conf             #密码文件的权限要设置成600,如果不设置成600,那么客户端连接验证密码时将会提示验证失败。这里一定要注意。到这里安装完成。下面是配置。


1.2    配置服务端:

vim /etc/rsyncd/rsyncd.conf                          #编辑rsync主配置文件


pid file = /var/run/rsyncd.pid
uid = root
gid = root
use chroot = yes   ##是否限制在指定目录,为了安装,一般需要启用
read only = no
hosts allow = 10.171.22.124
max connections = 5
log file = /var/log/rsync.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[web1]
path = /data/wwwroot
list=yes
ignore errors
auth users = webuser
secrets file = /etc/rsyncd/rsyncd.secrets
comment = web home


vim /etc/rsyncd/rsyncd.secrets                     #编辑密码文件

webuser:123456                                            #服务端的密码文件格式是用户名:密码

加入开机启动

echo "/usr/local/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf" >>/etc/rc.local


1.3    创建同步用的帐号并设置密码

useradd webuser

passwd webuser


1.4    启动rsync

/usr/local/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

ps -elf |grep rsync       #验证是否启动成功

5 S root     15707     1  0  80   0 - 26905 poll_s 11:06 ?        00:00:00 rsync --daemon --config=/etc/rsyncd/rsyncd.conf


至此,服务端的配置就结束了。下面安装配置客户端

传统的rsync是通过crontab定时执行rsync命令来进行同步的,这样就不能保证数据的实时性,因此,必须借助inotify这个软件来监控客户端上的文件变化,只要inotify监测到了客户端文件的变化,那么就执行rsync来进行同步。


一、安装rsync与inotify-tools


rsync和服务端的安装一样,这里就不写了。直接安装inotify并配置。只不过rsync不需要写配置文件了。因为inotify是通过脚本来调用rsync命令连接到服务端同步。由于inotify的特性需要linux内核的支持,在安装inotify-tools前要先确认linux系统内核是否是2.6.13版本以上。

uname -r                 #显示核心版本号

ls -l /proc/sys/fs/inotify


total 0
-rw-r--r-- 1 root root 0 Jun 30 12:41 max_queued_events
-rw-r--r-- 1 root root 0 Jun 30 12:41 max_user_instances
-rw-r--r-- 1 root root 0 Jun 30 12:41 max_user_watches

#有上面这三项输出则表示当前内核支持inotify


tar -zxvf

wget http://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz

tar -zxvf inotify-tools-3.13.tar.gz

cd inotify-tools-3.13

./configure

make && make install


#安装完成后会在/usr/local/bin目录下生成inotifywait和inotifywatch两个命令。inotifywait可以监控任何文件和目录设置,并且可以递归的监控整个目录树,inotifywatch用于收集被监控的文件系统的统计数据。比如每个inotify事件发生多少次等信息。


ls -l /usr/local/bin/inotify*

-rwxr-xr-x 1 root root 38598 Jul  2 17:48 /usr/local/bin/inotifywait
-rwxr-xr-x 1 root root 40361 Jul  2 17:48 /usr/local/bin/inotifywatch

安装完成


二、配置inotify


2.1编辑密码文件

vim /etc/rsyncd/rsync.secrets                            #输入服务端同步的用户密码即可。

chmod 600 /etc/rsyncd/rsync.secrets                #设置权限

2.2

编辑脚本文件

vim /data/wwwroot/inotifyscript.sh                   #脚本放到要同步的目录下。

#!/bin/bash
host=10.172.186.241

src=/data/wwwroot/
dst=web1
user=webuser

/usr/local/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=/etc/rsyncd.secrets $src $user@$host::$dst
                echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
        done



下面对脚本内容简单讲解

host是服务端的IP地址,如果有多个,依次写上。

src是客户端要同步给服务端的目录。

dfs是服务端rsyncd.conf中配置的web1段。

user是服务端rsyncd.conf中配置的同步用户

--timefmt指定时间的输出格式。

--format指定变化文件的详细信息。

这个脚本的作用就是通过inotify监控文件目录的变化,发现文件有变化,进而出发rsync进行同步操作。


2.2    给脚本可执行的权限并加入开机启动

chmod +x /data/wwwroot/inotifyscript.sh

echo "/data/wwwroot/inotifyscript.sh $" >>/etc/rc.local


至此,inotify就配置好了。现在可以进行同步验证了。你可以分别创建文件和目录,修改文件内容、属性权限等。然后观察服务端目录下的文件是否同步。

本文出自 “初心、始终” 博客,谢绝转载!

企业案例rsync+inotify同步web数据

标签:web服务器   linux   socket   安全性   客户机   

原文地址:http://gouyc.blog.51cto.com/1594451/1670589

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!