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

OceanBase 同步到 Kafka 参考

1457

     本文分享怎么使用 OMS 将 OB 的数据增量同步到消息中间件产品(Kafka)。OMS 产品也有相关的部署文档、运维文档。

软件包

  • antman 软件包 :t-oceanbase-antman-1.3.6-1919351.alios7.x86_64.rpm

  • oms 镜像包:oms.feature_2.1.0.202102081119.tar.gz

  • influxdb 镜像包:oms.feature_2.1.0.202102081119.tar.gz

influxdb 是时序数据库,用于展示 oms 同步到 kafka 时的延时。

  • zookeeper 软件包:apache-zookeeper-3.6.2-bin.tar.gz

  • kafka 软件包: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技术闲谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论