论文部分内容阅读
北斗卫星导航系统是我国空间基础设施建设中非常关键的一部分,而iGMAS则是为了在北斗系统之上向全球用户提供安全、稳定和可靠的导航数据以及产品服务。iGMAS数据中心中采用MySQL作为结构化数据的存储方案,而且MySQL系统在其中扮演的角色直接决定了整个业务系统的可用性,因此提高MySQL系统的高可用性对于整个iGMAS数据中心建设的意义和重要性不言而喻。但是由于数据中心中业务的特殊性,使得利用当前已有的一些高可用系统并不能满足业务需求,这种特殊性主要是由业务系统使用MySQL的方式造成的,数据中心中的业务系统通过将业务数据的元数据信息存储到数据库中,这些元数据包括数据文件的路径等信息,然后业务系统再通过这些元数据信息找到对应的业务数据文件来对外提供数据服务。MySQL在其中相当于扮演了一个索引的角色,这就造成了业务系统对数据库的写入操作所占的比重非常大,而且由于业务系统写入元数据的高并发量以及单次大批量写入的实现方式,更加大了实现MySQL高可用的难度。因此本文旨在研究和实现一个更加高效的高可用系统来实现MySQL系统的高可用性,以减少数据中心业务系统的不可用时间。一个完备的复制环境是MySQL高可用系统的重要基础,包括MHA等开源的高可用系统并不具备自动搭建复制环境的能力,而本文则设计了一个REP-ENV-DAG复制环境有向无环图,并在此数据结构之上设计了复制环境配置算法BUILD-REP-ENV和复制环境合法性检测算法CHECK-REP-ENV,以及基于Redis的缓存方案。经过多次实验测试,采用多线程方案搭建一个包含10个从节点的复制环境平均只需要耗时0.66s,与之前采用人工的方式需要花费10分钟以上的情况相比,不仅大大提高了搭建效率,而且保证了复制环境的可靠性。保证MySQL系统高可用主要是通过在主节点发生异常时进行快速的故障转移来实现的,本文针对广泛使用的开源框架MHA所采用的数据库实例健康检测方法所存在的不足,使用Python语言重新设计实现了基于系统表更新MONITOR-BY-UPDATESYSTABLE和基于IO请求时间MONITOR-BY-CHECK-IOTIME的检测算法,提出了一种启发式的算法来动态、适应性地调整轮询检测的间隔时间,从而更加有效地缩短发现数据库异常的时间,并提出了哨兵算法来解决误判问题。经过多次实验测试,在将定时轮询的间隔时间设为5s的前提下,MONITOR-BY-UPDATE-SYSTABLE算法发现异常的平均耗时为6.010s,MONITOR-BY-CHECK-IOTIME算法发现异常的平均耗时仅为4.546s,验证了后者的启发式算法具有更好的性能,可以进一步减少系统的不可用时间。当检测到数据库实例出现了异常时,就要快速地触发故障转移过程来实现主节点的失效转移,本文分别设计实现了在非gtid模式和gtid模式下的故障转移算法,详细分析了基于二进制日志的数据同步过程中产生数据缺失的各种异常情况,设计实现了数据一致性保证算法来保证节点间数据的一致性,并根据算法为IO密集型操作的特点,提出并设计了异步协程的解决方案,和MHA开源系统所采用的多线程方案相比,能够提高数据恢复的并发效率。经过多次实验测试,在包含10个从节点的复制环境中,非gtid模式下采用多线程并发方案实现故障转移操作的平均耗时为1.642s,而采用异步协程方案的平均耗时仅为1.288s,验证了异步协程方案具有很好的优化效果,可以在保证数据一致的情况下进一步减少系统的不可用时间。最终通过上述的优化,满足了iGMAS对MySQL高可用性的功能要求和性能需求,目前已经在数据中心投入使用,提高了整个数据中心业务系统的高可用性。