多向 异地多活-MySQL实时双向复制( 四 )


 
Binlog文件头会保存自定义表结构快照事件,当从接收的Event事件检测到DDL后,保存为自定义的DDL事件 。这样当Applier连接上Replicator后,总是会根据GTID set定位到需要的第一个历史版本表结构所在的文件,从而实时恢复表结构历史,用于后续Binlog Event的解析 。
我们将数据库最小依赖打成独立的Jar包服务,每个Replicator实例启动时,会一并启动一个独立的嵌入式数据库,在恢复GTID set的同时,根据表结构快照事件和DDL事件重建嵌入式数据库中表结构 。
4.3.2 DDL 入口携程内部发布DDL是通过gh-ost进行变更,gh-ost会在影子表中执行DDL操作,等影子表中数据同步完成后,业务低峰期进行原表和影子表的切换 。
针对gh-ost,需要追踪gh-ost变更过程中内部形如_xxx_gho的表的DDL所有操作,最终执行切换时检测出rename操作,保存对应表结构最新信息发送给Applier即可 。
同时针对数据库直接进行的DDL操作,直接检测出DDL类型的Event即可 。
4.3.3 DDL 异常处理对于接入DRC的数据库,当在进行DDL变更时,可能会出现两边数据库变更不同步,单侧进行了DDL变更,另一侧未进行变更 。针对新增列这种场景,Applier在保证数据一致的前提下,对新增列的值进行比较,如果Binlog中解析出的值和该列的默认值一致,则会剔除该列,继续数据复制 。这样在另一侧补上DDL变更后,两侧的数据最终仍然一致 。
4.4 监控告警DRC核心指标包括复制延迟和数据一致性 。除此之外我们还提供BU、应用和IDC维度的监控:
1)流量和TPS监控告警;
2)BU、应用和IDC维度的监控告警;
3)DDL变更监控;
4)表结构一致性监控告警;
5)数据冲突监控;
6)GTID set GAP监控 。
五、总结本次分享围绕DRC的核心指标复制延迟和数据一致性,介绍了复制过程中对性能的优化以及各种场景如何保证数据的一致性 。针对DDL,分别支持gh-ost和直接DDL操作,实现在线表结构变更不影响数据复制 。





推荐阅读