zoukankan      html  css  js  c++  java
  • 数据文件实时同步(rsync + sersync2)

    因近期项目需求,需要同步云端服务器的数据给**方做大数据分析.

    思路:

    起初只要数据同步,准备开放数据采集接口.但实时性较差,会有延迟。

    故而寻觅各种解决方案,最终确定使用 rsync 进行文件同步,otter(阿里的开源工具) 进行数据库同步

    最终使用成功,同步效果显著!

    本文先只介绍 rsync 的文件同步,otter 会在其他文章分享

    一、简介

    网上简介一堆,不过都写的很官方,下面的介绍是我自己使用后的感受。

    sersync 用于监控目录后调用 rsync 同步命令,进行文件传输! 可以监控目标目录文件的 增、删、改

    rsync 镜像备份工具,可以快速实现文件同步,文件同步的核心! 支持本地复制,或者与其他SSH、rsync主机同步。

    环境说明:

    系统环境:centos7

    数据库版本:mysql 5.7

    目的:将源服务器文件、数据实时同步到备份服务器

    安装策略

    1、目标服务器安装 rsync 服务,设置传输项目名、用户名、密码、端口
    2、源服务器安装 rsync ,测试传输命令
    3、源服务器安装 sersync ,配置监控目录
    

    源服务器无需配置,只需写入一个密码文件,用于 rsync 命令的执行使用

    目标服务器配置如下:

    # 端口 
    port=873
       
    # 安全防护					
    use chroot = yes
    
    # 最大并发数
    max connections = 36000 
    
    # rsync 的守护进程将其 PID 写入指定的文件。
    pid file=/var/run/rsyncd.pid 
    
    # 指定支持 max connections 参数的锁文件。
    lock file=/var/run/rsync.lock 
    
    # 指定 rsync 守护进程的日志文件,而不将日志发送给 syslog。
    log file=/var/log/rsyncd.log 
    
    # 任务名称
    [taskName] 
    
    # 存储路径 (需要手动创建,无目录会报错) 
    path=/data/Vehicle/image/ 
    
    # 指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。
    read only=false 
    
    # 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。
    list=yes 
    
    # 用户名
    auth users= 用户名 
    
    # 密码文件
    secrets file=/etc/rsync.passwd 
    
    # 用一个主机列表指定哪些主机客户允许连接该模块。不匹配主机列表的主机将被拒绝
    hosts allow=*
    	
    

    关于密码文件

    如 /etc/rsync.passwd

    源服务器:

    密码
    

    目标服务器:

    用户名:密码
    

    密码文件的执行权限必须为 600,不然服务无法启动

    修改权限命令:

    chmod 600 /etc/rsync.passwd  
    

    rsync 传输命令

    安装好上述服务,并开启目标服务器的 rsync 服务后,就可以测试文件的同步了

    rsync同步命令如下:

    rsync -avzP --delete 传输目录 用户名@目标服务器ip::任务名称 --password-file = 密码文件地址
    

    -v 显示指令执行过程

    -z 对备份的文件在传输时进行压缩处理

    -P 保留源文件或目录的属性。

    --delete 删除传送端已经不存在,而目的端存在的档案

    上述测试成功后,就可以正常的传输目录到目标服务器了,接下来只需安装 sersync2 服务来监控想要传输的目录变化,就可以实现实时同步

    关于下载,没有官网,我是在CSDN上找的,各位加油吧

    配置文件如下:

    	<?xml version="1.0" encoding="ISO-8859-1"?> 
    	<head version="2.5"> # 设置本地IP和端口 
    		<host hostip="localhost" port="8008"></host> 
    		# 开启DUBUG模式 
    		<debug start="true"/> 
    		# 开启xfs文件系统 
    		<fileSystem xfs="true"/> 
    			# 同步时忽略推送的文件(正则表达式),默认关闭 
    			<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="true"/> 
    			<closeWrite start="true"/> 
    			<moveFrom start="true"/> 
    			<moveTo start="true"/> 
    			<attrib start="true"/> 
    			<modify start="true"/> 
    		</inotify> 
    		<sersync> 
    		# 本地同步的目录路径 
    		<localpath watch="监控目录地址"> 
    			# 远程IP和rsync模块名 
    			<remote ip="目标服务器ip" name="任务名称"/> 
    		</localpath> 
    		<rsync> 
    			# rsync指令参数 
    			<commonParams params="-auvzP"/> 
    			# rsync同步认证 
    			<auth start="true" users="用户名" passwordfile="密码文件路径"/> 
    			# 设置rsync远程服务端口,远程非默认端口则需打开自定义 
    			<userDefinedPort start="true" port="目标rsync服务端口"/>
    			# 设置超时时间 
    			<timeout start="true" time="1000"/> 
    			# 设置rsync+ssh加密传输模式,默认关闭,开启需设置SSH加密证书 
    			<ssh start="false"/> 
    		</rsync> 
    		# sersync传输失败日志脚本路径,每隔60会重新执行该脚本,执行完毕会自动清空。 
    		<failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/>
    		# 设置rsync+crontab定时传输,默认关闭 
    		<crontab start="false" schedule="600">
    		<crontabfilter start="false"> 
    		<exclude expression="*.php"></exclude> 
    		<exclude expression="info/*"></exclude> 
    		</crontabfilter> 
    		</crontab> 
    		# 设置sersync传输后调用name指定的插件脚本,默认关闭 
    		<plugin start="false" name="command"/> 
    		</sersync> # 插件脚本范例 
    		<plugin name="command"> 
    			<param prefix="/bin/sh" suffix="" ignoreError="true"/>  
    			<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="xxx"/> 
    				<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>
    

    sersync 启动命令

    进入 sersync安装目录
    ./sersync -d -r -o confxml.xml
    

    本文没有详细介绍下载安装过程,主要用于介绍配置参数!方便日后回忆.

    见谅!

  • 相关阅读:
    团队介绍与选题报告
    实验6:开源控制器实践——RYU
    二叉搜索树的2层结点统计 (25 分)
    2020团队程学设计天梯赛-总决赛
    口罩发放 (25 分)
    九宫格输入法
    检查密码
    暑期训练10-1010
    暑期训练09-1003
    数据结构之循环队列
  • 原文地址:https://www.cnblogs.com/xuzhengyao/p/9810034.html
Copyright © 2011-2022 走看看