暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

「更易用的OceanBase」|我与OMS的爱恨情仇

原创 张瑞远 2022-11-24
1009

初次见面

2020年,第一次接触1.3.x版本,刚开始是新奇和怀疑,这个平台真的可以顺利迁移oracle数据到OB吗。

测试阶段问题就很多。全量迁移效率太慢。全量迁移还未结束,增量store解析的日志就断了等等。当时的任务界面虽然详细但是比较繁琐,真正配置任务的时候需要手工去跳过一些任务,全量迁移可以通过oms的8080端口登录到全量迁移界面详细查看,更不用说还有迁移表结构报错,对于无主键表需要勾选相关选项,增量迁移效率也存在问题,一条链路中配置表太多也会有白名单过长的问题,后来ob的同学一点点解决,也不断发版更新组件,后来1.4.x版本相对就好很多,但是仍然存在问题,比如白名单问题虽然有时候不报错了,但是有字符限制被截断了,在截断前的表增量同步可以正常同步,但是截断后的表没办法正常同步,可以通过修改oms的meta库的字段类型来规避相关问题,我们也总结了一些经验,一条链路中尽量配置小于2000张表,但是这款产品虽然用了挺久,但是仍然有很多不便,比如如果遇到一些故障场景需要重新拉取store或者修改store或者write的参数,只能去后台修改,通过curl停止修改拉起组件,而且监控页面也是分离的无法在迁移任务界面直接看到延迟情况。再比如有的场景需要上线ob之后还要迁移部分数据回到其他的oracle库,那就需要先配置正向链路跳过相关步骤直接发起反向,对于经验少的同学比较不友好。

对于历史版本我暂时也不吐槽太多了,大家有兴趣可以翻翻我以前记录的一些东西。

https://www.modb.pro/db/40324

https://www.modb.pro/db/41026

https://zhuanlan.zhihu.com/p/274768673

https://zhuanlan.zhihu.com/p/274780748

改头换面

再后来我们就用上了3.1.x的版本,整个界面都有了改头换面的变化。


相对老版本,这个版本的任务配置更简洁合理,可以选择需要进行的子任务,可以更灵活的配置迁移选项

注意事项

新版本虽说更好用了,但是没有完美的产品,不同的场景都有可能有新的问题,我简单分享下自己的一些经验,希望可以帮助到看到的同学。

1.oms平台参数配置


如果生产环境下使用默认的参数可能不能满足迁移效率,可以修改档位的参数,我这里是把快速档的参数调大了

2.后台的一些修改

1>oms的meta库调整

1)备注超长

oms_rm:

alter table oms_struct_migration_record modify column extra_msg mediumtext;

alter table oms_struct_migration_record modify column post_sql mediumtext;

这个表字段在3.x的后面版本自己修改过不需要手动再去改了

2)全量迁移乱码报错跳过

oms_cm:

insert into config_template(task_type,db_type,task_version,`key`,value,scope,file_name,file_path,gmt_created,gmt_modified,dest_db_type) values('checker',null,'1.0','image.insert.error.ignore','true','datasource','checker.conf','/home/ds/run/{taskname}/conf/',now(),now(),null);

2>docker配置修改(oat安装的oms可能资源小,需要调整)

##查看docker信息

docker inspect oms

docker stats oms

docker ps -a

##停 docker

systemctl stop docker

##修改配置文件

/docker/containers/fdc3d4cd1ef5476f827fcea05c70963672a29de29d9df0e89a95241fb64f878b/hostconfig.json

##起docker

systemctl start docker

3>store的jvm修改

这个可以修改全局或者单条store的配置

在docker内修改/home/ds/kafka/bin/connect-drcdeliver.sh中的export KAFKA_HEAP_OPTS后面参数大小,之后新建store的内存大小都是新设置的

也可以在store新拉的时候停止,后台修改这个store 的目录下的kafka下参数大小,单独修改这一个store的大小


3.oms平台的一些功能变化


可以直接配置关联ocp,3.x前期版本任务强制需要关联ocp,后面版本不需要强制关联ocp,但是告警如果需要推送到ocp的话还是要配置,可以通过前台直接配置告警频率和级别


1.x版本的oms需要单独进入监控页面去查看延迟情况,如果有情况需要拉取新的store或者修改组件参数都要进入后台,3.x版本可以直接通过前台组件进行全部的监控和前台新增,也可以再前台直接更新组件参数。





可以新增或者修改组件的参数

4.oms调度过程中的注意事项

以下是我在使用oms的时候,我个人的一些总结,希望能给到大家参考帮助

1>需要校验了但是没有自动切换到后续任务(不止该场景)

##查看任务状态

MySQL [oms_rm]> select step_order,step_name,step_desc,step_status from oms_step where project_id='p_44qher04psxs' order by step_order;

+------------+-------------------+--------------------+-------------+

| step_order | step_name         | step_desc          | step_status |

+------------+-------------------+--------------------+-------------+

|          1 | PRE_CHECK         | 预检查             | FINISHED    |

|          2 | PREPARE           | 迁移准备           | FINISHED    |

|          3 | STRUCT_MIGRATION  | 结构迁移           | FINISHED    |

|          4 | INCR_LOG_PULL     | 增量日志拉取       | FINISHED    |

|          5 | FULL_MIGRATION    | 全量迁移           | FINISHED    |

|          6 | INCR_SYNC         | 增量迁移           | MONITORING  |

