linux项目功能简介,Sersync使用指南

目录:

sersync项目简介:

Sersync服务器同步程序 项目简介与设计框架

sersync基本功能的安装配置详见:

sersync2 完全安装配置说明(一) ----基本功能使用

sersync功能的定制和高级配置详见:

sersync2 完全安装配置说明(二) ----可选功能与xml高级配置

sersync插件配置详见:

sersync2 完全安装配置说明(三) ----插件基本配置和使用

sersync编译:

sersync需要二次开发的用户请参考

项目简介:

本项目利用inotify与rsync对服务器进行实时同步,其中inotify用于监控文件系统事件,rsync是目前广泛使用的同步算法,其优点是只对文件不同的部分进行操作,所以其优势大大超过使用挂接文件系统的方式进行镜像同步。

目前使用的比较多的同步程序版本是inotify-tools,另外一个是google开源项目Openduckbill(依赖于inotify-tools),这两个都是基于脚本语言编写的,其设计思路同样是采用inotify与rsync命令。 相比较上面两个项目,本项目优点是:

1.sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤(我稍后会提到),所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。

2.相比较上面两个项目,sersync配置起来很简单:在http://code.google.com/p/sersync/downloads/list 处下载源码(分为32版本,与64位版本),其中bin目录下已经有我编译好的2进制文件,配合bin目录下的xml文件直接使用即可。

3.另外本项目相比较其他脚本开源项目,使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。

4.本项目自带出错处理机制,通过失败队列对出错的文件重新出错,如果仍旧失败,则每10个小时对同步失败的文件重新同步。

5.本项目自带crontab功能,只需在xml配置文件中开启,即可按您的要求,隔一段时间整体同步一次。

6.本项目自带socket与http协议扩展,满足您二次开发的需要。

基本架构:

6d99aa4dec96a3eb63c30e0fe2de4d02.bmp

设计简析:

如上图所示,线程组线程是等待线程队列的守护线程,当队列中有数据的时候,线程组守护线程逐个唤醒,当队列中inotify事件交多的时候就会被全部唤醒一起工作。这样设计的目的是能够同时处理多个inotify事件,重发利用服务器的并发能力(核数*2+2)。

之所以称之为线程组线程,是因为每个线程在工作的时候,会根据服务器的数量建立子线程,子线程可以保证所有的文件与各个服务器同时同步,当要同步的文件较大的时候,这样设计可以保证各个远程服务器可以同时获得要同步的文件。

服务线程的作用有三个,首先是处理同步失败的文件,将这些文件再次同步,对于再次同步失败的文件会生成rsync_fail_log.sh脚本,记录失败的事件。同时每隔10个小时执行脚本一次,同时清空脚本。服务线程的第三个作用是crontab功能,可以每隔一定时间,将所有路径整体同步一次。

过滤队列的建立是为了过滤短时间内产生的重复的inotify信息,例如在删除文件夹得时候,inotify就会同时产生删除文件夹里的文件与删除文件夹得事件,通过过滤队列当删除文件夹事件产生的时候,会将之前加入队列的删除文件的事件全部过滤掉,这样只产生一条事件减轻了同步的负担。同时对于修改文件的操作的时候,会产生临时文件与重复操作。

举例:

当我们在vi的一个test文件,进行wq操作的时候会产生如下事件:

be2f08411df36851437222dc519efaa2.bmp

即使把"."开头与"~"结尾的世界过滤了,对于test文件仍旧有3次操作,分别是删除,创建与保存,通过过滤队列,就只剩下一个事件,一定程度上也提高了效率。

过滤队列第二个作用,即当你在本机删除目录的时候,假设你删除一个有5个文件的目录,inotify会产生6个事件,分别是5个文件删除事件,和一个删除目录事件,如果使用过滤队列,正常情况下会只产生一个删除目录的事件,大大减少了rsync通信次数。(当然,这不是绝对的。如果这6个事件分多次读到进入队列,那么可能还没来得及过滤,就已经被同步线程从队列中取走同步了。但一定程度上可以减少删除文件夹得同步通信次数)。

过滤队列的第三个作用,可以过滤监控目录下的文件夹,如果不想同步目录下的一些文件夹,或者一些后缀的文件。对于不需监控的子文件夹,在inotify启动时候remove掉监控,对于不需监控子文件,产生的文件事件就会从在入同步队列前过滤掉。如果使用rsync用--exclude, 这样虽然也可以过滤,但还是与rsync守护进程进行了一次交互。0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
sersync +rsync实现数据实时同步 主机A 装sersync (数据源,源机器)192.168.0.63 主机B装rsync (备份端,目标机器)192.168.0.64 实验结果:主机A进行新增,修改,删除文件的操作,文件或目录发生了变化,主机B会实时同步发生变化的文件或目录。rsync同步的时候是对整个目录进行同步,数据量大时,效率低,sersync可以监控变化的文件,配合rsync只同步变化的文件,效率提高。 同步过程 在主机A开启sersync服务,配置sersyncsersync会监控配置文件路径中的文件变化 A主机调用rsync客户端命令把变化的文件同步到B主机 在B主机配置rsync服务,用来接收A主机的推送命令 A主机解压 tar -xzvf sersync2.5.4.tar.gz -C /opt 把目录改名 mv GNU-Linux-x86 sersync 进入目录 cd /opt/sersync 备份配置文件 cp confxml.xml confxml.xml.bak 修改配置文件  vim confxml.xml <sersync> <localpath watch="/var/www/html"> #本地同步数据目录。 <remote ip="B主机ip地址" name="wwwroot"/> #B主机rsync 模块名称 users="B主机/etc/rsyncd.conf配置文件中的auth users值" passwordfile="B主机/etc/rsyncd.conf配置文件中的secrets file值" A主机/opt/sersync/confxml.xml配置文件如下图 B主机/etc/rsyncd.conf配置文件如下图 A主机 加载配置文件并启动 /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml A主机检查sersync是否运行  ps aux | grep 'sersync'|grep -v 'grep' A主机sersync成功运行后,B主机的/var/www/html目录下输入 watch ls -l 进行观察 A主机的/var/www/html目录下新建或删除文件等操作,B主机查看同步效果 设置sersync开机自动执行 vi /etc/rc.d/rc.local /opt/sersync/sersync2 -d -r -o /opt/sersync/confxml.xml 添加脚本监控 sersync 是否正常运行 vim check_sersync.sh #!/bin/bash sersync="/opt/sersync/sersync2" confxml="/opt/sersync/confxml.xml" status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l) if [ $status -eq 0 ];then         $sersync -d -r -o $confxml & else echo "$sersync已运行无需再次运行" exit 0; fi 给脚本添加执行权限,并添加到定时任务,每周一执行(分,时,日,月,周) chmod +x /opt /check_sersync.sh crontab -e * * * * 1 /opt/check_sersync.sh

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值