参考客户:吉林医保

用例描述

drds与rds管理表,将表自动拆分到rds中不同库下不同表,每个rds中库名不同,每个库下的各个表名一一相同,表结构相同,并且整体主键没有重复值,参考一个rds数据库与表关系截图(8个库*每个库下8张表=64张表):
库名:8个库

表名:每个库下8张表

配置流程

发布节点配置:

一个rds配置一个发布节点

发布表配置:

将每个rds中涉及的64张表都提交到发布配置中

同步策略配置:

将每个rds中涉及的64张表都分配给订阅节点

订阅配置:

配置一个库,多个传输控制

传输控制控制中过滤DDL
注:如果不过滤DDL,此步省略

数据应用的数据表中,批量指定目标相同库和相同表

注:
(1)老版本web暂时不支持批量修改表明,需要手动后台更新,更新sql如下:

select * from bus_client_product_object where customerid=订阅节点id and ctlid=传输控制id;
update bus_client_product_object  set  targettablename='PSN_INSU_D' where customerid=订阅节点id and ctlid=传输控制id;

注意修改订阅节点id(customerid)和传输控制id(ctlid),具体customerid和ctlid值详见下图:

(2)目标库需要手动创建表结构,可以创建普通表也可以创建hash分区表
(3)增量如果需要支持ddl,需要全量后将传输控制中的过滤ddl功能关闭,并重启订阅子进程
(4)每订阅源端一个表,zcbus程序都会统计一次目标表记录数,此次场景涉及合表操作,目标库是一个表,随着表记录数的增长,统计一次目标表记录数耗时会越来越长,下面是后台程序截图,统计一次2.8亿的记录数,耗时201秒:

为了解决这种情况,订阅传输控制里添加count_after_full_sync_end参数(zcbus-7.6-12-20211103.tar版本添加):
设置为1时,全量装载完成时对表进行select count操作,统计目标库的总记录数,默认为1

INSERT INTO `bus_client_main_control_properties`(`customerid`, `ctlid`, `variable_name`, `value`, `hide`, `orderid`, `description`) VALUES 
(10006, 4, 'count_after_full_sync_end', '0', 0, 39, '设置为1时,全量装载完成时对表进行select count操作,统计目标库的总记录数,默认为1');

(5)客户端增加分布式数据库多表合一功能,使用multi_table_merge_mode参数,设置为1时,该通道使用多表合一模式,该功能主要用于对分布式数据库的分表数据进行合并装载,去掉多余的ddl操作,通道内配置的多个表需要源端表结构完全一致,多个表发起订阅时,需要所有表一起发起。
注:要求每个rds节点必须严格拆分ddl,每个节点的ddl个数要一致,才能保证ddl合成,否则会导致,增量开始订阅的offset点会有问题,进而导致异常,出现这种异常必须重新发布订阅才能修复。

参数手动添加sql:

INSERT INTO `bus_client_main_control_properties`(`customerid`, `ctlid`, `variable_name`, `value`, `hide`, `orderid`, `description`) VALUES 
(订阅节点id, 订阅节点id, 'multi_table_merge_mode', '1', 0, 51, '客户端增加分布式数据库多表合一功能,设置为1时,该通道使用多表合一模式,该功能主要用于对分布式数据库的分表数据进行合并装载,去掉多余的ddl操作,通道内配置的多个表需要源端表结构完全一致,多个表发起订阅时,需要所有表一起发起。');
INSERT INTO `bus_parameter_module`(`module`, `moduletype`, `role`, `orderid`, `variable_name`, `display_name`, `value`, `ifcommon`, `input_type`, `hide`, `description`) VALUES 
('bus_client_main_control_properties', 'COMMON', 1, 51, 'multi_table_merge_mode', '分布式数据库多表合一功能', '1', 0, 0, 1, '客户端增加分布式数据库多表合一功能,设置为1时,该通道使用多表合一模式,该功能主要用于对分布式数据库的分表数据进行合并装载,去掉多余的ddl操作,通道内配置的多个表需要源端表结构完全一致,多个表发起订阅时,需要所有表一起发起。');

(6)全量和增量单独控制DDL过滤 (zcbus-7.6-12-20211208.tar)
ifFilterFullDDL : 设置为1时,全量装载过程中过滤掉DDL操作,默认为0不过滤,ifFilterDDL设置为0生效

INSERT INTO `bus_parameter_module`(`module`, `moduletype`, `role`, `orderid`, `variable_name`, `display_name`, `value`, `ifcommon`, `input_type`, `hide`, `description`) VALUES 
('bus_client_main_control_properties', 'COMMON', 1, 52, 'ifFilterFullDDL','全量DDL过滤', '1', 0, 0, 1, '设置为1时,全量装载过程中过滤掉DDL操作,默认为0不过滤,ifFilterDDL设置为0生效');

ifFilterRealDDL : 设置为1时,增量装载过程中过滤掉DDL操作,默认为0不过滤,ifFilterDDL设置为0生效

INSERT INTO `bus_parameter_module`(`module`, `moduletype`, `role`, `orderid`, `variable_name`, `display_name`, `value`, `ifcommon`, `input_type`, `hide`, `description`) VALUES 
('bus_client_main_control_properties', 'COMMON', 1, 53, 'ifFilterRealDDL', '增量DDL过滤', '0', 0, 0, 1,'设置为1时,增量装载过程中过滤掉DDL操作,默认为0不过滤,ifFilterDDL设置为0生效');

不同类型库表结构转换参考语句(1.sql是源库表结构sql文件,2.sql是转换后生成的目标库sql文件):
java -Djava.security.egd=file:/dev/./urandom -Xmx128M -Xms128M -jar /usr/local/zcbus/jar/DDLParseMain.jar -target_schema insucent_db_y374_0012 -target_tablename psn_insu_d_yp2j_4 -connect oracle:zcbus/‘zcbus’@88.9.0.29:1521/orcl -source_dbtype mysql -target_dbtype oracle -input_file 1.sql -output_file 2.sql

文档更新时间: 2021-12-07 22:42   作者:周风磊