您的位置:首页 > 其它

使用csync2+inotify实现文件实时同步

2011-03-07 14:52 666 查看


使用csync2+inotify实现文件实时同步

注:要使用inotify模块,系统版本必须是linux-2.6.13及以上。

一、关键技术

利用csync2+sqlite实现数据的高效实时的增量备份,相关目录及文件信息都存储在sqlite数据库中,

大大提升了同步的速率和效率;利用inotify触发式(实时)执行csync同步命令更新文件。

二、方案适用

图片服务器集群方案: ReiserFS4+csync2+inotify

网站服务程序分布式方案:csync2+inotify+NFS

[注](如,网站程序中存在缓存目录则排除此目录同步,将缓存目录挂载在NFS上)

分布式集群软件配置更新同步方案: csync2+inotify

[注](如,集群中heartbeat相关的配置文件,如apache,nginx的配置文件,并能执行相关脚本)

三、实际配置过程

系统:centos5.1

结构: 三台服务器

引用

# vi /etc/hosts

192.168.4.188 csync1

192.168.4.190 csync2

192.168.4.191 csync3

1、创建下载文件列表

引用

cd /usr/local/src/

vi list //以下内容:

ftp://ftp.gnupg.org/gcrypt/libgpg-error/libgpg-error-1.7.tar.gz

ftp://ftp.gnupg.org/gcrypt/libgcrypt/libgcrypt-1.4.4.tar.gz

ftp://ftp.gnutls.org/pub/gnutls/libtasn1/libtasn1-2.1.tar.gz

http://www.sqlite.org/sqlite-2.8.17.tar.gz

http://internode.dl.sourceforge.net/sourceforge/librsync/librsync-0.9.7.tar.gz

ftp://ftp.gnu.org/pub/gnu/gnutls/gnutls-2.6.6.tar.bz2

http://oss.linbit.com/csync2/csync2-1.34.tar.gz

http://jaist.dl.sourceforge.net/sourceforge/inotify-tools/inotify-tools-3.13.tar.gz

2、创建安装脚本并执行

引用

vi install.sh //以下内容:

wget –i list

cd /usr/local/src/

tar zxvf libgpg-error-1.7.tar.gz

cd libgpg-error-1.7

./configure && make && make install

cd ..

tar zxvf libgcrypt-1.4.4.tar.gz

cd libgcrypt-1.4.4

./configure --with-gpg-error-prefix=/usr/local && make && make install

cd ..

tar zxvf libtasn1-2.1.tar.gz

cd libtasn1-2.1

./configure && make && make install

cd ..

tar zxvf sqlite-2.8.17.tar.gz

cd sqlite-2.8.17

./configure && make && make install

cd ..

tar zxvf librsync-0.9.7.tar.gz

cd librsync-0.9.7

./configure && make && make install

cd ..

tar jxvf gnutls-2.6.6.tar.bz2

cd gnutls-2.6.6

./configure --with-libgcrypt-prefix=/usr/local/ && make && make install

cd ..

echo "/usr/local/lib" >> /etc/ld.so.conf

ldconfig

tar zxvf csync2-1.34.tar.gz

cd csync2-1.34

./configure && make && make install && make cert

cd ..

tar zxvf inotify-tools-3.13.tar.gz

cd inotify-tools-3.13

./configure && make && make install

cd ..

echo "csync2 30865/tcp" >> /etc/services

echo "service csync2

{

disable = no

protocol = tcp

flags = REUSE

socket_type = stream

wait = no

user = root

group = root

server = /usr/local/sbin/csync2

server_args = -i

#only_from = 192.168.10.50 192.168.10.51

}" > /etc/xinetd.d/csync2

chkconfig xinetd on

3、赋予脚本可执行权限并执行:

引用(注:需要在每个节点执行脚本)

chmod 755 install.sh

./install.sh

4、编辑hosts文件如下内容:

引用

vi /etc/hosts

192.168.4.188 csync1

192.168.4.190 csync2

192.168.4.191 csync3

(三台主机都要修改)

5、生成密钥并分发到每个节点:

引用

csync2 -k /etc/test.key

scp /etc/test.key root@node2:/etc/

6、创建备份目录:

引用

mkdir /var/csync_backup

注:用于防止修改错误恢复,如果启用了,分别在其他节点建立相应的目录。

7、修改csync2配置文件(所有节点相同):

引用

vi /etc/csync2.cfg //以下内容:

group testgroup

{

host csync1 csync2 csync3; //定义组成员

key /etc/test.key; //制定密钥

include /var/www/html; //需要同步的目录

exclude /var/www/html/temp; //需要排除的目录。

exclude /var/www/html/templates_; //需要排除同步的缓存目录。

exclude *~ .*; //排除同步.开头的文件

backup-directory /var/csync_backup; //防错备份目录,根据自己的需求设置。

backup-generations 3;

auto younger; //同步以最新的文件为标准更新.

}

启动服务:

引用

/etc/init.d/xinetd start

或者:

service xinetd start

注:csync2相关测试命令

引用

csync2 –vvv –T 测试csync配置是否正确,可以看到相关SQL执行过程

csync2 –xv 执行同步命令

csync2 –xvvv 执行同步命令,并显示出详细的信息

8.做个软链接

32位系统:

ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0

64位系统:

ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

9、配置inotify触发同步脚本(所有节点相同):

引用

vi /usr/local/sbin/csync2_test.sh //以下内容:

#!/bin/bash

src=/var/www/html

/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' /

--exclude "/.swp$" /

-e close_write,modify,delete,create,attrib,move /

${src} /

| while read file

do

csync2 -x >/dev/null 2>&1

done

后台执行脚本:

引用

chmod a+x /usr/local/sbin/csync2_test.sh

csync2_test.sh &

10、测试文件同步:

在任一节点上创建,修改,移动,或者删除文件或目录,在其他节点检查是否同步,如果没有同步,请使用csync2的相关测试命令测试同步是否正常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: