如何提网站建设需求,捡个校花做老婆是哪个网站的,网站建设技术清单,周口微网站制作本文来自OceanBase热心用户的分享 近期#xff0c;我们计划将业务数据库从TiDB迁移到OceanBase#xff0c;但面临的一个主要挑战是如何更平滑的完成这一迁移过程。经过研究#xff0c;了解到OceanBase提供的OMS数据迁移工具能够支持从TiDB到OceanBase的迁移#xff0c;并且… 本文来自OceanBase热心用户的分享 近期我们计划将业务数据库从TiDB迁移到OceanBase但面临的一个主要挑战是如何更平滑的完成这一迁移过程。经过研究了解到OceanBase提供的OMS数据迁移工具能够支持从TiDB到OceanBase的迁移并且它还具有数据增量同步的功能不过需要依赖Kafka的支持。为了确保迁移的顺利进行我们提前进行了全面的测试以验证整个数据同步的可行性。以下是我们的测试记录供大家参考和讨论。 环境介绍
以下各种组件安装过程不详细说明具体安装过程在各产品官方网站都有详细说明后面只介绍具体的配置过程
TiDB环境
TiDB版本v5.4.3
TiDB的部署是在一台单机上混部了TiDB Server、TiKV以及PDTiCDC单节点部署在另外一台机器上
角色机器端口TiDB Server172.24.255.704000TiKV172.24.255.7020160TiKV172.24.255.7020161TiKV172.24.255.7020162PD172.24.255.702379TiCDC172.24.255.558300 [rootOB3 bin]# ./cdc cli capture list --pdhttp://172.24.255.70:2379
[{id: c0769fd8-78fa-4841-8103-586099d8fcf6,is-owner: true,address: 172.24.255.55:8300}
]
OceanBase环境
OceanBase版本V4.2.0_CE
角色机器端口OBServer172.24.255.562881OBServer172.24.255.572881OBServer172.24.255.582881OBProxy172.24.255.562883OBProxy172.24.255.572883 Kafka环境
Kafka版本3.1.0TiCDC目前支持的最高版本是3.1.0版本
Zookeeper版本3.6.3
这里做测试所以Kafka和zookeeper都是单机部署没有采用集群部署zookeeper用的是3.1.0版本自带的zookeeper实际效果是一样的。
角色机器端口Kafkabroker172.24.255.559092zookeeper172.24.255.552181
[rootOB3 kafka]# ./bin/kafka-broker-api-versions.sh --bootstrap-server 172.24.255.55:9092 --version
3.1.0 (Commit:37edeed0777bacb3)
[rootOB3 bin]# ./zookeeper-shell.sh 172.24.255.55:2181 version
Connecting to 172.24.255.55:2181
ZooKeeper CLI version: 3.6.3--6401e4ad2087061bc6b9f80dec2d69f2e3c8660a, built on 04/08/2021 16:35 GMT OMS环境
OMS版本V4.1.1_CE
OMS采用的单节点部署
角色机器OMS172.24.255.70
配置过程
创建TiCDC同步任务
TiCDC支持向mysql兼容、tidb以及Kafka中同步数据这里因为需要OMS同步TiDB的增量数据而增量数据是从Kafka中获取因此需要创建TiCDC到Kafka的同步任务创建示例如下
./cdc cli changefeed create --pdhttp://172.24.255.70:2379 \
--sink-urikafka://172.24.255.55:9092/test-topic?protocolopen-protocolkafka-version3.1.0partition-num1max-message-bytes67108864replication-factor1 \
--changefeed-idsimple-replication-task --sort-engineunified
这条命令会在TiCDC中创建一个名字为simple-replication-task的同步任务并且会在Kafka中创建一个名字为test-topic的topic。创建完成之后会收到如下信息
Create changefeed successfully!
ID: simple-replication-task
Info: {sink-uri:kafka://172.24.255.55:9092/test-topic?protocolopen-protocol\u0026kafka-version3.1.0\u0026partition-num1\u0026max-message-bytes67108864\u0026replication-factor1,opts:{max-message-bytes:1048588},create-time:2023-10-09T15:41:57.166933308:00,start-ts:444815721665658881,target-ts:0,admin-job-type:0,sort-engine:unified,sort-dir:,config:{case-sensitive:true,enable-old-value:true,force-replicate:false,check-gc-safe-point:true,filter:{rules:[*.*],ignore-txn-start-ts:null},mounter:{worker-num:16},sink:{dispatchers:null,protocol:open-protocol,column-selectors:null},cyclic-replication:{enable:false,replica-id:0,filter-replica-ids:null,id-buckets:0,sync-ddl:false},scheduler:{type:table-number,polling-time:-1},consistent:{level:none,max-log-size:64,flush-interval:1000,storage:}},state:normal,error:null,sync-point-enabled:false,sync-point-interval:600000000000,creator-version:v5.4.3}
在Kafka中查看topic
[rootOB3 kafka]# bin/kafka-topics.sh --bootstrap-server 172.24.255.55:9092 --list
__consumer_offsets
test-topic
这里有的参数简单说明下
--pd指定TiCDC任务同步源端TiDC集群的pd信息--changefeed-id指定同步任务的ID如果不指定会自动生成--sink-uri同步任务下游地址需按照下面格式配置目前 scheme 支持 mysql/tidb/kafka/pulsar [scheme]://[userinfo][host]:[port][/path]?[query_parameters]--sort-engine指定 changefeed 使用的排序引擎。因 TiDB 和 TiKV 使用分布式架构TiCDC 需要对数据变更记录进行排序后才能输出。该项支持 unified默认/memory/file unified优先使用内存排序内存不足时则自动使用硬盘暂存数据。该选项默认开启。memory在内存中进行排序。 不建议使用同步大量数据时易引发 OOM。file完全使用磁盘暂存数据。已经弃用不建议在任何情况使用。其他包括--start-ts、--target-ts、--config配置具体可参考官网这里不过多介绍本次同步任务也未用到。
实际同步到下游配置是通过sink-uri决定这里再简单说明下sink-uri中参数含义在这次创建的任务中--sink-uri参数内容如下
--sink-urikafka://172.24.255.55:9092/test-topic?protocolopen-protocolkafka-version3.1.0partition-num1max-message-bytes67108864replication-factor1
参数解析172.24.255.55下游 Kafka 对外提供服务的 IP9092下游 Kafka 的连接端口topic-name变量使用的 Kafka topic 名字这里使用test-topickafka-version下游 Kafka 版本号可选默认值 2.4.0目前支持的最低版本为 0.11.0.2最高版本为 3.1.0partition-num下游 Kafka partition 数量max-message-bytes每次向 Kafka broker 发送消息的最大数据量可选默认值 10MBreplication-factorKafka 消息保存副本数可选默认值 1protocol输出到 Kafka 的消息协议可选值有 canal-json、open-protocol、canal、avro、maxwell
除了上面这些配置另外还有加密等配置这里没有使用加密方式。
另外OMS 社区版仅支持 TiCDC Open Protocol不支持其它协议因此在sink-uri中指定protocol时必须制定protocolopen-protocol
在以上创建完成之后在TiDB中创建表并插入数据
MySQL [test] create table test_table(id int primary key, name varchar(20));
Query OK, 0 rows affected (0.08 sec)MySQL [test] show tables;
----------------
| Tables_in_test |
----------------
| test_table |
----------------
1 row in set (0.00 sec)MySQL [test] insert into test_table values(1,OceanBase);
Query OK, 1 row affected (0.00 sec)
可以在Kafka中看到增量信息
[rootOB3 kafka]# ./bin/kafka-console-consumer.sh --bootstrap-server 172.24.255.55:9092 --topic test-topic
Q{q:CREATE TABLE test_table (id INT PRIMARY KEY,name VARCHAR(20)),t:3}
Q{u:{id:{t:3,h:true,f:11,v:1},name:{t:15,f:64,v:OceanBase}}} OMS创建数据源
OMS上创建数据源时需要创建两个数据源一个是Kafka的一个是TiDB的在配置TiDB数据源时需要关联Kafka数据源因此这里先创建Kafka数据源。
Kafka数据源
进入到OMS数据源管理页面新建数据源选择Kakfa数据源因为这里未使用SSL和认证所以取消勾选填写完成之后测试连接连接成功之后确定即可添加成功。 TiDB数据源
同样进入到新建数据源页面选择TiDB数据源填写对应的信息同时绑定Kafka然后关联上一步创建的Kafka即可选择创建好的test-topic然后进行连接测试测试成功之后确定即可添加TiDB数据源 OceanBase数据源
方式基本相同 OMS创建迁移任务
在OMS数据迁移页面点击创建迁移项目输入项目名称源和目标之后点击下一步 根据需求选择同步任务配置这里勾选结构迁移、全量迁移、增量同步Insert、Update、Delete以及全量校验注意这里不支持DDL同步然后点击下一步 选择要同步的对象这里可以直接指定对象也可以选择匹配规则。我直接用了匹配规则test库下所有对象都同步然后点击校验预览对象因为目前TiDB的test库下只有test_table这张表因此可以看到最终对象这里只显示了test_table然后继续点击下一步 配置迁移选项这里选择同步和校验的速率速率越高对资源的消耗越大。另外有高级配置中目标端表对象存在记录时处理策略以及是否允许索引后置索引后置指OMS在完成对应表全量数据迁移、同步后创建非唯一键的索引配置完成之后进行预检查 预检查如果失败需要检查失败原因另外对于一些告警也建议进行修复下然后再开始同步任务。确认无误之后启动项目即可。 任务启动之后会先进行全量迁移即将原表中已有数据先迁移过来完成之后会继续执行增量同步任务。 同步测试
在TiDB端执行insert、update、delete操作可以看到在OceanBase端同步成功。 另外在OMS上可以看到变更的统计信息