centos6.6配置rsync+sersync实现实时同步分布式多客户端分发同步

1、sersync项目:

sersync项目利用inotify与rsync技术实现对服务器数据实时同步到解决方案,其中inotify用于监控sersync所在服务器上文件系统的事件变化,rsync是目前广泛使用的本地及异地数据同步工具,其优点是只对变化的目录数据操作。

sersync项目的优点:

1)使用C++编写,对linux系统文件产生的临时文件和重复的文件操作会进行过滤,再结合rsync同步到时候,会减少网络资源,因此速度更快。

2)sersync配置起来很简单,在http://code.google.com/p/sersync/downloads/list处下载源码。其中bin目录下是已经编译好的二进制文件,配合bin目录下的xml文件直接使用即可。

3)使用多线程进行同步,尤其在同步较大文件时,能够保证多个服务器实时保持同步状态。

4)sersync自带出错处理机制,通过失败队列对出错的文件重新同步,如果扔失败,则每10个小时对同步失败的文件再重新同步。

5)sersync自带crontab功能,只需在xml配置文件中开启,即可按预先的配置,隔一段时间整理同步一次。

6)sersync自带socket与http的协议扩展,可以满足有特需要去掉公司二次开发。

inotify识别事件参考:

http://www.ibm.com/developerworks/cn/linux/1-inotifynew

http://blog.johntechinfo.com/?p=122

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安装,注意在编译安装后注意路径环境变量就可以了,其他都一样。

wget http://pkgs.repoforge.org/rsync/rsync-3.0.9-2.el6.rfx.x86_64.rpm

#检查安装

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 [email protected]::data /data/

tree data/

./

├── bbs

├── blog

└── www

3、安装sersync服务

wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/sersync/sersync2.5.4_64bit_binary_stable_final.tar.gz

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 [email protected]::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"/>

<sendurl base="http://pic.xoyo.com/cms"/>

<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>

</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 ./ [email protected]::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插件

#后续配置文件改进更新。。。。。。。

时间: 2024-10-07 06:26:22

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

实战:配置rsync+inotify实现实时同步备份

实战:配置rsync+inotify实现实时同步 Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取.删除.移动等.利用这一机制,可以非常方便地实现文件异动告警.增量备份,并针对目录或文件的变化及时作出响应. 使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步),只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静态等侍状态,这样一来,就避免了按固定周期备份进存在的延迟性.周期过密等问题. inotify

Centos6安装配置rsync+inotify实时单向同步

实验环境: Server : 192.168.9.109  rsync+inotify WEB1:192.168.9.106   rsync server WEB2:192.168.9.104   rsync server Server为分发机,有内容更新则推送rsync server 注:也可以WEB到Server拉取数据 (1)Server下载安装rsync+inotify 下载安装rsync #wget https://download.samba.org/pub/rsync/rsync-

(转)Rsync+sersync实现实时同步

介绍: sersync主要用于服务器同步,web镜像等功能.基于boost1.43.0,inotify api,rsync command.开发.目前使用的比较多的同步解决方案是inotify-tools+rsync ,另外一个是google开源项目Openduckbill(依赖于inotify- tools),这两个都是基于脚本语言编写的.相比较上面两个项目,本项目优点是: sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤,所以在结合rsync

在CentOS7上配置rsync源服务器+inotify实时同步

概述 rsync是一个开源的快速备份工具,可以再不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,再传输前执行压缩,因此非常适用于异地备份.镜像服务器等应用. 原理 再远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源.再同步过程中,同步源负责提供文档的原始位置,而发起端对该位置具有读取权限,如图所示: 配置rsync源服务器 1.检查rsync是否安装 [[email protected]

centos 7 编译安装以及配置rsync+inotify 文件实时同步操作记录

准备工作: 服务器A 源文件服务器 服务器B 数据备份服务器 注意:服务器A修改文件 实时同步到 服务器B, 服务器A和B都需要安装rsync,并且服务器A还需要安装inotify 一. 安装rsync  .inotify 看一下你服务器有没有安装这两款软件  rpm -aq|grep rsync     rpm -aq|grep inotify 我们采用编译安装的方式,够学习到更多 下载  rsync-3.0.9.tar.gz 和inotify-tooles-3.14.tar.gz的压缩包,我

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

说明: 1.RsyncServer服务端 系统:CentOS 6.8 IP地址:192.168.247.141 2.Rsync客户端 系统:Windows10 实现目的: Rsync客户端同步服务端/data/test下的文件到E/test下 一 .在linux上安装rsync 1.#rpm -qa|grep rsync yum install rsync -y 2.vim /etc/rsyncd.conf uid=root gid=root max connections=10 log fil

第三十四天-rsync+inotify实现实时同步案例

推荐: Rsync结合Inotify 实时同步配置 rsync+inotify实现实时同步案例 rsync+inotify实现多台服务器之间数据实时同步 Linux下Rsync+Inotify-tools实现数据实时同步

rsync+sersync实现数据时时备份

CentOS6.6中rsync+sersync实现数据实时备份 注意:rsync的daemon模式已提前配置好了,只需要配置sersync即可 . 一.基本环境 系统版本 主机名 IP地址 角色 备份/监控目录 CentOS 6.6 backup 10.0.0.10 rsync服务端 /backup CentOS 6.6 nfs-server 10.0.0.7 rsync客户端 /data 二.sersync安装配置 查看系统是否支持inotify,显示以下三个文件表示支持 [[email pr

centos7服务搭建常用服务配置之二:Rsync+sersync实现数据实时同步

目录 1.RSYNC数据备份 1.1 rsync服务简介 1.2 rsync特点和优势 1.3 rysnc运行模式简介 1.4 数据同步方式 2 Rsync实验测试 2.1 实验环境说明 2.2 服务安装 2.3 Rsync命令详解 2.3 实验一使用rsync命令备份数据 2.4 实验二使用rsyncd服务进行数据备份 3.Rsync+sersync实现数据实时同步 3.1 rsync+sersync架构作用 3.2 rsync+inotify-tools与rsync+sersync架构的区别