本文分享怎么使用 OMS 将 OB 的数据增量同步到消息中间件产品(Kafka)。OMS 产品也有相关的部署文档、运维文档。
软件包
antman 软件包 :
t-oceanbase-antman-1.3.6-1919351.alios7.x86_64.rpmoms 镜像包:
oms.feature_2.1.0.202102081119.tar.gzinfluxdb 镜像包:
oms.feature_2.1.0.202102081119.tar.gz
influxdb 是时序数据库,用于展示 oms 同步到 kafka 时的延时。
zookeeper 软件包:
apache-zookeeper-3.6.2-bin.tar.gzkafka 软件包:
kafka_2.12-2.1.0.tgz
OCP 和 OB 集群安装
OMS 将 OB 增量数据同步到 Kafka,前提得有 OB 集群。并且还要有 OCP 集群。OCP 和 OB 的部署 这个以前的文章介绍很多,这里就不重复了。
influxdb 数据库安装
时序数据库 influxdb 部署,OB 团队直接做了一个镜像包。只要加载和启动镜像即可。由于机器有限,这里选择部署在 OCP 服务器上,端口是 8086.
docker load -i influxdb_1.8.tar.gzdocker run -d -p 8086:8086 \-v data/1/influxdb:/var/lib/influxdb \--name=oms-influxdb \influxdb:1.8
[root@observer00 kafka_2.12-2.1.0]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEreg.docker.alibaba-inc.com/oceanbase/ocp-all-in-one 2.5.0-1918031 2e635ca841b8 6 weeks ago 1.55GBreg.docker.alibaba-inc.com/antman/ob-docker OB2273_x86_20201214 4da7b6c59465 2 months ago 2.89GBinfluxdb 1.8 c15aefdd926b 4 months ago 307MBreg.docker.alibaba-inc.com/antman/obproxy OBP173_20200603_1923 781b6520e237 8 months ago 1.15GB[root@observer00 kafka_2.12-2.1.0]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMEScffe22efe120 influxdb:1.8 "/entrypoint.sh infl…" 33 minutes ago Up 33 minutes 0.0.0.0:8086->8086/tcp oms-influxdb4a11f95a8be3 reg.docker.alibaba-inc.com/oceanbase/ocp-all-in-one:2.5.0-1918031 "/usr/bin/supervisor…" 2 weeks ago Up 6 days ocpd12b9de3d743 reg.docker.alibaba-inc.com/antman/obproxy:OBP173_20200603_1923 "sh start_obproxy.sh" 3 weeks ago Up 3 weeks obproxy07fc55501898 reg.docker.alibaba-inc.com/antman/ob-docker:OB2273_x86_20201214 "/usr/bin/supervisor…" 3 weeks ago Up 3 weeks META_OB_ZONE_1[root@observer00 kafka_2.12-2.1.0]#
zookeeper 安装
部署 Kafka 之前需要部署 Zookeeper 集群。这里机器有限,我就部署一个单副本的 zk 集群。
[root@observer00 apache-zookeeper-3.6.2-bin]# cat conf/zoo.cfgtickTime=2000dataDir=/root/apache-zookeeper-3.6.2-bin/dataadmin.serverPortclientPort=2181initLimit=5syncLimit=2[root@observer00 apache-zookeeper-3.6.2-bin]# bin/zkServer.sh status/usr/bin/javaZooKeeper JMX enabled by defaultUsing config: root/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Client SSL: false.Mode: standalone[root@observer00 apache-zookeeper-3.6.2-bin]#
kafka 安装
Kafka 目前推荐版本 0.9 或 2.1 . 其他版本 OMS 没有验证过。
tar zxvf kafka_2.12-2.1.0.tgzcd kafka_2.12-2.1.0/# 后台启动nohup bin/kafka-server-start.sh config/server.properties &# 查看后台进程[root@observer00 ~]# jps19474 Jps10664 QuorumPeerMain6570 Kafka
安装后,创建一个 topic:tpcc_topic
# 创建 topicbin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic tpcc_topic# 查看 所有topicbin/kafka-topics.sh --list --zookeeper localhost:2181# 删除 topicbin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic tpcc_topic# 查看 具体 topic 的消息bin/kafka-console-consumer.sh --bootstrap-server 172.23.152.226:9092 --topic tpcc_topic --from-beginning
oms 安装
oms for kafka 版本安装有三种方式:
通过 oat 完全图形化界面安装。交付部署时用。
通过 antman,命令行下自动化安装。
完全手动安装。
这里我选择第 2 个,手动工作不是太多,又能理解原理。
参数文件修改
用 antman 部署过 ocp 后,在ocp 机器的 antman 的软件目录 root/t-oceanbase-antman/ 下会有个配置文件 obcluster.conf 。在配置里设置 oms 的启动参数即可。
由于 oms 会使用 80 、8080 和 8088 端口。其中 8080 跟 OCP 端口冲突。所以 oms 还是不要跟 ocp 混合部署了。安装镜像文件、参数文件都在 ocp 上,oms 配置的是另外一台服务器 IP。需要打通 ocp 机器到 oms 机器的 ssh 信任关系。
[root@observer00 t-oceanbase-antman]# cat obcluster.conf |grep -i oms############ 如果准备部署OMS,请填写OMS基本配置 Edit Configuration Of OMS When Deploying OMS ############OMS_IP=172.26.154.57oms_docker_image_package=oms.feature_2.1.0.202102081119.tar.gzoms_image_REPO=acs-reg.alipay.com/oceanbase/oms-all-in-oneoms_image_TAG=feature_2.1.0############ OMS 高级配置,基本不用修改 OMS ADVANCED SETTINGS ############OMS_PORT=8088OMS_METADB_USER=rootOMS_METADB_TENANT=oms_tenantOMS_METADB_DBNAME=oms_metaoms_container_name=omsoms_docker_cpus=12oms_docker_memory=24G
这个参数文件里有 ocp 的配置信息(不需要修改)。安装会自动在 ocp 元数据库集群里创建一个租户(先确保 ocp 元数据库集群里的资源足够: 2c5g)

