作者: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
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
# 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
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
}
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;
# }
#!/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
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相关的配置注掉不启用。
转载于:https://blog.51cto.com/williamherry/661819