《OceanBase Binlog 如何和 MySQL 生态打通_石梦飞.pdf》由会员分享,可在线阅读,更多相关《OceanBase Binlog 如何和 MySQL 生态打通_石梦飞.pdf(19页珍藏版)》请在三个皮匠报告上搜索。
1、石梦飞OB 生态产品团队-数据迁移OceanBase Binlog 如何和MySQL 生态打通Contents目录01 Binlog 在 MySQL 生态中的应用02 Binlog Service 实现03 Binlog Service 应用实践01应用场景Binlog 在 MySQL 中的应用场景读写分离异地多活数据恢复审计MySQL Binlog缓存一致性数据分析与集成增量备份数据复制OceanBase Binlog 初衷现有的上下游系统如 Flink CDC、Canal、Otter 等系统可以无缝的对接 Binlog Service易集成易拓展基于 Binlog Service 更易构建
2、开放、灵活的数据处理体系集群化部署,保证数据同步的稳定可靠并支持横向扩展高可靠OceanBase Binlog 能力全兼容高度兼容 MySQL 原生的 binlog 管理语法和参数,平滑对接 Canal、Flink 等多种基于 Binlog 订阅的工具低风险通过异步方式进行数据抓取和传输,提供动态流量控制策略;Binlog Service 不会对主库造成性能影响高可靠Binlog Service 提供了集群化部署方式实现服务的高可用,为核心业务的数据流应用提供稳定的架构;支持横向拓展易管理用户在 OceanBase 租户管控台即可快速开通和管理 Binlog,并对服务的运行和资源使用进行监控;
3、提供完善的SQL API 可以灵活、高效地管理和使用 Binlog 服务多形态Binlog Service 已在公有云国内及海外站点发布;社区版 Binlog Service客户案例阿里云、AWS、华为云、腾讯云已经有超过 110 个集群开通 Binlog 服务,并切换到生产订阅110集群Binlog 实例数目前在云服务上已经超过了 200 个200+实例60+客户目前已经平滑对接和适配了包括Canal、Debezium、Maxwell、DTS、DMS、DRS、Cloudcanal、FinkCDC 等近 10几款工具和云服务10+下游工具02架构介绍Binlog Service 架构OBClo
4、ud公有云、多云OCP 私有云OMSObProxy 主地址show binlog server for tenant_1AZ1obmobi:3000obi:3001Node 1obmobi:3000obi:3001Node 2SLBDNSAddr.listAZ2obmobi:3001obi:3000Node 3obmobi:3001obi:3000Node 4tenant_1tenant_2tenant_3tenant_4OBMySQL 租户clog2binlogclog2binlogclog2binlogclog2binlogbinlog dumpsql querytenant_4tenan
5、t_3tenant_2tenant_1OBMySQL 租户clog2binlogclog2binlogclog2binlogclog2binlogObProxy 只读地址(binlog dump 水平扩展)show binlog server for tenant_1binlog dumpsql queryBinlog订阅REST APIBinlog订阅canalflinkcdcdebeziummaxwellDRC storeDTS storeOB binlog service 高可用&集群化架构分布式日志拉取和定序Fetcher分区数据T1 租户DDL 分区T2 租户DDL 分区P1DML
6、分区P2DML 分区DdlParserDDL 事务DDL 事务DDL 事务DDL 任务DDL 任务DDL 处理SequencerDDL 事务DML 分布式事务DML 分布式事务1.并发完成分布式事务组装2.事务定序:基于 commit_version+trans_id 全局定序3.DML 事务内定序:基于 SeqNo 排序4.行提交序号分配CommitterDMLTrans1DMLTrans1DDLTrans3DMLTrans4Trans5TransQueue行数据 QueueBRBRBRBRNot readyBRNot readyBRBR流式提交模型输出DmlParserP1-行数据P2-行
7、数据P1-行数据P2-行数据P1-行数据P2-行数据FormatterredoStmtredoStmtredoStmtStoragerLogEntryTaskLogEntryTaskLogEntryTask1.并发序列化2.并发写入ResourceRecycleDML 事务行索引LogTask异步回收DDL 事务行索引LogTaskStoreServiceRocksDBReader1.聚合2.并发读取多实例的 GITD 一致性保障引入多实例后出现的问题1.对于同一个 gtid,比如 4849646f-4dc7-11ed-85a9-7cd30abc99b4:100,在 BS#1 和 BS#2 的
8、 binlog 文件中对应的实际是不同的事务2.对于同一 gtid 范围,比如 4849646f-4dc7-11ed-85a9-7cd30abc99b4:100:9999,在 BS#1 和 BS#2 的 binlog 文件中对应的实际是不同的事务序列。总结来说即同一 gtid(集合)在不同 binlog server 实例中对应的事务序列不一致。当下游连接基于 gtid 重连时,如果连接从 BS#1 断连重连到 BS#2,基于 gtid(集合)的定位原理,下游会丢失数据。OB 租户BS#1ONLINEBS#2ONLINEBS#3OFFLINE应急或升级接入点binlog dump 连接Binl
9、og 多实例的 GTID 一致性方案xid 列表示 OB 吐出的事务 idcommit version 列表示 OB 吐出的每个事务对应的 commit version,具有单调递增但相邻事务可能相同的特性xid 列和 commit version 列具有可重演的特性,从同一位点拉取事务日志时,吐出的事务序列其 xid 和 commit version 都一致xidcommit versiongtid seq of BS#1gtid seq of BS#2highlowx_0000000001234561gitd_purgedserver_uuid:1-1000000 x
10、_0000000002345672x_0000000003345673x_0000000004456784x_0000000004123455.x_00031000000 x_0003001x_0003002x_0003003.x_0002900000168733080
11、034567829000002900000 x_00029000045678929000012900001.Binlog 多实例的 GTID 一致性方案commit.version.high.startxid.startgtid.seq.startn_trxs基于事务数量触发压缩基于时间触发压缩1687160528x_0000000001110000010s 内累计 10w 个事务1687160530 x_0000110000010s 内累计 10w 个事务1687160535x_0000200001200001100超过 10s 不足 10w 个事
12、务1687160545x_00002001012000101.1687230000 x_0000010超过 10s 不足 10w 个事务,只有心跳1687230010 x_00000110000010s 内累计 10w 个事务1687230013x_000001.1687330796x_00028000000010s 内累计 10w 个事务1687330801x_00029001012900001.提供监控告警能力支持 prometheus 的通用监控告警方案region A 管控 VPCOCP Cloud
13、OCPBinlog ServiceManagerMeta DBregion B 管控 VPCOCP CloudOCPBinlog ServiceManager客户 VPCregion Aregion BOB VPCPrometheusGrafanaODP Clusterob serverob serverob serverLBagentagentagentSLBOBMOBMOBM指标汇报Binlog 管控请求客户 VPCOB VPCPrometheusGrafanaODP Clusterob serverob serverob serverLBagentagentagentSLBOBMOBMO
14、BM指标汇报Binlog 管控请求Meta DB03应用实践Binlog Service 应用场景Flinkcdc、Debezium数据集成与分析数据复制Canal、CloudCanal、DTS支持 goInception 等审计备份工具SQL 审计备份回滚数据集成与分析接入步骤和 MySQL 一致SET execution.checkpointing.interval=3s;createtable ny_energy_data_source(idbigint,enterprise_idbigint,use_timetimestamp,date_typeint,attribute_idbigi
15、nt,PRIMARYKEY(id)NOT ENFORCED)WITH(connector=mysql-cdc,hostname=xxxx,port=xxxx,username=logproxymysql#ob4x.admin,password=xxxx,database-name=test_source,table-name=t1_source);createtable ny_energy_data_target(idbigint,enterprise_idbigint,use_timetimestamp,date_typeint,attribute_idbigint,PRIMARYKEY(i
16、d)NOT ENFORCED)WITH(connector=jdbc,url=jdbc:mysql:/xxxx:xxxx/test_dest?serverTimezone=UTC,username=logproxymysql#ob4x.admin,password=xxxx,table-name=t1_dest,driver=com.mysql.cj.jdbc.Driver,scan.fetch-size=200);insertinto ny_energy_data_target select*from ny_energy_data_source;-插入数据insertinto test_so
17、urce.t1_source values(1,1000,now(),0,1);insertinto test_source.t1_source values(2,1000,now(),0,1);SQL 审计备份恢复goInception 备份步骤如下:1.配置备份数据库,并在执行 SQL 时开启备份功能 2.在执行 SQL 前记录 binlog 位置和线程号(逐条执行逐条记录)3.执行 SQL4.在执行 SQL 后记录 binlog 位置和线程号5.开始备份,解析远程服务器 binlog6.在备份服务器创建备份库7.创建备份信息表,写入执行信息和 binlog 位置信息8.创建备份表9.逐步解析 binlog,并生成回滚语句,写入备份表谢谢