作者:NetSeek                              来源: http://www.linuxtone.org

【关键技术】
利用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/p_w_uploads; //需要排除的目录。
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,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://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相关的配置注掉不启用。