一、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,FQ

[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
└── sersync20 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
└── logs3 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参数,则默认执行同步程序

转载于:https://www.cnblogs.com/bill2014/p/7416289.html

rsync+sersync多线程实时同步相关推荐

  1. MySQL :rsync+sersync文件实时同步

    文章目录 1. rsync是什么 rsync+sersync文件实时同步 一:环境 二:备份服务器操作 三:数据源服务器操作 安装rsync客户端软件 安装sersync工具,实时触发rsync进行同 ...

  2. rsync+inotify实现实时同步案例详解

    rsync+inotify实现实时同步案例详解 转自:http://chocolee.blog.51cto.com/8158455/1400596 随着应用系统规模的不断扩大,对数据的安全性和可靠性也 ...

  3. Rsync+inotify实现实时同步

    如果有一天去接受面试:面试官问你一个1t的文件需要进行传输,问题用何种方法.假如你答了scp或者ftp.那么你挂的几率是很大的 一.inotify介绍 inotify-tools有两个命令 //ino ...

  4. rsync + inotify 实现实时同步

    rsync + inotify 实现实时同步 rsync 简介 Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.并且可以不进行改变原有数据的属性信息,实现 ...

  5. Rsync和Sersync(企业实时同步方案)

    注:本文章依据参考文章中的信息资料结合自己的实践操作而成 一.实验环境介绍 系统版本:Cent OS 7.4 X64 内核版本:3.10.0-693.5.2.el7.x86_64 系统采用最小化安装, ...

  6. sersync进行实时同步数据

    上面是网络 可以有多个目标服务器,本机同步也可以(要同时开sersync服务和rsync守护进程) 需求: 1.源服务器上 要备份的是  /opt/tongbu1/ /opt/tongbu2/目录包括 ...

  7. sersync/lsync实时同步

    第一章 为什么需要实时同步 1.第二阶段实时同步解决了什么问题: 解决 NFS单点故障问题 备份NFS数据并且提供冗余的服务功能 2.实时同步难点 什么条件才同步 多久同步一次 用什么备份方式同步 用 ...

  8. RedHat Linux下利用sersync进行实时同步数据

    拓扑图如下: 可以有多个目标服务器,本机同步也可以(要同时开sersync服务和rsync守护进程) 需求: 1.源服务器上 要备份的是/data/bookfm/doc/book 目录包括子目录下的o ...

  9. 使用rsync实现数据实时同步备份--实战

    实战3: 配置rsync 服务器及需要备份的目录,不使用系统用户需要自己创建自己的配置文件: /etc/rsyncd.conf ; 创建备份帐户,最后把rsync 以daemon方式运行. 配置文件: ...

最新文章

  1. 融云php sdk下载安装,LICENSE · 融云 RongCloud/server-sdk-php-composer - Gitee.com
  2. 【python】 读取Excel文件并绘制图表
  3. VS的几个实用快捷键
  4. 基于curl的php多线程类(异步请求)
  5. 在linux环境下安装wiringpi库,wiringPi库的pwm配置及使用说明
  6. Kernel Method核方法—应用与理解
  7. Characteristics with cached values must be read-only
  8. Go语言的线程模型-线程阻塞+线程调度
  9. ie不支持replaceall_继IE之后,微软又要彻底放弃这些office了
  10. xcode 9.0 iOS 11
  11. 自建nod32更新服务器,ESET NOD32镜像更新服务器
  12. C++描述 LeetCode 112. 路径总和
  13. 生活细语:送给每一个热爱生活的人[ 收集整理,超强!!!]
  14. 银行业大数据分析:如何用大数据技术优化ATM运营
  15. linux删除指定的行
  16. UART、RS232、RS485和RS422
  17. python实现电话号码映射
  18. 11.Unity ShaderGraph实例(LWRP+PBRMaster节点制作全息效果的精灵)
  19. 英国电信进军中国市场,难对三大运营商造成太大影响
  20. 动态滤波补偿装置谐波治理

热门文章

  1. C语言基础之--sizeof()运算符的使用以及注意
  2. DEDE常见的错误(转)
  3. Visual Studio 2010修改授权
  4. 深度学习和OpenCV-python读书笔记一(DNN介绍)
  5. 2-字符串能否构成三角形及何种三角形
  6. python线程池并发爬虫_python 并发专题(二):python线程以及线程池相关以及实现...
  7. Centre Consortium 发布了USDC 智能合约 2.1 版本
  8. Tendermint推出2000万美元风投基金,促进Cosmos发展
  9. 著名加密艺术家XCOPY的NFT作品以1000ETH售出,约合173.5万美元
  10. 链上体育和游戏平台Rage.Fan完成160万美元私募轮融资