sersync+rsync实时同步数据

        rsync是linux系统中的数据镜像备份工具。支持本地复制,或者与其他SSH、rsync主机同步。rsync使用所谓的"Rsync算法"进行数据同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

        Sersync是一个利用InotifyRsync技术实现对服务器数据实时复制的解决方案。

Sersync特性

  • 使用C++编写,支持对监控事件的过滤功能。
  • 采用XML配置文件,然后由守护进程启动,配置起来比Inotify-tools更简单。
  • 使用多线程进行复制,即可以并发复制多个不同文件。
  • Sersync自带出错处理机制,通过失败队列对出错的文件重新进行复制。
  • Sersync自带crontab功能,可实现对失败队列中的文件定时整体复制。
  • Sersync自带socket与HTTP的协议扩展,可以满足有特殊需求的公司二次开发。

1 rsync部署

1.1 安装rsync

yum install rsync -y 

1.2 rsync配置

Rsync默认使用873端口,需关闭防火墙后开通防火墙策略。

vi /etc/rsyncd.conf
# uid,gid表示rsync这个服务是以那个用户的身份去运行
uid = root
gid = root

use chroot = no
# 示指定最大并发连接数,0表示不限制
max connections = 0
# 忽略守护进程上的I/O错误
ignore errors
pid file = /root/rsyncd/rsyncd.pid
log file = /root/rsyncd/rsyncd.log
lock file = /root/rsyncd/rsyncd.lock
# 是否使用名称解析(控制守护进程是否对客户端IP地址执行反向查找以确定其主机名)
reverse lookup = no
# 指定允许的主机或网段内的主机来访问rsync服务器
hosts allow = *
# 共享的目录名称
[data]
# 共享的路径
path = /data/
# 描述
comment = data
read only = false
# 自定义认证用户,不是系统用户
auth users = rsync_user
# 设置进行连接认证的密匙文件
secrets file = /etc/rsync.pass

1.3 创建data共享目录

此文件夹为1.2章节中rsync配置的data目录,如存在则无需创建。

mkdir /data

1.4 创建密码文件

1.4.1 服务端

#  rsync_user 是 1.2 配置文件中的 auth users,密码可以任意内容。
echo 'rsync_user:123456' > /etc/rsync.pass
# 必须设置600权限
chmod 600 /etc/rsync.pass

1.4.2 客户端

# 客户端与服务端创建密码文件格式不同,用于上传或下载文件时做认证用途
echo '123456' > /etc/rsync-password.pass
# 必须设置600权限
chmod 600 /etc/rsync-password.pass

1.5 启动rsync

#启动
rsync –daemon

#停止,任意一种方式都可以
killall rsync
或
pkill rsync

1.6 文件上传下载

主要测试rsync命令是否正常使用

客户端上传文件:rsync -avz [本地路径] [远程路径] [参数]
# --password-file=/etc/rsync.pass 是本地保存的密码文件
rsync -avz /data/ rsync_user@192.168.0.2::data --password-file=/etc/rsync.pass

服务端下载文件:rsync -avz [远程路径] [本地路径] [参数]
rsync -avz rsync_user@192.168.0.1::data/data/ --password-file=/etc/rsync.pass

2 sersync部署

2.1 sersync下载

# 通过wget下载或者上传到系统中
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

2.2 创建sersync目录

mkdir /usr/local/sersync/
mkdir /usr/local/sersync/bin
mkdir /usr/local/sersync/conf
mkdir /usr/local/sersync/logs

2.3 移动sersync解压后的文件

mv GNU-Linux-x86/sersync2 /usr/local/sersync/bin/sersync2
mv GNU-Linux-x86/confxml.xml /usr/local/sersync/conf/confxml.xml

2.4 配置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>
    </filter>
    <inotify>
	<delete start="true"/>
	<createFolder start="true"/>
	<createFile start="false"/>
	<closeWrite start="true"/>
	<moveFrom start="true"/>
	<moveTo start="true"/>
	<attrib start="false"/>
	<modify start="false"/>
    </inotify>

    <sersync>
    <!-- localpath配置 /data 为1.2章节rsync中配置的共享目录名称  -->
	<localpath watch="/data">
        <!-- remote 配置远端IP,以及远端的接收目录 -->
	    <remote ip="192.168.0.2" name="data"/>
	</localpath>
	<rsync>
	    <commonParams params="-artuz"/>
        <!-- auth 认证ne配置 users为远端rsync的认证用户,passwordfile为本地创建的认证密码文件 -->
	    <auth start="true" users="rsync_user" passwordfile="/root/rsyncd/rsync-password.pass"/>
	    <userDefinedPort start="false" port="873"/><!-- port=874 -->
	    <timeout start="false" time="100"/><!-- timeout=100 -->
	    <ssh start="false"/>
	</rsync>
    <!-- 失败日志保存位置,默认60分钟进行重试 -->
	<failLog path="/root/rsyncd/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
    <!-- 定时同步配置,默认600分钟 -->
	<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>

2.5 启动sersync

/usr/local/sersync/bin/sersync2 -d -r -o /usr/local/sersync/conf/confxml.xml
# 参数注解:
# -d:启用守护进程模式
# -r:在监控前,将监控目录与远程主机用rsync命令推送一遍
# -o:指定配置文件,默认使用confxml.xml文件

2.6 停止sersync

Killall sersync2
或
pkill sersync2

3 多目录同步

3.1 rsync配置

多目录同步时首先需要在rsyncd.conf配置中创建多个共享目录,配置如下:

… …
[data1]
# 共享的路径
path = /data1/
# 描述
comment = data1
read only = false
# 自定义认证用户,不是系统用户
auth users = rsync_user
# 设置进行连接认证的密匙文件
secrets file = /etc/rsync.pass

[data2]
# 共享的路径
path = /data2/
# 描述
comment = data2
read only = false
# 自定义认证用户,不是系统用户
auth users = rsync_user
# 设置进行连接认证的密匙文件
secrets file = /etc/rsync.pass

3.2 sersync配置

创建多个sersync的confxml配置,多个confxml不能重名,例如:confxml_one.xml、confxml_two.xml,并修改配置文件中相应的配置指向不通的目录

最后启动多个sersync程序,并分别指定配置文件即可。

/usr/local/sersync/bin/sersync2 -d -r -o /usr/local/sersync/conf/confxml_one.xml
/usr/local/sersync/bin/sersync2 -d -r -o /usr/local/sersync/conf/confxml_two.xml

4 双向同步

如果需要服务器之间双向同步,则在两台服务器中同时部署配置sersyncrsync即可。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂奔的橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值