在过去十多年在Oracle,腾讯等公司的数据库系统内核开发工作中,我的大量工作就是确保数据库系统在各种环境故障情况下,能够保持数据一致性和持续可用地提供数据读写服务。这些工作既包括在腾讯参与开发的TDSQL 分布式数据库,也包括过去的近一年我开发的昆仑分布式数据库。
过去3个多月我花了大量时间精力解决了昆仑数据库使用的存储节点的容灾问题。昆仑分布式数据库使用我改进后的Percona-MySQL-8.0.18-9,我将它命名为Kunlun-Percona-MySQL-8.0.18-9。官方版本的Percona-MySQL-8.0.18-9的group replication和分布式事务处理(即XA)有很多个容灾能力方面的缺陷,这些缺陷有一些是在mysql-5.7时代就已经存在的了---当时我在腾讯做TDSQL分布式事务处理功能开发的时候修复了这些bug并报告给了mysql官方团队。很遗憾mysql官方并没有修复全部的这些bug,多数关键的bug仍然在mysql8.0存在,尽管我在每个bug报告中都提供了我的patch。
在Kunlun-Percona-MySQL-8.0.18-9中,我的改进填补了MGR在处理XA事务方面的诸多缺陷和空白。在本文中,我希望基于过往工作历程中积累的经验,给读者分享一下我对分布式数据库系统的容灾能力和需求的理解,并介绍Kunlun-Percona-MySQL-8.0.18-9修复的容灾缺陷。
本文内容包括数据库系统需要应对的故障(即灾难)类型和环境可靠性模型,灾难可能造成的损害,以及容灾的方法和手段,包括数据库事务处理,数据备份和恢复,数据复制与高可用性,两阶段提交和分布式事务处理等数据库容灾相关的内容。
本文不含盖或者针对特定的数据模型(比如关系模型)和查询语言(比如SQL),