大量小文件实时同步方案

一、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


# 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 root@192.168.169.113 :/etc
# scp -P3231 /etc/csync2.bbs.key root@192.168.169.114 :/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)

四、
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值