mysql分层数据同步_MySQL的多层数据同步方法与流程

本发明涉及数据库读写领域,具体涉及一种MySQL(关系型数据库管理系统)的多层数据同步方法。

背景技术:

由于IPTV(交互式网络电视)及OTT业务(Over The Top,通过互联网向用户提供各种应用服务)的迅猛发展,致使EPG(Electronic Program Guide,电子节目导航)需大规模分布式部署,这样就会出现中心节点EPG和边缘节点EPG。中心节点EPG需要接收CMS(Content Management System,内容管理系统)发送的数据、并将数据写入数据库,中心节点EPG的数据库和边缘节点EPG的数据库需要共享数据;因为中心节点EPG和边缘节点EPG没有接口传输数据,所以需要对中心节点EPG和边缘节点EPG的数据库进行数据同步。

为应对IPTV及OTT业务的快速发展及增强用户体验的及时性,边缘节点EPG可能达到几十甚至几百个,每个边缘节点EPG可能又有多台EPG(节点EPG为集群式布置,例如深圳市为边缘节点EPG,深圳市内会有多台隶属于边缘节点EPG的其他EPG)。由此可知,所有边缘节点EPG同步中心节点EPG的数据时,数据量较大,为了减轻中心节点EPG的数据同步压力,需要在中心节点EPG和边缘节点EPG之间增加1层缓存节点,即中心节点EPG、边缘节点EPG、缓存节点均需要进行数据同步,以下简称三层同步。

EPG系统用的数据库基本为MySQL,通过MySQL自身的机制进行数据同步。而MySQL同步较多的都是两层数据同步,MySQL一般通过1台主用服务器和1台备用服务器承载。

但是,通过MySQL进行三层同步时,会存在以下缺陷:

当MySQL的主用服务器故障时,需要切换至备用服务器进行数据同步,由于MySQL的主用服务器和备用服务器各采用1个数据缓存目录,因此会发生主用服务器故障,备用服务器无法通过同步目录得知同步进度,进而导致同步偏移量发生变化。由此可知,若第二层(缓存节点)的主用服务器发生故障,则有可能导致第三层(边缘节点EPG)的数据同步错误(即下级同步异常),进而使得EPG发生错误。

技术实现要素:

针对现有技术中存在的缺陷,本发明解决的技术问题为:如何在MySQL进行多层数据同步时,避免同步偏移量发生变化,保证数据同步精度。

为达到以上目的,本发明提供MySQL的多层数据同步方法,该方法将最下层的数据同步节点定义为读取数据节点,将最下层以外的其余层的数据同步节点均定义为数据写入节点;将每个读取数据节点的主用数据同步服务器称为DB1,将每个读取数据节点的备用数据同步服务器称为DB2,将每个读取数据节点的正在使用的数据同步服务器称为DB主;该方法包括以下步骤:

S1:为每个数据写入节点搭建ceph,转到S2;

S2:在每个数据写入节点的DB1和DB2上,各创建1份数据写入目录,将DB1和DB2的数据写入目录均挂载至所属数据写入节点的ceph上,转到S3;

S3:在每个数据写入节点的DB1和DB2的数据写入目录下,各安装1套MySQL,转到S4;

S4:第一层的数据写入节点接收数据后,将数据写入DB主中,其余层的数据同步节点的DB主顺次同步数据;顺次同步数据的方式为:下层数据同步节点的DB主,同步上层数据同步节点的DB主中的数据;读取数据节点的数据同步服务器,同步上层数据写入节点的DB主中的数据;

在S3之后,还包括以下步骤:

S3a:检测每个数据写入节点的DB1和/或DB2的运行状态,将运行状态为正在使用的DB作为DB主,启动DB主的MySQL进程;当检测到DB主的MySQL进程的运行状态为停止运行时,将另一台DB的运行状态修改为正在使用。

在上述技术方案的基础上,所述最下层的数据同步节点为第三层的边缘节点EPG;所述其余层的数据同步节点包括第一层的中心节点EPG、以及第二层的缓存节点。

在上述技术方案的基础上,S4的流程包括:CMS将数据传输至中心节点EPG;中心节点EPG将数据写入DB主中,缓存节点的DB主同步中心节点EPG的DB主中的数据,边缘节点EPG的数据同步服务器同步缓存节点的DB主中的数据。

在上述技术方案的基础上,S4之后还包括以下步骤:客户端请求获取边缘节点EPG的数据时,边缘节点EPG将数据同步服务器中的数据返回至客户端。

在上述技术方案的基础上,S3a中所述数据写入节点的DB1和/或DB2的运行状态的检测方法为:在数据写入节点的DB1和DB2上各安装一套keepalived,通过keepalived的notify功能检测DB1和/或DB2的运行状态。

在上述技术方案的基础上,S3a中所述MySQL进程的检测方法为:在keepalived上增加监控script“check_mysql.sh”,通过script“check_mysql.sh”检测MySQL进程的运行状态。