oms 容器部署
部署使用 install.sh 脚本
[root@observer00 t-oceanbase-antman]# ./install.sh -hNOTE: Please generate config file with init_obcluster_conf.sh before run this programUsage: ./install.sh [OPTIONS]Options: -h, --help Print help and exit -d, --debug Print debug information -V, --version Print version -i, --install-steps string For example 1,3-5,7- -c, --clear-steps string For example 1,3-5,7- -f, --config-file string Read in a config file -l, --load-balance Load balance modeSteps: 1. ssh authorization 2. install load balancer (default: dns for clustered ocp, none for single ocp) 3. install ob server 4. init ocp metadb 5. install temp OCP 6. install obproxy 7. install OCP 8. POSTCHECK 9. install OMS (optional) 10. install ODC (optional)# 安装 oms[root@observer00 t-oceanbase-antman]# ./install.sh -i 9# 删除 oms[root@observer00 t-oceanbase-antman]# ./install.sh -c 9# 删除并再次安装 oms[root@observer00 t-oceanbase-antman]# ./install.sh -c 9 -i 9
安装完成后到目标端机器上查看 oms 容器镜像
[root@observer04 ~]# docker exec -it oms bash[root@observer04 root]#exit[root@observer04 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES50448881f7b9 acs-reg.alipay.com/oceanbase/oms-all-in-one:feature_2.1.0 "/bin/sh -c '/usr/bi…" 12 days ago Up 42 minutes oms[root@observer04 ~]# docker exec -it oms bash[root@observer04 root]#
oms 容器参数文件修改
oms 容器启动的配置文件在 /home/admin/conf/config.yaml
里。
由于当前 antman 版本对 oms2.1 还没有完美支持,所以需要手动添加几个配置。后续 antman 版本会自动添加。
# vim home/admin/conf/config.yaml# 添加 ocp 版本ocp_version: '2.5'# 添加时序数据库配置,⽆需修改tsdb_service: 'INFLUXDB'tsdb_enabled: true# # 部署 INFLUXDB 的机器地址,按照实际环境修改tsdb_url: '172.23.152.226:8086'

