csync2+inotify实现大量小文件实时同步方案

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

1.安装软件 (以下步骤在每台主机上操作)
yum install gcc gcc-c++ libgpg-error libgpg-error-devel libgcrypt libgcrypt-devel -y
tar zxf libtasn1-2.1.tar.gz
cd libtasn1-2.1
./configure && make && make install
tar zxf sqlite-2.8.17.tar.gz           一款轻型的数据库
cd sqlite-2.8.17
./configure && make && make install
tar zxf librsync-0.9.7.tar.gz
cd librsync-0.9.7
./configure && make && make install
tar jxf gnutls-2.6.6.tar.bz2
cd gnutls-2.6.6
./configure && make && make install
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig                                ldconfig读取的配置文件是/etc/ld.so.conf
tar zxf inotify-tools-3.13.tar.gz
inotify-tools-3.13
./configure && make && make install
yum install byacc flex -y
tar zxf csync2-1.34.tar.gz
cd csync2-1.34
./configure && make && make install
make cert               产生证书      第2台主机不需make和下面一步,只需将第1台主机/etc/csync2* 拷贝到第2台主机

csync2 -k /etc/csync2.key   产生钥匙
scp /etc/csync2.key station12:/etc
2. 配置csync2
yum install xinetd -y
cd /etc/xinetd.d/
cp rsync   csync2
vi /etc/xinetd.d/csync2
service csync2
{
disable = no
protocol = tcp
flags = REUSE
socket_type = stream
wait = no
user = root
group = root (station12上不用重新创建key)
server = /usr/local/sbin/csync2
server_args = -i
}

vi /etc/services
csync2 30865/tcp
mkdir /var/csync2
vi /etc/csync2.cfg
#
#
#
#

group mygroup
{
host station11 station12; (每台主机完整的主机名)
#host host4@host4-eth2;
#
key /etc/csync2.key;    指明key的位置
#include /var/www/html; 需要同步的目录
include /test;
#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 /var/csync2; 防错备份目录,根据自己的需求设置,每台主机上都要有
backup-generations 3;
#
auto younger; 同步以最新的文件为标准更新
}
#
# prefix homedir
#{
#on host[12]: /export/users;
#on *:/home;
#}

service xinetd start
chkconfig xinetd on


3.配置inotify触发脚本
vi /usr/local/sbin/csync2.sh
#!/bin/bash
src=/var/www/html
/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.sh
csync2.sh & (在每台主机上执行 )

4.测试测试同步是否正常
在两台机器中的任一台创建或者删除一个文件,然后查看其它机器是否创建或删除。
如果遇到问题就用csync2 -xv命令手动调试并,根据错误信息作调整。
注:csync2相关命令介绍
csync2 -vvv -T 测试csync配置是否正确,可以看到相关SQL执行过程.
csync2 -xv 执行同步命令
csync2 -xvvv 执行同步命令,并显示出详细的信息.
应该注意的问题.
缓存相关的目录尽量不要用csync2去处理,这个程序目录尽量交给NFS处理.

如果双方不能通信,则在双方的/etc/hosts 文件里写上对方的ip和hostname。
注意防火墙和selinux关掉