掌桥专利:专业的专利平台
掌桥专利
首页

一种基于分布式数据库的安全停止方法及系统

文献发布时间:2024-04-18 20:02:18


一种基于分布式数据库的安全停止方法及系统

技术领域

本发明涉及分布式数据库技术领域,尤其涉及一种基于分布式数据库的安全停止方法及系统。

背景技术

随着业务的开展,产生的数据量会变得非常庞大,当单机难以支撑时,会面临扩展瓶颈,那么就需要将数据进行拆分,分散在多个数据库节点上。与集中式数据库不同,在分布式数据库集群中,想要关闭整个集群的所有节点,则需要将关闭命令下发到各个节点上,逐个节点进行关闭,在这个过程中,可能存在某些节点存在未完成的事务,或者在某个节点上开启了新的事务,直接执行kill-9强制关闭将导致某个节点执行的事务产生异常,从而产生脏数据,甚至导致整个服务产生异常,无法启动。

如申请公开号为CN113010348A的中国专利公开了一种用于容灾中数据恢复的装置、系统和方法;用于容灾中数据恢复的装置包括:第一备份数据库,其存储有来自生产数据库的第一备份数据;以及第二备份数据库,其存储有来自生产数据库的第二备份数据;其中,在生产数据库停止工作的情况下,第一备份数据被用于继续工作,以及第二备份数据被用于补充第一备份数据。用于容灾中数据恢复的方法包括:在第一备份数据库中存储来自生产数据库的第一备份数据;在第二备份数据库中存储来自生产数据库的第二备份数据;在生产数据库停止工作的情况下,基于第一备份数据继续工作,以及使用第二备份数据补充第一备份数据

以上现有技术存在原生分布式数据库系统,在关闭整个集群时,是直接将命令下发到每一个数据库节点,直接关闭程序;当服务正在执行事务时,可能导致部分节点成功,部分节点失败的情况,且此时在没有恢复机制的情况下,未完成的事务会被直接遗弃,造成数据异常,这可能造成很严重的后果。为了解决这些问题,本发明提供了一种基于分布式数据库的安全停止方法及系统。

发明内容

本发明所要解决的技术问题是针对现有技术的不足,提供了一种基于分布式数据库的安全停止方法,该方法通过安全停止模式和超时预警机制不仅实现了分布式数据库的快速安全停止,而且保证了分布式数据库中数据的一致性。

为实现上述目的,本发明提供如下技术方案:

一种基于分布式数据库的安全停止方法,包括以下步骤:

S1:设置一个监控设备,当数据库发生异常或接收到外部关闭指令时,监控设备实时捕获安全关闭指令,并对指令执行验证和授权操作,当授权通过后向分布式数据库主节点发送安全停止任务请求;

S2:当分布式数据库主节点成功接收,并解析安全停止任务请求后,数据库进入到安全停止模式;否则接收安全停止任务请求失败,结束任务请求;

S3:进入安全停止模式后,根据主节点向各子节点发送的安全停止任务请求,首先执行停止所有定时任务的命令,停止所有定时任务;然后,执行安全停止任务,并检测各子节点是否满足安全停止条件,若满足则结束数据库进程,如不满足则返回继续执行安全停止任务,并设置超时预警机制,停止超时执行的事务,同时使该事务不失效;

S4:当所有子节点的连接事务都已成功完成时,子节点将执行结果发送给主节点;主节点根据反馈,执行结束数据库进程的指令,并通知各子节点进行资源释放,使整个分布式数据库系统进入安全停止状态。

进一步地,监控设备通过订阅数据库系统的关闭信号或通过专门的API接口接收关闭指令。

进一步地,定时任务包括心跳检测、定时备份。

进一步地,S3安全停止任务具体如下:

S4.1:当用户通过客户端向分布式数据库节点发出SQL请求,建立新的前端连接时,通过鉴权机制拒绝新的前端连接,并返回数据库已停止,阻止新的事务产生;

上述鉴权机制通过用户身份验证来实现,当进入安全停止模式后,通过拒绝新用户的身份验证请求实现新的前端连接的建立,已建立前端连接用户则可以通过身份验证请求;

S4.2:当用户通过现有的前端连接向数据库节点发送新的SQL请求时,则通过过滤机制来判断新的SQL请求是否处于事务中;

