1、sersync项目:
sersync项目利用inotify与rsync技术实现对服务器数据实时同步到解决方案,其中inotify用于监控sersync所在服务器上文件系统的事件变化,rsync是目前广泛使用的本地及异地数据同步工具,其优点是只对变化的目录数据操作。
sersync项目的优点:
1)使用C++编写,对linux系统文件产生的临时文件和重复的文件操作会进行过滤,再结合rsync同步到时候,会减少网络资源,因此速度更快。
3)使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。
4)sersync自带出错处理机制,通过失败队列对出错的文件重新同步,如果扔失败,则每10个小时对同步失败的文件再重新同步。
5)sersync自带crontab功能,只需在xml配置文件中开启,即可按预先的配置,隔一段时间整理同步一次。
6)sersync自带socket与http的协议扩展,可以满足有特需要去掉公司二次开发。
inotify识别事件参考:
2、配置前准备
1)环境准备说明:
192.168.233.129 rsync server(rsync服务端)
192.168.233.132 sersync
2)配置前检查
cat /etc/redhat-release
CentOS release 6.6 (Final)
uname -r
2.6.32-504.el6.x86_64
uname -m
x86_64
3)配置rsync服务端
#yum安装:
yum install -y rsync
# 下载编译安装很简单,tar==>configure --ferfix=/usr/local/rsync ==>make && make install 不详细列出步骤了,我这选择的是YUM安装,注意在编译安装后注意路径环境变量就可以了,其他都一样。
#检查安装
rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
#建立密码文件,并修改权限
echo "rsyncback:123.com" >/etc/rsync.password
chmod 600 /etc/rsync.password
#建立配置文件:
cat >>/etc/rsyncd.conf<<EOF
#/etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 200
hosts allow = *
timeout = 600
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
ignore errors
read only = false
list = false
host deny = 0.0.0.0/32
auth users = rsyncback
secrets file = /etc/rsync.password
transfer logging = yes
#Module definitions
[data]
comment = data by pjy
path = /data/
####################################
[www]
comment = www by pjy
path = /data/www/
###################################
[bbs]
comment = bbs by pjy
path = /data/bbs/
##################################
[blog]
comment = blog by pjy
path = /data/blog/
##################################
EOF
#创建模块监控目录,我这用的是root用户所以没有配置权限,如果指定的用户不同时,需要给目录配置用户权限。
mkdir -p /data/{www,bbs,blog}
tree /data
/data
├── bbs
├── blog
└── www
#启动rsync服务:
/usr/bin/rsync --damon
ps -ef|grep rsync|grep -v grep
root 7858 1 0 20:09 ? 00:00:00 rsync --daemon
netstat -lntp|grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7858/rsync
tcp 0 0 :::873 :::* LISTEN 7858/rsync
lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 7858 root 3u IPv4 224418 0t0 TCP *:rsync (LISTEN)
rsync 7858 root 5u IPv6 224419 0t0 TCP *:rsync (LISTEN
#在sersync端建立密码文件,并测试同步是否正常
echo "123.com" >/etc/rsync.password
chmod 600 /etc/rsync.password
rsync -zvaP --password-file=/etc/rsync.password rsyncback@192.168.233.129::data /data/
tree data/
./
├── bbs
├── blog
└── www
3、安装sersync服务
tar zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml
cp -rf GNU-Linux-x86/ /usr/local/sersync/
cd /usr/local/sersync/
mkdir bin logs conf
mv confxml.xml conf/
mv sersync2 bin/sersync
tree
.
├── bin
│   └── sersync
├── conf
│   └── confxml.xml
└── logs
#备份配置文件
cp conf/confxml.xml conf/confxml.xml.bak$(date +%F)
#配置环境变量
echo "export PATH=$PATH:/usr/local/sersync/bin" >>/etc/profile
tail -1 /etc/profile
source /etc/profile
which sersync
1)单实例配置:
#修改sersync配置文件:(有注释说明的地方是需要修改的)
<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<modify start="false"/>
</inotify>
<sersync>
<localpath watch="/data"> #指定本地要同步到目录
<remote ip="192.168.233.129" name="data"/> #指定rsync服务端的ip地址和模块名
</localpath>
<rsync>
<commonParams params="-aruz"/> #指定rsync同步选项
<auth start="true" users="rsyncback" passwordfile="/etc/rsync.password"/> #开启指定密码,对应rsync同时的用户名和密码文件
#如:rsync -zvaP --password-file=/etc/rsync.password rsyncback@192.168.233.129::data /data/
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 --> #指定超时100秒
<ssh start="false"/>
</rsync>
<failLog path="/usr/local/sersync/logs/www_rsync_fail_log.sh" #指定监控队列存放位置
timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync>
<plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin>
<plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
</localpath>
</plugin>
</head>
#配置英文变量,以防乱码:
LANG=EN
#启动监控服务(参数说明在后面)
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 rsyncback
passwordfile is /etc/rsync.password
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 /data/www && rsync -aruz -R --delete ./ rsyncback@192.168.233.129::www --password-file=/etc/rsync.password >/dev/null 2>&1
run the sersync:
watch path is: /data/www
#单实例监控完成,测试成功!
2)多实例配置(此次只用了一台rsync服务器模拟多台rsync服务端实时同步配置,换成多台服务器只需修改ip地址和模块即可)
#靠谱3个配置文件,模拟www,bbs,blog代码同步分发
cd /usr/local/sersync/conf
cp confxml.xml www_confxml.xml
cp confxml.xml bbs_confxml.xml
cp confxml.xml blog_confxml.xml
#修改配置文件:(这里只列出修改部分)
cat www_confxml.xml
<sersync>
<localpath watch="/data/www">
<remote ip="192.168.233.129" name="www"/>
</localpath>
<rsync>
<commonParams params="-aruz"/>
<auth start="true" users="rsyncback" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/usr/local/sersync/logs/www_rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
cat bbs_confxml.xml
<sersync>
<localpath watch="/data/bbs">
<remote ip="192.168.233.129" name="bbs"/>
</localpath>
<rsync>
<commonParams params="-aruz"/>
<auth start="true" users="rsyncback" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/usr/local/sersync/logs/bbs_rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
cat blog_confxml.xml
<sersync>
<localpath watch="/data/blog">
<remote ip="192.168.233.129" name="blog"/>
</localpath>
<rsync>
<commonParams params="-aruz"/>
<auth start="true" users="rsyncback" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/usr/local/sersync/logs/blog_rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
#修改注明:(版本号为sersync2.5.4_64)
1.修改默认配置的23到28行,指定本地同步目录,对端ip和模块
2.修改默认配置的30到33行,指定rsync同步时的参数,开启密码文件,指定用户,密码文件路径。
3.修改默认配置的36行,指定消息队列文件路径。
#重启动sersync服务:
ps -ef|grep sersync
root 14270 1 0 21:44 ? 00:00:00 sersync -r -d -o /usr/local/sersync/conf/confxml.xml
root 14445 13674 0 22:00 pts/0 00:00:00 grep sersync
pkill sersync
ps -ef|grep sersync
root 14459 13674 0 22:01 pts/0 00:00:00 grep sersync
sersync -d -o /usr/local/sersync/conf/www_confxml.xml
sersync -d -o /usr/local/sersync/conf/bbs_confxml.xml
sersync -d -o /usr/local/sersync/conf/blog_confxml.xml
#查看进程
ps -ef|grep sersync
root 14464 1 0 22:02 ? 00:00:00 sersync -d -o /usr/local/sersync/conf/www_confxml.xml
root 14482 1 0 22:03 ? 00:00:00 sersync -d -o /usr/local/sersync/conf/bbs_confxml.xml
root 14500 1 0 22:03 ? 00:00:00 sersync -d -o /usr/local/sersync/conf/blog_confxml.xml
#测试文件同步
cd /data
for i in `ls`;do echo ddd >>$i/$i$i.sh;done
tree /
./
├── bbs
│   ├── bbsbbs.sh
│   └── bbs.log
├── blog
│   ├── blogblog.sh
│   └── blog.log
└── www
├── www.log
└── wwwwww.sh
#rsync服务端,三个模块实时同步成功!
#将sersync服务加入到开启自启动
cat >>/etc/rc.local<<EOF
#sync data to 192.168.233.192
sersync -d -o /usr/local/sersync/conf/www_confxml.xml
sersync -d -o /usr/local/sersync/conf/bbs_confxml.xml
sersync -d -o /usr/local/sersync/conf/blog_confxml.xml
EOF
tail -4 /etc/rc.local
#sync data to 192.168.233.192
sersync -d -o /usr/local/sersync/conf/www_confxml.xml
sersync -d -o /usr/local/sersync/conf/bbs_confxml.xml
sersync -d -o /usr/local/sersync/conf/blog_confxml.xml
#查看实时监控进程,应该是三个sersync守护进程,
ps -ef |grep rsync
root 14464 1 0 22:02 ? 00:00:02 sersync -d -o /usr/local/sersync/conf/www_confxml.xml
root 14482 1 0 22:03 ? 00:00:02 sersync -d -o /usr/local/sersync/conf/bbs_confxml.xml
root 14500 1 0 22:03 ? 00:00:02 sersync -d -o /usr/local/sersync/conf/blog_confxml.xml
参数说明:
-r 开启实时监控之前对主服务器目录与远程目录目录进行一次整体同步,如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步.
-o 指定配置文件,如不指定sersync会使用sersync可执行文件目录下的默认配置文件confxml.xml.
-n 指定默认的线程池的线程总数,如不指定默认启动线程池数量是10个
-d 后台启动服务
-m 不进行同步,只运行插件,如:sersync -m command 则在监控到事件后,不对远程目录服务器进行同步,而是直接运行command插件
#后续配置文件改进更新。。。。。。。

