大量小文件实时同步方案

一、csync2+inotify实现

http://bbs.linuxtone.org/thread-2707-1-1.html

【关键技术
利用csync2+sqlite实现数据 的高效实时的增量备份,相关目录及文件 信息都存储在sqlite数据库 中,
大大提升了同步的速率和效率;利用intoify触发式(实时)执行csync同步命令 更新文件。

【方案适用】
图片服务器 集群 方案: ReiserFS4+csync2+inotify
网站服务 程序分布式方 案:csync2+inotify+NFS
[注](如,网站程序中存在缓存 目录则排除此目录同步,将缓存目录挂载在NFS上)
分布式集群软件 配置更新同步方案: csync2+inotify
[注](如,集群中heartbeat 相关的配置文件,如apache,nginx 的配置文件,并能执行相关脚本 )

【实战方案范例配置介绍】
系统 :CentOS5.2
结构:bbs.linuxtone.org (负载 均衡后面有三台realserver)
# vi /etc/hosts

引用
bbs1.linuxtone.org 192.168.169.112
bbs2.linuxtone.org 192.168.169.113
bbs3.linuxtone.org 192.168.169.114




一、安装配置csync2
1、相关软件包下载
# mkidr /usr/local/src/csync2
# cd /usr/local/src/csync2
# 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


# wget –i list

2、编译安装这些软件

引用
# cd /usr/local/src/csync2
tar zxvf libgpg-error-1.7.tar.gz
cd libgpg-error-1.7
./configure && make && make install

tar zxvf libgcrypt-1.4.4.tar.gz
cd libgcrypt-1.4.4
./configure --with-gpg-error-prefix=/usr/local
make && make install

tar zxvf libtasn1-2.1.tar.gz
cd libtasn1-2.1
./configure && make && make install

tar zxvf sqlite-2.8.17.tar.gz
cd sqlite-2.8.17
./configure && make && make install

tar zxvf librsync-0.9.7.tar.gz
cd librsync-0.9.7
./configure
make && make install

tar jxvf gnutls-2.6.6.tar.bz2
cd gnutls-2.6.6
./configure --with-libgcrypt-prefix=/usr/local/
make && make install
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
echo "csync2 30865/tcp" >> /etc/services




# vi /etc/xinetd.d/csync2

引用
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.169.112 192.168.169.113 192.168.169.114
}


# chkconfig xinetd on
# service xinetd start

# csync2 -k /etc/csync2.bbs.key //生成密解
# scp -P3231 /etc/csync2.bbs.key [email protected] :/etc
# scp -P3231 /etc/csync2.bbs.key [email protected] :/etc
【注】linuxtone服务器SSH端口 是3231,分别将key文件复制到集群的另外两台 机器上。

# vi /etc/hosts //配置主机名,分别添加到3台机器的hosts文件中.
192.168.169.112 bbs1.linuxtone.org
192.168.169.113 bbs2.linuxtone.org
192.168.169.114 bbs3.linuxtone.org

# mkdir /data/csync_backup //创建备份相关的目录(用于防止修改错误恢复),
如果启用了,分别在三台机器上建立相应的目录。

# vi /etc/csync2.cfg

引用
# csync for bbs.linuxtone.org cluster
# http://www.linuxtone.org
#nossl * *;
group bbsfarm
{
host bbs1.linuxtone.org bbs2.linuxtone.org bbs3.linuxtone.org ; //定义组成员
#
key /etc/csync2.bbs.key;
#
include /data/www/wwwroot/bbs ; //需要同步的目 录

exclude /data/www/wwwroot/bbs/attachments ; // 需要排除的目录。
exclude /data/www/wwwroot/bbs/forumdata ; // 需要排除同步的缓存目录。
# include /etc/apache;
# include %homedir%/bob;
# exclude %homedir%/bob/temp;
exclude *~ .*; //排除同步.开头的文件
#
# action
# {
# pattern /etc/apache/httpd.conf;
# pattern /etc/apache/sites-available/*;
# exec "/usr/sbin/apache2ctl graceful"; //可以匹配相关配置文件,并执行重启脚本 .
# logfile "/var/log/csync2_action.log";
# do-local;
# }
#
backup-directory /data/csync_backup; //防错备份目录,根据自己的需求设置。
backup-generations 3;
auto younger; //同步以最新的文件为标准更新.
}
#
# prefix homedir
# {
# on host[12]: /export/users;
# on *: /home;
# }



3、csync2相关命令介绍
# csync2 –vvv –T 测试csync配置是否正确,可以看到相关SQL执行过程.
# csync2 –xv 执行同步命令
# csync2 –xvvv 执行同步命令,并显示出详细的信息.

二、利用inotify实现数据的实时同步更新.
1、
安装inotify-tools
# cd /usr/local/src/csync2
# tar zxvf inotify-tools-3.13.tar.gz
# inotify-tools-3.13
# ./configure && make && make install

2、配置inotify触发同步脚本.
# cd /usr/local/sbin
# vi csync2_bbs.sh

引用
#!/bin/bash
src=/data/www/wwwroot/bbs
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \
--exclude "\.swp$" \
-e close_write,mod ify,delete,create,attrib \
${src} \
| while read file
do
#csync2 -x >/dev/null 2>&1
csync2 -xv
echo "${src} was csynced....."
done


# chmod a+x csync2_bbs.sh
# ./csync2_bbs.sh //分别在三台机器上创建并执行此脚本,并将其加入/etc/rc.local 中。

3.测试同步是否正常
在三台机器中的任一台创建或者删除一个文件,然后查看其它机器是否创建或删除。
如果遇到问题就用csync2 –xv命令手动调试并,根据错误信息作调整。

三、相关参考及注意事项.
1、相关参考资料:
http://oss.linbit.com/csync2/paper.pdf
http://zhenhuiliang.blogspot.com/2006/04/csync2-is-so-cool.html

【注】目前csync2的资料比较少,在国内基本上没有看到有人编写此类文档,大家遇
到问题可以看官方的mailist或者到http://bbs.linuxtone.org 和相关版主们一起交流,同
时你有什么好的应用 心得和意见也欢迎反馈。

2、应该注意的问题.
缓存相关的目录尽量不要用csync2去处理,这个程序目录尽量交给NFS处理.

配置文件中的backup-directory,如果定义了别忘记在各机器上建立,否则删除相关文件的时候会出现SQL错误。
你也可以把这个backup-directory相关的配置注掉不启用。

 

 

二、

rsync+inotify

三、

google开源项目Openduckbill(依赖于inotify- tools)

http://code.google.com/p/openduckbill/
四、
sersync
		
http://code.google.com/p/sersync/

你可能感兴趣的:(系统管理)