所述过滤机制通过参数isAutocommit执行,当isAutocommit参数为True时,则新的SQL请求处于事务中,请求被允许执行,直至事务执行完成;当isAutocommit参数为false时,则新的SQL请求处于非事务中,请求被拒绝执行,并提供优雅的关闭通知。

进一步地,S3中检测是否满足安全停止条件的具体步骤为:

S5.1:执行完一次安全停止任务后,各子节点每隔一段时间执行一次异步扫描操作,并统计出各子节点仍存在的前端连接事务数总和;

S5.2:若所述前端连接事务数总和为0时,则进入到后端事务统计阶段,统计所有后端连接事务数总和;否则返回等待;若所述后端连接事务数总和也为0,则满足安全停止条件,否则返回等待。

进一步地,超时预警机制具体为:

S6.1:当各子节点在执行安全停止任务超过超时阈值,且任一子节点下仍有未执行完成的事务时,则执行回滚操作来停止该事务,并将该事务标记物未完成事务,且将该标记记录在回滚段中;当重启数据库时,通过SQL指令检查回滚段中的事务状态,并重新执行该未完成事务;

S6.2:当该事务为本地事务时,则利用该子节点下数据库本身提供的回滚机制来执行回滚操作,实现事务的回滚;

S6.3:当该事务为分布式事务时,则通过分布式事务管理器Seata来协调各子节点,并向分布式事务未完成事务执行的子节点的资源管理器发送回滚指令,资源管理器通过调用未完成事务执行的子节点下的数据库XA接口,来执行回滚操作,实现事务的回滚。

进一步地,S5.1中一段时间为5秒钟。

进一步地,超时预警机制设置的超时阈值为30秒。

一种基于分布式数据库的安全停止系统包括监控模块、安全停止模块、安全停止检测模块、超时预警模块和资源释放模块;

监控模块,用于实时捕获安全关闭指令,并向数据库下级子节点发送安全停止任务请求;

安全停止模块,用于对数据库各子节点执行安全停止任务;

安全停止检测模块,用于检测数据库各子节点是否满足安全停止条件;

超时预警模块,用于对安全停止模式中,执行时间超过超时阈值的事务进行捕捉和合理的停止;

资源释放模块,用于数据库资源释放,完成安全停止。

进一步地,安全停止检测模块包括前端连接检测子单元和后端连接检测子单元;

前端连接检测子单元,用于统计各子节点下所有前端连接事务是否全部完成执行,并满足安全停止条件;

后端连接检测子单元,用于统计各子节点下所有后端连接事务是否全部完成执行,并满足安全停止条件。

一种存储介质,存储介质中存储有指令,当计算机读取指令时,使计算机执行如上述任一项所述一种基于分布式数据库的安全停止方法。

一种电子设备,包括处理器和上述的存储介质,所述处理器执行所述存储介质中的指令

与现有技术相比,本发明的有益效果是:

1.本发明在原有的强制停止命令基础上进行安全停止方法改造,在满足原有功能完善、请求方式不变、性能损耗细微的基础上,实现了已经触发的事务的执行完成和数据完整;

2.本发明通过在数据库中构造安全停止模式,实现了现有事务连接不失效,非事务连接返回优雅服务停止提示,保证了数据库停止后数据的一致性;

3.本发明通过在安全停止模式中引入超时预警模式,既保证了长时间事务的快速停止,又保证了该事务的不失效,提高了该方法的效率性和实用性。

附图说明

通过阅读参照以下附图所作的对非限制性实施例的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为本发明实施例1一种基于分布式数据库的安全停止方法流程示意图;

图2为本发明实施例1检测安全停止条件逻辑结构图;

图3为本发明实施例2基于天翼云分布式数据库udal的方法验证结构图;

图4为本发明实施例3一种基于分布式数据库的安全停止系统模块图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。

实施例1:

目前,分布式数据库的停止方法有很多,大体包括两阶段关闭、分阶段停机和分片关闭等方式,但这些方法大多存在上述背景中的问题,例如分片关闭方法,可能导致一些分片数据库已关闭而另一些分片数据库仍在运行,引发数据不一致性问题,当强制关闭仍在运行的数据库又可能造成数据丢失问题。

为了解决上述问题,本发明提供了一个实施例:一种基于分布式数据库的安全停止方法,请参阅图1,具体步骤包括:

S1:设置一个监控设备,当数据库发生异常或接收到外部关闭指令时,监控设备实时捕获安全关闭指令,并对指令执行验证和授权操作,当授权通过后向分布式数据库主节点发送安全停止任务请求;

S2:当分布式数据库主节点成功接收,并解析安全停止任务请求后,数据库进入到安全停止模式;否则接收任务请求失败,结束任务请求;

S3:进入安全停止模式后,根据主节点向各子节点发送的安全停止任务请求,首先执行停止所有定时任务的命令,停止所有定时任务;然后,执行安全停止任务,并检测各子节点是否满足安全停止条件,若满足则结束数据库进程,如不满足则返回继续执行安全停止任务,并设置超时预警机制,停止超时执行的事务,同时使该事务不失效;

S4:当所有子节点的连接事务都已成功完成时,子节点将执行结果发送给主节点;主节点根据反馈执行结束数据库进程的SQL指令,并通知各子节点进行资源释放,使整个分布式数据库系统进入安全停止状态。

具体地,监控设备通过订阅数据库系统的关闭信号或通过专门的API接口接收关闭指令。

具体地,S3安全停止任务具体如下:

S4.1:当用户通过客户端向分布式数据库节点发出SQL请求,建立新的前端连接时,通过鉴权机制拒绝新的前端连接,并返回数据库已停止,阻止新的事务产生;

上述鉴权机制通过用户身份验证来实现,当进入安全停止模式后,通过拒绝新用户的身份验证请求实现新的前端连接的建立,已建立前端连接用户则可以通过身份验证请求;

S4.2:当用户通过现有的前端连接向数据库节点发送新的SQL请求时,则通过过滤机制来判断新的SQL请求是否处于事务中;

所述过滤机制通过参数isAutocommit执行,当isAutocommit参数为True时,则新的SQL请求处于事务中,请求被允许执行,直至事务执行完成;当isAutocommit参数为false时,则新的SQL请求处于非事务中,请求被拒绝执行,并提供优雅的关闭通知。

具体地,请参阅图2,S3中检测是否满足安全停止条件的具体步骤为:

S5.1:执行完一次安全停止任务后,各子节点隔一段时间执行一次异步扫描操作,并统计出各子节点仍存在的前端连接事务数总和;

S5.2:若前端连接事务数总和为0时,则进入到后端事务统计阶段,统计出各子节点仍存在的后端连接事务数总和;否则返回等待,并重复执行所述S5.1;若后端事务数总和也为0,则满足安全停止条件,否则返回等待:

具体地,超时预警机制具体为:

S6.1:当所述各子节点在执行安全停止任务超过超时阈值,且任一子节点下仍有未执行完成的事务时,则执行回滚操作来停止该事务,并将该事务标记物未完成事务,且将该标记记录在回滚段中;当重启数据库时,通过SQL指令检查回滚段中的事务状态,并重新执行该未完成事务;

S6.2:当所述该事务为本地事务时,则利用该子节点下数据库本身提供的回滚机制来执行回滚操作,实现事务的回滚。

S6.3:当所述该事务为分布式事务时,则通过分布式事务管理器Seata来协调各子节点,并向所述分布式事务未完成事务执行的子节点的资源管理器发送回滚指令,资源管理器通过调用未完成事务执行的子节点下的数据库XA接口,来执行回滚操作,实现事务的回滚。

具体地,S5.1中一段时间为5秒钟。

具体地,超时预警机制设置的超时阈值为30秒。

实施例2:

为了验证实施例1中提供的一种基于分布式数据库的安全停止方法,本发明在基于天翼云分布式数据库udal上部署了一个具体的实施例,请参阅图3,并假设该天翼云分布式数据库udal包括两个节点:dbproxy1与dbproxy2,每个节点关联2台天翼云数据库rds,且保证各实例各个节点间网络通畅,正常运行;本实施例具体步骤如下:

S2.1:在dbproxy1上建立连接,执行普通select语句,模拟非事务查询情况。

S2.2:在dbproxy2上建立连接,并执行命令udal dt start开启分布式事务,模拟事务查询状态。

S2.3:通过天翼云分布式数据库客户端发送安全停止命令kill-15,然后通过监控设备实时捕获该SQL命令,并对该命令执行验证和授权操作,将授权后的命令发送到数据库主节点上,并判断命令是否接收成功,若成功进入到安全停止模式,则停止所有的定时任务,并执行安全停止任务;若失败,则结束安全停止请求。

S2.4:成功进入安全模式后,首先通过客户端口向dbproxy1或dbproxy2任一子节点发送建立新前端连接的请求,请求将被拒绝,并返回数据库安全停止中,拒绝连接。

S2.5:用户向客户端输入非事务SQL查询指令,通过S1构建的连接对节点dbproxy1下任一数据库rds1或数据库rds2进行非事务查询操作,会返回安全停止中,并断开与节点dbproxy1的连接。

S2.6:用户向客户端输入事务查询SQL查询指令,通过S2构建的连接对节点dbproxy2下任一数据库rds3或数据库rds4进行事务查询操作,会返查询成功,并将查询的数据一并反馈到客户端,当该节点下数据库rds3和数据库rds4所有事务执行完毕,返回安全停止中,并释放资源,断开与节点dbproxy2的连接,如果当在dbproxy2下执行的事务时间超过30秒,则利用超时预警机制对未完成执行的事务进行回滚,并将该事务标记为未完成事务,且将该标记记录在回滚段中;当重启数据库时,通过SQL指令检查回滚段中的事务状态,并重新执行该未完成事务。

具体地,在dbproxy1上建立连接,模拟非事务查询的具体步骤如下:

S1.1:在天翼云分布式数据库客户端输入dbproxy1的域名、数据库端口、用户名和密码,建立与dbproxy1节点的连接;

S1.2:连接成功后,执行不包括事务封装的普通的SELECT语句来查询dbproxy1下任一数据库中的数据rds,模拟非事务查询;如SELECT*FROM rds1,表示查询dbproxy1下第一个关联数据库中的数据;

具体地,在dbproxy2上建立连接,模拟事务查询的具体步骤如下:

S2.1:在天翼云分布式数据库客户端输入dbproxy2的域名、数据库端口、用户名和密码,建立与dbproxy2节点的连接;

S2.2:连接建立成功,执行命令udal dt start开启分布式事务处理机制;

S2.3:开启分布式事务后,执行包括事务封装语句BEGIN、COMMIT的SQL语句来查询dbproxy2节点任一关联数据库rds,模拟事务查询;例如:

BEGIN TRANSACTION,开始一个事务;

SELECT*FROM table_name WHERE condition,执行查询操作;

COMMIT,提交事务,将所有操作保存到数据库中。

具体地,利用超时预警机制对未完成执行的事务进行回滚,并保证该事务不失效的执行流程如下:

当该事务只在数据库rds3或数据库rds4任一一个上执行时,则只需利用数据库rds3或数据库rds4本身自带的回滚机制进行回滚操作,实现事务的回滚。

当该事务为分布式事务,同时在数据库rds3和数据库rds4上执行时,则通过分布式事务管理器Seata来向dbproxy2节点的资源管理器发送回滚指令,资源管理器通过调用dbproxy2下数据库rds3、数据库rds4或同时调用数据库rds3和数据库rds4的XA接口,来执行回滚操作,实现事务的回滚。

实施例3:

请参阅图4,一种基于分布式数据库的安全停止系统包括监控模块、安全停止模块、安全停止检测模块、超时预警模块和资源释放模块;

监控模块,用于实时捕获安全关闭指令,并向数据库下级子节点发送安全停止任务请求;

安全停止模块,用于对数据库各子节点执行安全停止任务;

安全停止检测模块,用于检测数据库各子节点是否满足安全停止条件;

超时预警模块,用于对安全停止模式中,执行时间超过超时阈值的事务进行捕捉和合理的停止;

资源释放模块,用于数据库资源释放,完成安全停止。

进一步地,安全停止检测模块包括前端连接检测子单元和后端连接检测子单元;

前端连接检测子单元,用于统计各子节点下所有前端连接事务是否全部完成执行,并满足安全停止条件;

后端连接检测子单元,用于统计各子节点下所有后端连接事务是否全部完成执行,并满足安全停止条件。

实施例4:

一种存储介质,存储介质中存储有指令,当计算机读取所述指令时,使计算机执行一种基于分布式数据库的安全停止方法。

实施例5

一种电子设备,包括处理器和存储介质,处理器执行存储介质中基于自校准机制的无监督实时低照度图像增强方法。

尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

相关技术
  • 一种基于嵌入式Linux系统的带安全认证的多启动系统及方法
  • 一种分布式数据库节点安全通信方法及系统
  • 一种分布式数据库节点安全通信方法及系统
技术分类

06120116580768