实践csync2+inotify实现文件实时同步

前端之家收集整理的这篇文章主要介绍了实践csync2+inotify实现文件实时同步前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
一、关键技术

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

二、方案适用

图片服务器集群方案: ReiserFS4+csync2+inotify
网站服务程序分布式方案:csync2+inotify+NFS
[
](如,网站程序中存在缓存目录则排除此目录同步,将缓存目录挂载在NFS上)
分布式集群软件配置更新同步方案: csync2+inotify
[
](,集群中heartbeat相关的配置文件,如apache,Nginx配置文件,并能执行相关脚本)

三、实际配置过程

系统:centos5.1
结构: 三台服务器
@H_502_80@
引用 @H_502_80@
# vi /etc/hosts @H_502_80@
192.168.4.188 csync1 @H_502_80@
192.168.4.190 csync2 @H_502_80@
192.168.4.191 csync3 @H_502_80@


1
、创建下载文件列表 @H_502_80@
引用 @H_502_80@
cd /usr/local/src/
vi list //
以下内容
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
http://jaist.dl.sourceforge.net/sourceforge/inotify-tools/inotify-tools-3.13.tar.gz
@H_502_80@

2
、创建安装脚本并执行 @H_502_80@
引用 @H_502_80@
vi install.sh // 以下内容
wget
i list
cd /usr/local/src/
tar zxvf libgpg-error-1.7.tar.gz
cd libgpg-error-1.7
./configure && make && make install
cd ..
tar zxvf libgcrypt-1.4.4.tar.gz
cd libgcrypt-1.4.4
./configure --with-gpg-error-prefix=/usr/local && make && make install
cd ..
tar zxvf libtasn1-2.1.tar.gz
cd libtasn1-2.1
./configure && make && make install
cd ..
tar zxvf sqlite-2.8.17.tar.gz
cd sqlite-2.8.17
./configure && make && make install
cd ..
tar zxvf librsync-0.9.7.tar.gz
cd librsync-0.9.7
./configure && make && make install
cd ..
tar jxvf gnutls-2.6.6.tar.bz2
cd gnutls-2.6.6
./configure --with-libgcrypt-prefix=/usr/local/ && make && make install
cd ..
echo "/usr/local/lib" >> /etc/ld.so.conf
@H_502_80@
ldconfig
tar zxvf csync2-1.34.tar.gz
cd csync2-1.34
./configure && make && make install && make cert
cd ..
tar zxvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13
./configure && make && make install
cd ..
echo "csync2 30865/tcp" >> /etc/services
echo "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.10.50 192.168.10.51
}" > /etc/xinetd.d/csync2
chkconfig xinetd on
@H_502_80@

3
、赋予脚本可执行权限并执行: @H_502_80@
引用(注:需要在每个节点执行脚本 @H_502_80@
chmod 755 install.sh
./install.sh
@H_502_80@
@H_502_80@
4 、编辑hosts文件如下内容 @H_502_80@
引用 @H_502_80@
vi /etc/hosts
192.168.4.188 csync1
@H_502_80@
192.168.4.190 csync2 @H_502_80@
192.168.4.191 csync3 @H_502_80@
(三台主机都要修改

@H_502_80@
@H_502_80@

5
生成密钥并分发到每个节点: @H_502_80@
引用 @H_502_80@
csync2 -k /etc/test.key
scp /etc/test.key root@node2:/etc/
@H_502_80@

6
、创建备份目录: @H_502_80@
引用 @H_502_80@
mkdir /var/csync_backup @H_502_80@

注:用于防止修改错误恢复,如果启用了,分别在其他节点建立相应的目录。

7
修改csync2配置文件(所有节点相同): @H_502_80@
引用 @H_502_80@
vi /etc/csync2.cfg // 以下内容
group testgroup
{
host csync1 csync2 csync3; //
定义组成员
key /etc/test.key; //
制定密钥
include /var/www/html; //
需要同步的目录
exclude /var/www/html/temp; //
需要排除的目录。
exclude /var/www/html/templates_; //
需要排除同步的缓存目录。
exclude *~ .*; //
排除同步.开头的文件
backup-directory /var/csync_backup; //
防错备份目录,根据自己的需求设置。
backup-generations 3;
auto younger; //
同步以最新的文件为标准更新.
}
@H_502_80@

启动服务: @H_502_80@
引用 @H_502_80@
/etc/init.d/xinetd start @H_502_80@
或者: @H_502_80@
service xinetd start @H_502_80@

注:csync2相关测试命令 @H_502_80@
引用 @H_502_80@
csync2 vvv T测试csync配置是否正确,可以看到相关sql执行过程
csync2
xv 执行同步命令
csync2
xvvv 执行同步命令,并显示出详细的信息
@H_502_80@
@H_502_80@
8. 做个软链接 @H_502_80@
32 位系统: @H_502_80@
ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0 @H_502_80@
64 位系统: @H_502_80@
ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0 @H_502_80@
@H_502_80@
9 、配置inotify触发同步脚本(所有节点相同): @H_502_80@
引用 @H_502_80@
vi /usr/local/sbin/csync2_test.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,move /
${src} /
| while read file
do
csync2 -x >/dev/null 2>&1
done
@H_502_80@

后台执行脚本: @H_502_80@
引用 @H_502_80@
chmod a+x /usr/local/sbin/csync2_test.sh
csync2_test.sh &
@H_502_80@


@H_502_80@

10 @H_502_80@
@H_502_80@
转载自 @H_502_80@
http://www.jb51.cc/article/p-kknhxylm-ban.html @H_502_80@
@H_502_80@
@H_502_80@
@H_502_80@ 、测试文件同步:
在任一节点上创建,修改,移动,或者删除文件或目录,在其他节点检查是否同步,如果没有同步,请使用csync2的相关测试命令测试同步是否正常。
@H_502_80@

猜你在找的Sqlite相关文章