|          7 | FULL_VALIDATION   | 全量校验           | RUNNING     |

|          8 | APP_SWITCH        | 正向切换           | INIT        |

|          9 | REVERSE_INCR_SYNC | 反向增量           | INIT        | -

+------------+-------------------+--------------------+-------------+

##修改增量任务状态,可以自动进入下个任务

update oms_step set step_status='MONITORING' where step_name='INCR_SYNC' and step_status='RUNNING' and project_id='p_44qher04psxs';

ps:比如全量任务开始,但我想跳过,可以后台杀掉全量校验的进程,后台将全量校验的状态改为FINISHED。

2>hash表校验

3.x前期版本需要单独配置校验链路添加参数,这样才能保证校验准确,但是耗时也比较长(ps:也可以修改hash分区表名来规避)

filter.verify.inmod.tables: .*;.*;.*

3.x后期版本checker组件更新可以与普通表一样校验,但是最好还是拆成单独链路,配置以下参数校验

limitator.verify.oracle.rowid.querydst.withpartition":string"false"

3>新拉store

简单介绍几个需要新拉store的场景,比如store解析有瓶颈需要多拉几个不同时间段的store同步解析,或者生产oracle是3节点rac,adg是2节点,这种主备节点不一致的情况。

curl http://10.19.xxx.xxx:8088/crawler/start -d "topic=p_3rhz1ubgb3y8_source-000-0&checkpoint=::::1654401600:&role=master&type=DELIVER2STORE&deliver2store.logminer.selector_thread_num=128&deliver2store.logminer.use_independent_fetcher_per_instance=true&deliver2store.logminer.instance_threads=1|2|3"

4>writer修改位点

也介绍个案例场景吧,比如业务突然清理了一个日志表的几千万数据,导致链路延迟了,与业务确认这个数据可以直接去目标端清理,这个时间点没有其他表的数据变化,需要先把这个操作时间点跳过。

1.#改位点

sudo curl -XPOST 'http://134.80.184.66:8088/JDBCWriter/update' -d "writerName=134.80.xx.xx-9000:oms_source_topic_1000125_RATING-000-0:0000063963" -d "JDBCWriter.timestamp=1660831499"

2.#拉起

sudo curl -XPOST 'http://134.80.184.66:8088/JDBCWriter/start' -d "writerName=134.80.xx.xx-9000:oms_source_topic_1000125_RATING-000-0:0000063963" -d "resuming=false"

5>store和writer的一些常用参数

1.跳过报错

比如oracle11g对于对象名称长度的字符限制比较小,如果开了ddl同步,反向切换的时候删除oms自动创建的uk,可能会报字符超长的报错,但是oracle端是没有这个索引的,所以可以跳过这个报错码

sudo curl -XPOST 'http://134.84.xx.xx:8088/JDBCWriter/update' -d "writerName= 134.84.xx.xx-9000:p_39q0zheaooqo_dest-000-0:0000000053&JDBCWriter.sinkFile.skipErrorCode=12899,01847"

在3.1版本后该参数改为了数组类型所以需要这样改

sudo curl -XPOST 'http://134.84.xx.xx:8088/JDBCWriter/update' -d "writerName= 134.84.xx.xx-9000:p_39q0zheaooqo_dest-000-0:0000000053&JDBCWriter.sinkFile.skipErrorCode=[12899],[01847]"

2.store参数调整,如果有相关效率问题可以尝试调整,可能不全,比如writer的work_num参数之类,还需要结合实际情况

###store

deliver2store.logminer.fetch_arch_logs_max_parallelism_per_instance= 日归档/500g +1

deliver2store.logminer.max_actively_staged_arch_logs_per_instance= 上面参数*2

deliver2store.logminer.staged_arch_logs_in_memory = true

###writer

JDBCWriter.sinkFile.useTargetIndex":string"true"

JDBCWriter.coordinatorFile.hotKeyMerge=true

3.注意补充点

对于一些热表大表均分到不同链路或者单独配置比较好

4.单独配置ob同步到oracle

 使用sys用户登录OceanBase_Oracle数据库。

1)创建内部用户__OCEANBASE_INNER_DRC_USER。

create user '__OCEANBASE_INNER_DRC_USER'@'%' IDENTIFIED BY uy1n8666;

2) 分配all权限给__OCEANBASE_INNER_DRC_USER。

grant ALL to '__OCEANBASE_INNER_DRC_USER';

3)分析无主键数据可能还要补充一些权限

grant select on sys.dba_tables to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_part_tables  to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_part_key_columns to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_subpart_key_columns to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_tab_partitions to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_objects to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_tab_subpartitions to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_indexes to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_ind_columns to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_constraints to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_tab_columns to '__OCEANBASE_INNER_DRC_USER';

grant select on sys.dba_tables to '__OCEANBASE_INNER_DRC_USER';

4)sql超时参数

limitator.sql.exec.max.noactive.time=2000000


总结

ob的迭代不止server,各种周边产品配套更新都很快,也很能解决客户的痛点,OCP和OMS是生态的两大产品,oms的进步可以看出产品的实力,也更能给予客户迁移的信心。

这篇记录可能不够全面,简单介绍了下自己的一点总结和经验,也有自己对于oms新老版本的一点看法,但是产品总是越来越好,越用越好用,也希望我的分享可以有些干货帮助到需要的同学,更希望ob发展的更好。

行之所向,莫问远方

最后修改时间:2022-11-24 21:31:22
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论