一、关键技术 利用csync2+sqlite实现数据的高效实时的增量备份,相关目录及文件信息都存储在sqlite数据库中, 大大提升了同步的速率和效率;利用inotify触发式(实时)执行csync同步命令更新文件。 二、方案适用 图片服务器集群方案: ReiserFS4+csync2+inotify 网站服务程序分布式方案:csync2+inotify+NFS [注](如,网站程序中存在缓存目录则排除此目录同步,将缓存目录挂载在NFS上) 分布式集群软件配置更新同步方案: csync2+inotify [注](如,集群中heartbeat相关的配置文件,如apache,Nginx的配置文件,并能执行相关脚本) 三、实际配置过程 系统:centos5.1 结构: 三台服务器 引用 # vi /etc/hosts 192.168.4.188 csync1 192.168.4.190 csync2 192.168.4.191 csync3 1 、创建下载文件列表 引用 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 2 、创建安装脚本并执行 引用 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 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 3 、赋予脚本可执行权限并执行: 引用(注:需要在每个节点执行脚本) chmod 755 install.sh ./install.sh 4 、编辑hosts文件如下内容: 引用 vi /etc/hosts 192.168.4.188 csync1 192.168.4.190 csync2 192.168.4.191 csync3 (三台主机都要修改) 5 、生成密钥并分发到每个节点: 引用 csync2 -k /etc/test.key scp /etc/test.key root@node2:/etc/ 6 、创建备份目录: 引用 mkdir /var/csync_backup 注:用于防止修改错误恢复,如果启用了,分别在其他节点建立相应的目录。 7 、修改csync2配置文件(所有节点相同): 引用 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; //同步以最新的文件为标准更新. } 启动服务: 引用 /etc/init.d/xinetd start 或者: service xinetd start 注:csync2相关测试命令 引用 csync2 –vvv –T测试csync配置是否正确,可以看到相关sql执行过程 csync2 –xv 执行同步命令 csync2 –xvvv 执行同步命令,并显示出详细的信息 8. 做个软链接 32 位系统: ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0 64 位系统: ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0 9 、配置inotify触发同步脚本(所有节点相同): 引用 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 后台执行脚本: 引用 chmod a+x /usr/local/sbin/csync2_test.sh csync2_test.sh & 10 、测试文件同步: 在任一节点上创建,修改,移动,或者删除文件或目录,在其他节点检查是否同步,如果没有同步,请使用csync2的相关测试命令测试同步是否正常。 本文出自 51CTO.COM技术博客 |
以上是内存溢出为你收集整理的实践csync2+inotify实现文件实时同步全部内容,希望文章能够帮你解决实践csync2+inotify实现文件实时同步所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)