centos6.6配置rsync+sersync实现实时同步分布式多客户端分发同步的更多相关文章

  1. Rsync+Sersync数据实时同步(双向)

    Rsync+Sersync数据实时同步(双向) 服务介绍 一.为什么要用rsync+sersync架构? 1.sersync是基于inotify开发的,类似于inotify-tools的工具 2.se ...

  2. 使用rsync在windows(服务端)与linux(客户端)之间同步

    说明: 1.cwRsyncServer服务端 系统:Windows7 IP地址:192.168.0.110 2.Rsync客户端 系统:CentOS 6.7 IP地址:192.168.0.141 实现 ...

  3. 使用rsync在linux(服务端)与windows(客户端)之间同步

    说明: 1.RsyncServer服务端 系统:CentOS 6.8 IP地址:192.168.247.141 2.Rsync客户端 系统:Windows10 实现目的: Rsync客户端同步服务端/ ...

  4. Rsync+sersync文件实时同步

    一.为什么要用Rsync+sersync架构1.sersync是基于Inotify开发的,类似于Inotify-tools的工具2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改 ...

  5. Rsync+sersync实现实时同步

    介绍: sersync主要用于服务器同步,web镜像等功能.基于boost1.43.0,inotify api,rsync command.开发.目前使用的比较多的同步解决方案是inotify-too ...

  6. rsync+sersync多线程实时同步

    一.sersync优点 1)使用c++编写,对linux系统文件产生的临时文件和重复文件操作会进行过滤,在结合rsync同步的时候,会减少运行时消耗的本地及网络资源,因此速度更快. 2)相比较inot ...

  7. centos 配置rsync+inotify数据实时同步2

    一.Rsync服务简介 1. 什么是Rsync 它是一个远程数据同步工具,它在同步文件的同时,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的“rsync算法”来使本地和远程两个主机 ...

  8. centos7配置rsync+inotify数据实时共享

    关于centos7版本上面搭建rsync服务并且实现实时同步之前一直是在6版本上面搭建rsync服务,在7版本上面折腾了半天.此处总结下inotify下载地址:http://github.com/do ...

  9. rsync + sersync 实现实时数据同步

    一.环境: 主机1:youzhuan-bak     centos 7.2 主机2:youzhuan-online   centos 7.2 二.部署过程: youzhuan-bak : [root@ ...

随机推荐

  1. NYOJ--42--dfs--一笔画问题

    /* Name: NYOJ--42--一笔画问题 Author: shen_渊 Date: 18/04/17 15:22 Description: 这个题用并查集做,更好.在练搜索,试试手 本来用的v ...

  2. .NET Exceptionless 日志收集框架本地环境搭建

    一.简介 Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等 ...

  3. HTTP 0.9 / 1.0 / 1.1

    以下内容是从互联网摘录的,还比较有意思,如果对它有兴趣,欢迎补充在评论里. HTTP是往返“浏览器”与“WEB Server”的协议,即:Hyper Text Transfer Protocol(超文 ...

  4. webpack的四个核心概念介绍

    前言 webpack 是一个当下最流行的前端资源的模块打包器.当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后 ...

  5. python编程基础—正则表达式

    正则表达式 正则表达式就是描述字符串排列的一套规则.利用正则表达式可以做很多事情,主要用于字符串的匹配 在实际项目中,我们经常需要找到某一类符合某种格式的信息,此时,我们可以观察这些数据的规律,然后将 ...

  6. IIS 发布 处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    IIS上部署MVC网站,打开后500错误:处理程序"ExtensionlessUrlHandler-Integrated-4.0"在其模块列表中有一个错误模块"Manag ...

  7. 学习设计模式之MVC、MVP、MVVM

    引言:认真学习了下广义MVC模式下前端怎么写,狭义的MVC其实是有一个变化过程:MVC MVP MVVM,网上看了很多的关于这方面的介绍,以前总是将视图数据逻辑写一个模块,最近尝试分开并用组件式的开发 ...

  8. bash启动时加载配置文件过程

    本文目录: 1.1 判断是否交互式.是否登录式 1.2 几种常见的bash启动方式 1.3 加载bash环境配置文件 当用户登录系统时,会加载各种bash配置文件,还会设置或清空一系列变量,有时还会执 ...

  9. 实现quartz定时器及quartz定时器原理介绍(转)

    一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(Job ...

  10. JS中的函数、BOM和DOM操作

     一.JS中的函数 [关于注释] /** [文档注释]:开头两个*.写在函数上方,在调用函数时可以看到文档上方的描述信息. */   // 单行注释 /* 多行注释 */ 1.函数的声明及调用 (1) ...