rsync+sersync多线程实时同步
一、sersync优点
1)使用c++编写,对linux系统文件产生的临时文件和重复文件操作会进行过滤,在结合rsync同步的时候,会减少运行时消耗的本地及网络资源,因此速度更快。
2)相比较inotify-tools,sersync配置起来简单,https://code.google.com/archive/p/sersync/downloads下载源码,其中bin目录下是已经编译好的二进制文件,配合bin目录下的xml文件直接使用即可。
3)使用多线程同步(可以并发同步多个不同的文件),尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。
4)sersync自带出错处理机制,通过失败队列对出错的文件重新同步,如果仍旧失败,则每若干个小时对同步失败的文件再重新同步。
5)sersync自带crontab功能,只需在xml配置文件中开启,即可按预先的配置,隔一段时间整体同步一次。
6)sersync自带socket与http的协议扩展,可以满足有特殊需求的公司的二次开发。
7)当同步的目录数据量不大时,建议使用rsync+inotify;当同步的目录数据量很大时(几百G甚至1T以上)文件很多时,建议使用rsync+sersync
二、分析
1)线程组线程是等待线程队列的守护线程,当事件队列中有事件产生的时候,线程组守护线程就会逐个唤醒同步线程,当队列中inotify事件较多的时候,同步线程就会被全部唤醒一起工作。这样设计的目的是能够同时处理多个inotify事件,从而提升服务器的并发能力(核数*2+2)。之所以称之为线程组,是因为每个线程在工作的时候,会根据服务器上新写入文件的数量建立子线程,子线程可以保证所有的文件与各个服务器同时同步,当要同步的文件较大的时候,这样设计可以保证各个远程服务器可以同时获得要同步的文件。
2)服务线程的作用有三个:
a)首先是处理同步失败的文件,将这些文件再次同步,对于再次同步失败的文件会生成rsync_fail_log.sh脚本,记录失败的事件。
b)每隔10隔小时执行脚本一次,同时清空脚本。
c)第三个作用是crontab功能,可以每隔一定时间,将所有路径整体同步一次。
3)过滤队列的建立是为了过滤短时间内产生的重复的inofity信息,例如在删除文件夹的时候,inotify就会同时产生删除文件夹里的文件与文件夹的事件,通过过滤队列,当删除文件夹事件产生的时候,会将之前加入队列的删除文件的事件全部过滤掉,这样只产生一条删除文件夹的事件,从而减轻了同步的负担。同时对于修改文件的操作的时候,会产生临时文件的重复操作,过滤队列也会过滤掉这些临时文件。
三、rsync服务,下面只有关于这个项目的一些简单配置,具体请看http://www.cnblogs.com/bill2014/p/7398760.html
1)服务端的rsyncd.conf
[root@rsyncserver ~]# cat >rsyncd.conf<<EOF
#Rsync server
##rsyncd.conf start##
uid = root 这个就是共享目录的权限
gid = root 这个就是共享目录的权限
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 192.168.222.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################################
[www]
comment = www by old0boy 注释
path = /data0/www/www/
#####################################
[bbs]
comment = bbs by old0boy
path = /data0/www/bbs/
#####################################
[blog]
comment = blog by old0boy
path = /data0/www/blog/
2)接着在服务端创建目录
[root@rsyncserver ~]# mkdir -p /data0/www/www/ /data0/www/bbs/ /data0/www/blog/
3)客户端部署
3.1)在客户端创建目录和文件
[root@rsyncclient ~]# mkdir -p /data0/www/bbs/ /data0/www/www/ /data0/www/blog
[root@rsyncclient ~]# touch /data0/www/bbs/bbs.log /data0/www/www/www.log /data0/www/blog/blog.log
3.2)推送
[root@rsyncclient ~]# rsync -avzP /data0/www/bbs/ rsync_backup@192.168.222.140::bbs/ --password-file=/etc/rsync.password
[root@rsyncclient ~]# rsync -avzP /data0/www/www/ rsync_backup@192.168.222.140::www/ --password-file=/etc/rsync.password
[root@rsyncclient ~]# rsync -avzP /data0/www/blog/ rsync_backup@192.168.222.140::blog/ --password-file=/etc/rsync.password
四、下载sersync,并配置xml
4.1)下载,,https://code.google.com/archive/p/sersync/downloads,翻墙
[root@rsyncclient tools]# tar -zxf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/
[root@rsyncclient local]# mv GNU-Linux-x86 sersync
[root@rsyncclient local]# tree sersync/
sersync/
├── confxml.xml
└── sersync2 0 directories, 2 files
4.2)规范化目录
[root@rsyncclient sersync]# mkdir conf bin logs
[root@rsyncclient sersync]# mv confxml.xml conf
[root@rsyncclient sersync]# mv sersync2 bin/sersync
[root@rsyncclient sersync]# tree
.
├── bin
│ └── sersync
├── conf
│ └── confxml.xml
└── logs 3 directories, 2 files
4.3)更改优化sersync配置,24-28行,因为我只用了一个服务端一个客户端,所以只有一个同步服务器
原内容为:
<localpath watch="/opt/tongbu">
<remote ip="127.0.0.1" name="tongbu1"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
改为:
<localpath watch="/data0/www/www">
<remote ip="192.168.222.140" name="www"/>
</localpath>
<localpath watch="/data0/www/bbs">
<remote ip="192.168.222.140" name="bbs"/>
</localpath>
<localpath watch="/data0/www/blog">
<remote ip="192.168.222.140" name="blog"/>
</localpath>
4.4)更改31-34行,认证部分
<commonParams params="-artuz"/>
<auth start="false" users="root" passwordfile="/etc/rsync.pas"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/> 改为:
<rsync>
<commonParams params="-aruz"/>
<auth start="true" users="rsync_backup"
passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="true" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
上面这个配置就是在拼接rsync -zvzP --timeout=100 /data0/www/www/ rsync_backup@192.168.222.140::www/ --password-file=/etc/rsync.password这个命令
4.5)修改36-37行
<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--> 改为:
<failLog path="/usr/local/sersync/logs/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
当同步失败后,日志记录到/usr/local/sersync/logs/rsync_fail_log.sh,并且每60分钟对失败的log进行重新同步。
五、开启sersync守护进程同步数据
5.1)配置sersync环境变量
[root@rsyncclient conf]# echo 'export PATH=$PATH:/usr/local/sersync/bin'>>/etc/profile
[root@rsyncclient conf]# tail -1 /etc/profile
export PATH=$PATH:/usr/local/sersync/bin
[root@rsyncclient conf]# source /etc/profile
[root@rsyncclient conf]# which sersync
/usr/local/sersync/bin/sersync
5.2)启动命令:
[root@rsyncclient conf]# sersync -r -d -o /usr/local/sersync/conf/confxml.xml
测试结果:发现问题,仅能第一个模块的路径可以同步,其他下面的路径不能同步。
只同步了第一个目录
[root@rsyncclient conf]# sersync -r -d -o /usr/local/sersync/conf/confxml.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -r rsync all the local files to the remote servers before the sersync work
option: -d run as a daemon
option: -o config xml name: /usr/local/sersync/conf/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_backup
passwordfile is /etc/rsync.password
after each synchronize run the plugin plugin name is: command
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12 = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /data0/www/www && rsync -aruz -R --delete ./ --timeout=100 rsync_backup@192.168.222.140::www --password-file=/etc/rsync.password >/dev/null 2>&1
run the sersync:
watch path is: /data0/www/www
5.3)多实例
5.3.1)多实例,在conf下,拷贝xml
[root@rsyncclient conf]# cp confxml.xml www_confxml.xml
[root@rsyncclient conf]# cp confxml.xml bbs_confxml.xml
[root@rsyncclient conf]# cp confxml.xml blog_confxml.xml
5.3.2)然后再各个xml下还需要修改错误日志文件的名字,例如bbs_rsync_fail_log.sh
<failLog path="/usr/local/sersync/logs/bbs_rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
5.3.3)在localpath段内也只需要保留该实例的的ip和模块,否则只会跟上面第一次同步的情况一样,依旧是第一个目录
<localpath watch="/data0/www/bbs">
<remote ip="192.168.222.140" name="bbs"/>
</localpath>
5.3.4)多实例初始化同步:
sersync -r -d -o /usr/local/sersync/conf/www_confxml.xml
sersync -r -d -o /usr/local/sersync/conf/blog_confxml.xml
sersync -r -d -o /usr/local/sersync/conf/bbs_confxml.xml
如果已经初始化过了,下次就可以不加-r选项
5.3.5)开机自动执行
将上面的命令除去-r加入rc.local
六、参数
参数-d:启用守护进程模式
参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍,如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步
c参数-n: 指定开启守护线程的数量,默认为10个
参数-o:指定配置文件,默认使用confxml.xml文件
参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块
参数-m:单独启用其他模块,使用 -m socket 开启socket模块
参数-m:单独启用其他模块,使用 -m http 开启http模块
不加-m参数,则默认执行同步程序
rsync+sersync多线程实时同步的更多相关文章
- Rsync+Sersync数据实时同步(双向)
Rsync+Sersync数据实时同步(双向) 服务介绍 一.为什么要用rsync+sersync架构? 1.sersync是基于inotify开发的,类似于inotify-tools的工具 2.se ...
- centos6.6配置rsync+sersync实现实时同步分布式多客户端分发同步
1.sersync项目: sersync项目利用inotify与rsync技术实现对服务器数据实时同步到解决方案,其中inotify用于监控sersync所在服务器上文件系统的事件变化,rsync是目 ...
- Rsync+sersync实现实时同步
介绍: sersync主要用于服务器同步,web镜像等功能.基于boost1.43.0,inotify api,rsync command.开发.目前使用的比较多的同步解决方案是inotify-too ...
- Rsync+sersync文件实时同步
一.为什么要用Rsync+sersync架构1.sersync是基于Inotify开发的,类似于Inotify-tools的工具2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改 ...
- sersync/lsyncd实时同步
第一章 sersync/lsync实时同步 1.1 实时同步服务原理/概念 1)需要部署好rsync守护进程服务,实现数据传输 2)需要部署好inotify服务,实现目录中数据变化监控 3)将rsyn ...
- rsync+inotify-tools文件实时同步
rsync+inotify-tools文件实时同步案例 全量备份 Linux下Rsync+sersync实现数据实时同步完成. 增量备份 纯粹的使用rsync做单向同步时,rsync的守护进程是运行在 ...
- (转)Linux系统sersync数据实时同步
Linux系统sersync数据实时同步 原文:http://blog.csdn.net/mingongge/article/details/52985259 前面介绍了以守护进程的方式传输或同步数据 ...
- linux rsync +inotify 实现 实时同步
前言: rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rs ...
- rsync + sersync 实现实时数据同步
一.环境: 主机1:youzhuan-bak centos 7.2 主机2:youzhuan-online centos 7.2 二.部署过程: youzhuan-bak : [root@ ...
随机推荐
- Android WebView 笔记
WebView(网络视图)能载入显示载入网页.将网页内容载入到手机client,它使用了WebKit渲染引擎载入显示网页,实现WebView有下面方法: 首先要实如今手机client显示必需要求注冊一 ...
- 阿里云经典网络和专有 专有自己设置网络和私网IP
阿里云网络系列之经典网络和专有网络 驻云科技 2016-07-29 13:43:44 浏览45005 评论9 云栖社区 nginx 安全与风控 系统软件 编程语言 数据存储与数据库 系统研发与运维 ...
- 长尾分布,重尾分布(Heavy-tailed Distribution)
Zipf分布: Zipf分布是一种符合长尾的分布: 就是指尾巴很长的分布.那么尾巴很长很厚的分布有什么特殊的呢?有两方面:一方面,这种分布会使得你的采样不准,估值不准,因为尾部占了很大部分.另一方面, ...
- 第一百五十六节,封装库--JavaScript,延迟加载
封装库--JavaScript,延迟加载 延迟加载的好处,就是在浏览器视窗外的图片,不加载,拖动鼠标到浏览器视窗内后加载,用户不看的图片就不用加载,可以减少服务器大量流量 将图片的src地址用一张统一 ...
- String类和StringBuffer类
位于java.lang包中,这个包中的类使用时不用导入 String类一旦初始化就不可以改变,而stringbuffer则可以.它用于封装内容可变的字符串.它可以使用tostring()转换成stri ...
- ListView setOnItemClickListener无效原因具体分析
前言 近期在做项目的过程中,在使用listview的时候遇到了设置item监听事件的时候在没有回调onItemClick 方法的问题. 我的情况是在item中有一个Buttonbutton. 所以不会 ...
- Ubuntu安装qBittorrent
qBitTorrent是Ubuntu Linux中最受欢迎的P2P软件之中的一个. 出自一名法国大学生之手的qBitTorrent功能强大.界面精美.操作直观. qBitTorrent是Linux中最 ...
- java必备——经典的Hibernate
在编程开发中,我们有非常多框架,他们有些非常方便,也非常有用,今天我们一起来认识一个java经典的框架Hibernate,Hibernate英文名称为"冬眠".这是个非常有意思的技 ...
- nginx已经启动 无法访问页面
通过IP访问,可以看到 welcome nginx 的提示 下面我重启linux服务器,重启后通过ip访问,死活连接不上了?没办法了,只有在百度和google 最后发现问题不是出在nginx上,而是 ...
- cocos3.x 实现android沉浸式模式(全屏,隐藏导航栏即虚拟键)
只有在Android 4.4及以上系统才支持沉浸式模式,修改 AppActivity代码如下: @Override public Cocos2dxGLSurfaceView onCreateView( ...