欢迎访问鸿雪径软件工作室,这里介绍软件工作室的相关技术产品、动态以及鸿雪径杂谈,如有技术合作请与工作室联系!邮费网 易食烤吧 特产大全网
首页 > Linux/Unix > aliyun linux 5.7配置使用rsync和inotify实现集群配置时文件的自动同步

aliyun linux 5.7配置使用rsync和inotify实现集群配置时文件的自动同步

发布时间:2015-03-07 作者:伊君 点击:209

  客户这次的网站要求使用多个服务器结合前置负载均衡的方式进行部署,服务器使用阿里云的ecs,操作系统选择了aliyun linux 5.7,使用SLB做负载均衡,网站选用鸿雪径网站内容管理系统进行建设。

  上线之初使用3台ECS服务器,清单如下:

  mainServer:具有1M互联网带宽,部署nginx、2个tomcat、squid(正向代理)

 appServer1:不具有互联网带宽,部署nginx、2个tomcat

 appServer2:不具有互联网带宽,部署nginx、2个tomcat

 内容管理系统管理节点部署在mainServer,程序文件等均在此文件发布,需要实时同步到appServer1和appServer2。

 考虑到实时性,最终采用了rsync结合inotify的方案。

 该方案需要在mainServer部署rsync客户端和inotify tools;在appServer1/2部署rsync服务端。

 首先我们在mainServer安装inotify tools,这个比较简单,aliyun linux基于2.6.18内核,已经默认支持inotify。我们只要安装扩展的工具即可。

[root@abcdefg ~]# ll /proc/sys/fs/inotify
total 0
-rw-r--r-- 1 root root 0 Mar  7 14:53 max_queued_events
-rw-r--r-- 1 root root 0 Mar  7 14:53 max_user_instances
-rw-r--r-- 1 root root 0 Mar  7 14:53 max_user_watches

只要执行ll /proc/sys/fs/inotify,输出如上内容,那么就是支持inotify的。

inotify最新版本是3.1.4的,已经好长时间没更新,不过不影响我们的使用。不要从官网下载,按个版本里边没有configure,需要使用autogen.sh来生成,会用到libtool等各种宏扩展,会碰到不少障碍,找已经做好configure的版本,这里我分享一个,大家可以拿来用。

inotify-tools-3.14.tar.zip

解压后正常进行 ./configure 

make

make install

编译完成后执行:

ll /usr/local/bin/inotifywa*

-rwxr-xr-x 1 root root 47224 Mar  7 09:04 /usr/local/bin/inotifywait

-rwxr-xr-x 1 root root 43570 Mar  7 09:04 /usr/local/bin/inotifywatch

看到已经有两个监听。

另外,有一些参数根据需要进行调整:

inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小。下面分别做简单介绍。
 /proc/sys/fs/inotify/max_queued_evnets     
 表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
  /proc/sys/fs/inotify/max_user_instances
 表示每一个real user ID可创建的inotify instatnces的数量上限。
 /proc/sys/fs/inotify/max_user_watches
  表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小,例如:
echo 888888 > /proc/sys/fs/inotify/max_user_watches

---------------

下面给mainServer安装rsync客户端(在 https://download.samba.org/pub/rsync/ 查看最新版本 )

cd /usr/local/src 

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

tar -zxvf rsync-3.1.2.tar.gz

cd rsync-3.1.2

./configure

make

make install

----------------------------

同理给appserver1/2分别安装rsync,过程与刚才mainserver的一致。

在appserver1配置rsync的服务,

vi /etc/rsyncd.conf

-------

uid = nobody

gid = nobody

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

[web1]

path = /webservers/webapps/

comment = www01

ignore errors

read only = no

write only = no

hosts allow = mainserver的ip地址

hosts deny = *

list = false

uid = root

gid = root

auth users = www01

secrets file = /etc/rsyncServer.pass


------

我们需要生成/etc/rsyncServer.pass的用户名密码文件

vi /etc/rsyncServer.pass

内容格式是用户名:密码,一行一个。

比如我们写入:

www01:abcdefg

注意要把这个文件设置成600

chmod 600 /etc/rsyncServer.pass

配置完成之后我们启动rsync,执行

rsync --daemon

不报错,那么我们的rsync服务端就启动了。

检查873端口是否已经监听:

netstat -na|grep 873

可以成功监听那把rsync服务加入开机启动:

echo "rsync --daemon" >> /etc/rc.local

同理配置appserver2

都配置完成后,回到mainserver

我们建立一个/etc/server.pass文件

vi /etc/server.pass

内容就是密码。例如:abcdefg  

注意这里与服务端的差异,这里没有用户名!!!

同样需要chmod 600

配置完成之后我们测试一下是否可以联通

输入如下命令:

rsync -vzrtopg --delete --progress --password-file=/etc/server.pass /webservers/webapps/rsync.txt www01@appserver1的ip地址::web1

如果传输正常,那么我们就可以继续了。

新建一个inotifyrsync.sh文件

vi inotifyrsync.sh

---------------

#!/bin/bash

www01=appserver1的ip


src=/webservers/webapps/


dst1=web1


user1=www01


/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/local/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user1@$www01::$dst1

     #这里可以放第二个目的 /usr/local/bin/rsync -vzrtopg --delete --progress --password-file=/etc/server.pass $src $user1@$www01::$dst1

              echo "${files} was rsynced" >>/tmp/rsync.log 2>&1

         done

----------

保存后加入执行权限

chmod +x inotifyrsync.sh

把这个脚本加入到/etc/rc.local,以便开机自动运行。

我们进入自己的目录传一些文件进行一下测试,看看在appserver1、2是否正常进行了同步!

更多关于 rsync,aliyun,inotify 的信息
本站部分文章转载于网上,版权归原作者所有。如果侵犯您的权益,请Email和本站联系!
鸿雪径 www.HongXueJing.com  冀ICP备07017673号-4