技术领域
[0001] 本发明涉及数据库技术领域,尤其涉及一种基于状态机的数据库高可用调度器。
相关背景技术
[0002] 随着云计算大数据的时代的到来,各行业应用对数据库可用性和数据安全提出了更高的要求,业界普遍采用了多副本的方法提高数据库的可用性。
[0003] 高可用数据库通常用主从的方式实现多副本,以MySQL为例,通常有一个主库承担读写任务,从库通过订阅主库的binlog日志并且回放日志来保证数据和主库一致;当主库发生故障的时候,数据库需要进行主从切换。现有技术中有一些常见的高可用组件,如MHA等提供监控数据库的状态对数据库的进行切换和调度;此类高可用组件存在功能简陋有些特殊场景无法处理,切换过程难以追溯不方便后续排查问题和采取预防措施,实现逻辑不够清晰不方便后续演进等问题。
具体实施方式
[0021] 为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合说明书附图对本发明的具体实施方式做详细的说明。
[0022] 在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
[0023] 其次,此处所称的“一个实施例”或“实施例”是指可包含于本发明至少一个实现方式中的特定特征、结构或特性。在本说明书中不同地方出现的“在一个实施例中”并非均指同一个实施例,也不是单独的或选择性的与其他实施例互相排斥的实施例。
[0024] 参照图1~3,为本发明的实施例,提供了一种基于状态机的数据库高可用调度器,主要分为两个模块:调度器模块和代理模块;
[0025] 其中,代理模块的功能主要用于采集数据库信息,上报和执行调度器发送给它的指令对数据库进行操作;
[0026] 调度器模块的实现如附图2所示。
[0027] 该于状态机的数据库高可用调度器的实现方法如下:
[0028] 代理模块定期上报结构化监控数据(在本实施例中,一次周期用一次tick表示,为可配置参数,可以选择性的配置为10秒、20秒等),结构化监控数据包含但不限于是数据库连接状态、磁盘使用率、从库复制进度、复制延时等,上报的数据封装为一个标准化的结构体;调度器收到各个代理上传的监控数据后,经过分析得出当前集群状态;状态中包含但不限于各个实例是否存活、各个从库复制延时、各个实例数据盘使用率等;如果某次tick没收到某个代理的监控数据,则集群状态中显示这个实例的状态为“丢失”,当前的集群日志就是状态机的输入。
[0029] 每一次tick生成集群状态后,都将结构化的集群状态信息记录到集群状态日志中;集群状态日志反应集群状态的变化,在出现故障和切换的时候可以通过查询集群状态日志还原出前后那一段时间集群的状态,为排查提供依据;同时集群状态日志是结构化的,非常方便使用工具进行解析和分析;日志本身不一定是一个文件,使用各种时序数据存储服务最佳。
[0030] 状态机接受当前tick的集群状态作为输入,同时结合内存中保存的过去N次tick的历史状态做出决策,所做出的决策都可以以状态机转移图来表示;
[0031] 以一个简单的场景为例,假设主数据库所在的机器网络中断,主数据库与对应的代理模块均无法与外界通信。如果这种状态持续3个tick我们认为主库失联,尝试发起切换。
[0032] 在本实施例中,为了方便表示,只保留3次历史状态作为决策依据,上述示例例的决策流程如附图3所示,该附图为上述过程中简化后的状态转移示意图。
[0033] 每次tick都会生成一个结构化的操作指令,里面包括但不限于启停某个实例、执行主从切换操作、克隆一个新副本等;如果不需要执行任何操作,则生成的操作指令是一个不包含任何操作的空结构体;若有操作,则将生成的操作指令将传输给对应的代理模块执行相应的操作。
[0034] 每次生成结构化的操作指令之后,会将指令记入操作指令日志;与集群状态日志类似,操作指令日志也是一个按时间序排列的结构化日志,可以用来追溯曾经发出过何种操作指令。
[0035] 根据状态机的特性,可以知道只要按时间序列输入相应的输入,系统一定会转移到对应的状态;对于确定的状态,将生成确定的执行指令,高可用调度器执行的任何调度决策都是可以复现的;在调度器开发、维护、添加新场景以及故障后排查的时候,便于进行验证与测试,使得任何的决策场景都可以通过构造特定的输入进行构建。
[0036] 由于存在结构化的集群状态日志和操作指令日志,当维护者在数据库发生故障后切换后,希望追溯切换过程总结故障原因时,可通过日志准确还原出当时高可用调度器视角中一段时间之内集群处于怎样的状态,为何做出了某种决策。此外,由于日志是结构化的,可以用工具读取集群状态日志后输入给状态机,进而直接重现当时调度器的决策过程。
[0037] 综上所述,本发明提供了一种基于状态机的数据库高可用调度器,本方案引入状态机模型对高可用调度器进行设计,通过将对数据集群的监控信息按照时间序列组织为固定格式,作为状态机的输入,由状态机根据历史状态和输入进行决策,输出对应的操作指令由相应的执行模块执行;通过将集群状态信息和调度器的操作指令结构化存储,使得调度器的决策过程更加清晰化,便于追溯追踪决策过程,排查数据库故障,添加对新场景的处理。
[0038] 应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。