重启 oms 容器,然后进入容器重新运行初始化脚本 docker_init.sh
。
# #重启 oms 容器[root@observer04 ~]# docker restart oms# #查看 oms 容器并进入[root@observer04 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES50448881f7b9 acs-reg.alipay.com/oceanbase/oms-all-in-one:feature_2.1.0 "/bin/sh -c '/usr/bi…" 12 days ago Up About an hour oms[root@observer04 ~]# docker exec -it oms bash[root@observer04 root]## #运行初始化脚本[root@observer04 root]#sh docker_init.sh<.....>
oms 使用
访问 oms 服务器的 http://172.26.154.57/
输入默认用户名和密码:admin admin
。
进入后首先右上角修改默认密码。

这个版本的 OMS 做的体验非常好,上面有介绍和帮助文档。

创建数据源
既然是将 OB 的增量同步到 Kafka,显然要为 OB 和 Kafka 分别配置一个数据源。

这里没什么难度。界面提示很友好。

新建数据同步任务

选择源端要同步的表。

选择目标端 Kafka 的 topic 。

选择也好同步的 DML 类型和同步起始位点(不能太早)。


启动任务后就是前面查询界面了。
数据同步任务监控
然后去压测源端 OB 集群,使用 benchmarksql 做 tpcc测试。这里我用一点压力。

同步性能曲线,可以看延时和流量

注意: 这个页面里的延时是后台 10s 检测一次,所以有个 10s 左右的误差。(产品后面会改进)。
影响延时的因素有:OB 压力、kafka 压力、网络延时、大事务。在一定压力下,秒级延时(5s 以内)不是问题。
查看 kafka 消息数据
[root@observer00 ~]# cd kafka_2.12-2.1.0[root@observer00 kafka_2.12-2.1.0]# bin/kafka-console-consumer.sh --bootstrap-server 172.23.152.226:9092 --topic tpcc_topic --from-beginning

每个消息是 json 格式,下面是示例。
[root@observer00 kafka_2.12-2.1.0]# echo '{"data":{"OL_DELIVERY_D":"2021-02-22T11:44:28.916"},"meta":{"posttime":"2021-02-22T11:44:29","op":"upd","size":142,"time":"2021-02-22T11:44:29","idx":"21/142","seq":21,"table":"TPCC.BMSQL_ORDER_LINE","rowid":"TPCC.BMSQL_ORDER_LINE-883\u00011\u00012552\u000111","trans":"{hash:15634550869989400445, inc:390180696, addr:\"172.23.152.225:2882\", t:1613965468924941}","scn":"161396546928700023"},"key":{"OL_O_ID":2552,"OL_DIST_INFO":"nuJVNz75NYkJRmAup3qDU2TQ","OL_W_ID":883,"OL_NUMBER":11,"OL_SUPPLY_W_ID":883,"OL_DELIVERY_D":null,"OL_QUANTITY":5,"OL_I_ID":44857,"OL_AMOUNT":1373.71,"OL_D_ID":1}}' |jq

运维监控
OMS 将 OB 同步到 Kafka 相比数据库同步而言,还是很简单的。组件也简单,只有 Store 和 Connector 组件。

这里也提供了 Store 和 Connector 的运维界面。查看日志、延时、重启操作等等。
机器列表

Store 运维

Connector 运维

查看此前的运维操作

参考
OceanBase 迁移服务 V2.1.0 运维指南
OceanBase 迁移服务 V2.1.0 产品手册
OceanBase 迁移服务 V2.1.0 部署指南
https://www.oceanbase.com/docs/oceanbase-migration-service/oms/V2.1.1/what-is-oceanbase-migration-service




