IT 运维专家网
csync2+inotify实现大量小文件实时同步方案
作者:
NetSeek
日期
2009-5-7
【关键技术】
利用csync2+sqlite实现数据的高效实时的增量备份,相关目录及文件信息都存储在sqlite数据库中,
大大提升了同步的速率和效率;利用inotify触发式(实时)执行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
IT 运维专家网
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
IT 运维专家网
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
# scp -P3231 /etc/csync2.bbs.key
【注】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
#
#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; //需要排除的目录。
IT 运维专家网
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
IT 运维专家网
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,modify,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://zhenhuiliang.blogspot.com/2006/04/csync2-is-so-cool.html【注】目前csync2的资料比较少,在国内基本上没有看到有人编写此类文档,大家遇
到问题可以看官方的mailist或者到 和相关版主们一起交流,同
时你有什么好的应用心得和意见也欢迎反馈。
2、
应该注意的问题.
缓存相关的目录尽量不要用csync2去处理,这个程序目录尽量交给NFS处理.
配置文件中的backup-directory,如果定义了别忘记在各机器上建立,否则删除相关文件的时候会出现SQL错误。你也可以把这个backup-directory相关的配置注掉不启用。