在上述技术方案的基础上,S3a中所述将运行状态为正在使用的DB作为DB主之后,还包括以下步骤:将VIP与DB主关联。

在上述技术方案的基础上,S1的流程包括:为每个数据写入节点选择至少1台服务器搭建ceph。

在上述技术方案的基础上,所述搭建ceph的服务器为3台:1台主用服务器、1台备用服务器、以及1台数据扩容服务器。

与现有技术相比,本发明的优点在于:

参见本发明S1至S4可知,本发明将每个数据写入节点的DB1和DB2的数据写入目录,均挂载至该数据写入节点的ceph上,进而使得DB1和DB2的数据写入目录实现共享。在此基础上,下层的数据写入节点同步上层数据时,即使上层数据写入节点的DB1发生故障需要切换至DB2,DB2也能通过ceph读取DB1的数据写入目录,进而知晓DB1的同步进度,以此避免同步偏移量发生变化,保证数据同步精度。

附图说明

图1为本发明实施例中MySQL的多层数据同步方法的流程图。

具体实施方式

以下结合附图及实施例对本发明作进一步详细说明。

首先将最下层的数据同步节点定义为读取数据节点,本实施例中为第三层的边缘节点EPG;将最下层以外的其余层的数据同步节点均定义为数据写入节点,本实施例中为第一层的中心节点EPG、以及第二层的缓存节点。将每个读取数据节点的主用数据同步服务器称为DB1,将每个读取数据节点的备用数据同步服务器称为DB2,将每个读取数据节点的正在使用的数据同步服务器称为DB主。

在此基础上,参见图1所示,本发明实施例中的MySQL的多层数据同步方法,包括以下步骤:

S1:为每个数据写入节点搭建ceph(分布式文件系统),具体流程为:在每个数据写入节点的机房内,选择至少1台服务器搭建ceph,本实施例中选择3台服务器搭建ceph,其中1台为主用,1台为备用,1台作数据扩容使用,转到S2。

S2:在每个数据写入节点的DB1和DB2上,各创建1份数据写入目录(/mnt/data/mysql),将DB1和DB2的数据写入目录均挂载至所属数据写入节点的ceph上,转到S3。

S3:在每个数据写入节点的DB1和DB2的数据写入目录下,各安装1套MySQL,转到S4。

S4:第一层(即最上层)的数据写入节点接收数据后,将数据写入DB主中,其余层的数据同步节点的DB主顺次同步数据;顺次同步数据的方式为:下层数据写入节点的DB主,同步上层数据写入节点的DB主中的数据;读取数据节点的数据同步服务器,同步上层数据写入节点的DB主中的数据。

本实施例中S4的具体流程为:CMS将数据传输至中心节点EPG;中心节点EPG将数据写入DB主中,缓存节点的DB主自动同步中心节点EPG的DB主中的数据,边缘节点EPG的数据同步服务器自动同步缓存节点的DB主中的数据,转到S5。

S5:客户端(具体为STB,Set Top Box,数字视频变换盒)请求获取边缘节点EPG的数据时,边缘节点EPG将数据同步服务器中的数据返回至客户端,供客户端进行展示。

参见S1至S4可知,本发明将每个数据写入节点的DB1和DB2的数据写入目录,均挂载至该数据写入节点的ceph上,进而使得DB1和DB2的数据写入目录实现共享。在此基础上,下层的数据写入节点同步上层数据时,即使上层数据写入节点的DB1发生故障需要切换至DB2,DB2也能通过ceph读取DB1的数据写入目录,进而知晓DB1的同步进度,以此避免同步偏移量发生变化,保证数据同步精度。此外,由于最下层的读取数据节点不需要被其他节点所同步,因此读取数据节点不需要搭建ceph。

在S3(即执行S4至S5的过程中)之后,还包括以下步骤:

S3a:检测每个数据写入节点的DB1和/或DB2的运行状态:

DB1或DB2的运行状态为正在使用时,将运行状态为正在使用的DB作为DB主(首次运行时一般将DB1作为DB主),将VIP(Virtual IP Address,虚拟IP地址)与DB主关联,启动DB主的MySQL进程。当检测到DB主的MySQL进程的运行状态为停止运行时(即当前DB发生故障,将当前DB的运行状态修改为未在使用),将另一台DB(当前DB为DB1,则另一台DB为DB2,当前DB为DB2,则另一台DB为DB1)的运行状态修改为正在使用。

DB1或DB2的运行状态为未在使用时,关闭运行状态为未在使用的DB的MySQL进程。

本实施例S3a中数据写入节点的DB1和/或DB2的运行状态的检测方法为:在数据写入节点的DB1和DB2上各安装一套keepalived(用于检测服务器的状态,若一台服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器),通过keepalived的notify功能(增加脚本“notify.sh”)检测DB1和/或DB2的运行状态。

本实施例S3a中MySQL进程的检测方法为:在keepalived上增加监控script“check_mysql.sh”,通过script“check_mysql.sh”检测MySQL进程的运行状态。

进一步,本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值