开发者学堂课程【PolarDB-X 开源系列课程:PolarDB-X集群运维1:升降配、扩缩容_与备份恢复(三)】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/1032/detail/15145
PolarDB-X集群运维1:升降配、扩缩容_与备份恢复(三)
四、备份恢复
1、单击my circle做备份恢复,以PiT即任意时间点的备份恢复为例。(1)把备份恢复的过程看成两部分,第一部分是全量备份的过程,另一部分是基于bean log增量备份的过程。假如需要对my circle进行任意时间点的恢复,可以找到这个时间点之前最近的全量备份,通常会采用xtrabackup开源工具做这件事。
(2)找到xtrabackup全量备份完成的时间点所对应的bean log到所需要恢复的时间点,一般是秒级,可能今天的二十一点十五分十五秒,就会找到这段时间范围内的所有的bean log,对它进行增量,从而保证单击的my circle数据恢复到想要的任意时间点。polarDB-x的dn节点主要存储数据,把每个dn看成my circle使用,但如果每一个dn都通过这种方式做备份恢复,会存在数据一致性的问题。
(3)因为polarDB-x是一款分布式数据库,上面会有分布式事务存在,可能在dn1和dn2上会有同一条分布式事务来更新两条不同的数据,示例中有四个帐号分别是ABC D,在某一时刻A向B帐号发生了转账操作,这对应的是分布式事务,同时从C向d发起了转账操作。
(4)假如按照每个d单独使用全量加增量的备份恢复方式,因为只能恢复到秒级,同时分布式事务对每个dn而言无感知,有可能会出现A的账户已经完成了转账,但是b账户转账还没开始的情况。同时C和D的转账也存在这个问题,这种情况下,原来整个账户的金额是两百,通过备份恢复的方式拿出来的数据可能会出现两百五的情况,这时候总数据不一致,对用户而言是不可接受的,无论恢复到哪一个时间点都希望所恢复出来的能够保证数据的强一致。
2、polarDB-x操作
polarDB-x的分布式事务,目前采用基于tso的事务模型,每一个分布式事务都会在prepal阶段获取tso,在这基础之上,对dn的bean log进行改造,对每个bean log的event,将tso写到bean log里。有了过程,备份恢复流程和单机my cercle类似,也是基于全量的备份加bean log增量备份的过程,全量备份可以理解为在每个dn上,基于xtrabackup做备份操作,增量备份时bean log也会按照实际的dn产出做近实时的备份,在恢复的过程中,主要的问题就是根据bean log里的tso对现有的增量的bean log进行一定的裁剪,从而保证恢复出来的数据是完全一致的。
举个例子,转账操作这两个在dn1和dn2上提交操作产生了两条bean log的event关联到同一个tso上,在恢复的过程中,要么就是会将两个event同时apply,要么就是同时不apply,这样就能够避免前面所说的数据不一致的问题。
全局一致性的备份恢复已经在公共云上上线,开源的环境正在研发中,近期也会上线。