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

「更易用的OceanBase」| 平台升级改造记-Oceanbase生态工具OMS与OCP评测

原创 大数据模型 2022-11-22
2651

前文

笔者记忆中天猫诞生之前,主要是因为淘宝出现了大量的假货,良莠不齐。2012年,天猫作为B2C(Business-to-Consumer,商业零售)。其整合数千家品牌商、生产商,为商家和消费者之间提供一站式解决方案。提供100%品质保证的商品,7天无理由退货的售后服务,以及购物积分返现等优质服务。

至今,世人皆知天猫平台,它是一个时代的游戏规则倾覆者。本文将假设一个跨境电商场景,使用OceanBase工具进行数据迁移与管理,市面上有很多受众小、流量不大却有固定的忠诚的活跃用户的平台网站系统。互联网大厂一枝独秀,他们并没有加盟大平台,而是选择百花齐放,精心营造自己的地方特色。

从本文可以得到以下收获内容。

  • 异构系统迁移的系统性解决方案。
  • 数据迁移系统平台和和监控管理平台必需具备的能力
  • OMS的安装步骤及注意事项。
  • OCP的安装步骤及注意事项。
  • OCP与OMS的亮点及建议

项目背景

我们假设有一家跨境电商平台,这个平台是基于开源系统mall4j基础上二次开发的系统,旗下拥有PC、App、小程序、微商城、微分销等多个终端渠道,全面覆盖中国商家各阶段、各细分场景的需求,为企业搭建一个大型进口跨境电商平台。

随着业务发展,该公司也需要技术转型和升级持续满足集团的业务需求,其中某关键业务平台的数据底座用的是Mysql 5.6,目前是主备高可用模式,技术备选方案是分布式数据库,该平台所有的应用、数据将会迁移到一个分布式数据库上面。至于选择哪一个分布式数据库? 都说外国的月亮格外圆,该平台的架构师测试了CockRoachDB数据库。测试结果数据,天杀的2pc让某某工程犹豫不前,而且额外学习成本使某某工程师重新考虑技术选型。

分析原因,某某平台承载跨境电商的业务 ,面向的多是中产或者猎奇心理的青少年消费群体,流量说大不大,说小不小。当前业务状态,只有高峰流量必须要借助分布式数据库能力,而低峰时则是一个单机数据库就能满足。在流量低峰时使用分布式反而读写放大,原因是2PC的网络协商反而加大了延迟,而且CockRoachDB的postgresql风格对某某工程师也是不菲的学习成本。

系统分析及需求

综合考虑,某某平台选择了OceanBase作为首选,原因如下。

  • OceanBase是一款集中式又分布式的数据库,某某平台可以初期借助OceanBase的集中特性可以保障系统性能响应速度,到了后期也可以通过分布式分摊流量。
  • OceanBase兼容Mysql,减少工程师的学习成本。
  • OceanBase有强大的技术支持,OceanBase有独立运营的公司。
  • OceanBase核心代码开源而且有商业版。
  • OceanBase有支付宝的巨大成功案例,经过业界双11高峰流量的试验。

可行性阶段

确定产品后,接下来是产品可行性阶段,某某平台首先在基础设施开辟一个OceanBase集群中,所有的应用程序和部分数据转移到新平台上面 。 这个阶段会持续3个月至6个月,时间长短由工程师的实力决定。

系统迁移阶段

可行性阶段结束后是系统迁移阶段 ,OceanBase正式上生产,选择方案有依然由MySQL主导但是逐步由OceanBase接替,如果有足够信心,也可能直接让OceanBase上线。 **不管哪个选择, 都必须把生产全部数据迁移到OceanBase,这是系统迁移阶段最重要的事情。**OceanBase可能首先会支撑某某平台部分业务,在确定业务运行健康没有问题,再接其它业务,最后把所有的业务接纳起来。

系统迁移方案考虑因素

异构系统的数据迁移,为了保证数据迁移的准确性和完整性,系统迁移方案上会有存量数据迁移和增量数据迁移两种选择。

存量数据迁移这个方案不考虑,因为存量数据需要停服,在指定的时间内把服务器停掉,外面无法对业务进行访问,然后把旧应用所有的数据都加载到新平台上。对电子商务平台停服是一场灾难,每秒钟流失的都是交易数额,不可取!

增量数据迁移不需要停服,但是可能需要完成较多的接口联调和程序适配,包括旧应用改造和相关声明配置,增量数据迁移适用于零宕机的逐步替换的平台更替业务场景。

当源系统和目标系统达到数据一致性的时候,后续如何保障源系统和数据的一致性?业内有6种方案保障两边系统的数据同步一致性。

全量加载与原来存量数据迁移相似,都是把源系统数据导出为一定的格式,目标系统再把数据导入,步骤思路简单清晰,但是加载速度慢,而且特别容易有数据重叠。

时间戳增量是源系统包括时间戳的字段,时间戳是往前更新、不重复的,这样目标系统就能对其它识别并捕捉,这样的加载速度也不会很快,因为数据可能是通过insert into的方式入库的,而且断开的时候还有可能发生重叠。

日志表增量加载,以源系统的某个标识号,例如ID或者指定的某个符识号,也可以通过触如器或者存储过程的方式 ,运行后填充到目标系统中。

数据库交易日志,最流行的数据同步方式,目标系统通过连接识别源系统的日志变化,将变化涉及的数据同步到目标系统。例如识别Mysql的binog,通过CDC来解析数据库的日志信息,来检测数据库中表结构和数据的变化,由于log的信息不多,传输的速度极快,而且反复运行也不会操作数据重叠。

消息增量,消息增量是一种推方式,源数据变化后,马上同步到目标系统,这里的识别是由源系统进行的,源系统可能是通过WAL LOG或者内部的方式识别数据的变化后,发起覆盖目标系统的行为。

方法 对源系统的要求 复杂度 加载速度 重叠
时间戳增量 源系统中的变化由系统日期和时间戳标识 普通
日志表增量加载 捕获系统中的变化并记录在日志表 普通
数据库交易日志 在交易日志记录数据库变化
消息增量 源系统中变化实时信息 极高
全量加载 没有更改标识符,抽取全表数据并比较判断改动

某某平台升级改造移动新平台,希望新平台能提供以下能力。

  • 系统迁移过程希望尽可能少的应用改造和程序适配

  • 数据源表和目标系统表的可视化管理。

  • 源系统与目标系统之间的响应时间不高于0.5秒

  • 数据同步过程中可以有任务状态跟踪。

  • 数据同步后的数据稽核校验,保障两边数据一致性

  • 假设数据有差异,通过日志能追溯记录

  • 统一平台具有图形化清晰易懂的界面,显示性能关键核心指标【CPU、内存、硬盘、TPS、QPS、IOPS】

  • 统一平台具有图形化清晰易懂的界面,对软硬件的管理能力,包括数据库的启动、停止,添加节点、增加节点、离线管理维护等各种功能 。

  • 统一平台有多个用户多个角色的权限管理能力。

  • 统一平台提供java\python\go等常见应用的API接口,提供开发者使用。

系统环境资源信息

当前某某公司已经在平台上已经布署了一套高可用的mysql集群, 主IP是xx.xx.xx.65 。OceanBase的集群是 xx.xx.xx.143、xx.xx.xx.221 、xx.xx.xx.239 ,现在准备在 xx.xx.xx.21上面布署OceanBase自带的生态工具OMS和OCP,把旧平台的数据迁移新系统, 并且把集群管理起来。

角色 IP 作用 端口
mysql xx.xx.xx.65 旧平台数据库5.6.51 3306
ocp\oms xx.xx.xx.21 中控管理节点 8088、8080、8089
influxdb xx.xx.xx.21 协助oms服务 8086
OBpoxy\OBserver xx.xx.xx.143 OceanBase3.1.4 CE 2881、2882、2883、2884
OBserver xx.xx.xx.221 OceanBase3.1.4 CE 2881、2882
OBserver xx.xx.xx.239 OceanBase3.1.4 CE 2881、2882

OMS安装步骤及注意事项

OceanBase 迁移服务(OceanBase Migration Service,OMS)社区版是 OceanBase 社区版提供的支持同构或异构数据源与 OceanBase 社区版之间进行数据交互的服务,具备在线迁移存量数据和实时同步增量数据的能力。

OMS 社区版提供可视化的集中管控平台,您只需要进行简单的配置即可迁移数据。OMS 社区版旨在帮助您低风险、低成本、高效率地实现同构或异构数据源向 OceanBase 社区版进行实时数据迁移和数据同步

更多信息见 https://www.oceanbase.com/docs/community-oms-cn-10000000000818661

1.png

前置条件

  1. 安装 Docker,部署机需要提前安装 Docker 软件,要求不低于 1.13 版本。xx.xx.xx.21 已经安装docker 17.12.0-ce
  2. 准备数据库,用于存储 OMS 社区版的元信息,OMS 社区版运行时需要一个数据库实例,用于持久化其元信息。该数据库可以是 MySQL 或 OceanBase,建议您使用 OceanBase 社区版。为了方便,我把元数据管理安装 OceanBase集群上
  3. 确保以下端口是开放的

2.png

正式安装

下载OMS安装介质

wget https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/oms/3.3.1_CE/oms_3.3.1-ce.tar.gz 安装镜像入库 docker load -i oms_3.3.1-ce.tar.gz

设置配置文件,主要是meta的IP、用户名、密码、数据库,注意用户有创建数据库和创建用户的权限,我在这里选influxdb数据库。

以下配置文件其中oms_ 参数是元数据库的信息,cms_参数是OMS中控管理信息,需要根据自己的环境重新自定义,drc_参数默认不变,tsdb_可以选配,这里笔者根据自己的还是做了安装。

config.xml

oms_meta_host: xx.xx.xx.143 oms_meta_port: 2883 oms_meta_user: root@tenanttpcc#obcluster oms_meta_password: XXXXX drc_rm_db: oms_rm drc_cm_db: oms_cm drc_cm_heartbeat_db: oms_cm_heartbeat drc_user: drc_user_name drc_password: 'xxxxx' cm_url: http://xx.xx.xx.22:8088 cm_location: 100 cm_region: cn-anhui cm_region_cn: 安徽 cm_is_default: true cm_nodes: - xx.xx.xx.22 tsdb_service: 'INFLUXDB' tsdb_enabled: true tsdb_url: 'xx.xx.xx.22:8086' tsdb_username: oms tsdb_password: influx-mos

运行docker_oms_init.sh程序,正式运行安装,OMS_HOST_IP是目标IP,CONTAINER_NAME是容器名称,IMAGE_TAG是镜像名称,-v 前面是宿主机的路径需要改变XXX的路径,后面是容器的路径不需要修改。

OMS_HOST_IP=xx.xx.xx.22 CONTAINER_NAME=oms_henley IMAGE_TAG=feature_3.3.1-ce docker run -dit --net host \ -v /XXX/oms/config.yaml:/home/admin/conf/config.yaml \ -v /XXX/oms/oms_logs:/home/admin/logs \ -v /XXX/oms/oms_store:/home/ds/store \ -v /XXX/oms/oms_run:/home/ds/run \ -e OMS_HOST_IP=${OMS_HOST_IP} \ --privileged=true \ --pids-limit -1 \ --ulimit nproc=65535:65535 \ --name ${CONTAINER_NAME} \ reg.docker.alibaba-inc.com/oceanbase/oms:${IMAGE_TAG}

确认容器是否存在,并登陆容器

[root@hybriddb03 ob]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 266e553bef75 reg.docker.alibaba-inc.com/oceanbase/oms:feature_3.3.1-ce "/bin/sh -c '/usr/bi…" 3 days ago Up 3 days oms_henley [root@hybriddb03 ob]# docker exec -it oms_henley bash 登陆容器后,执行 [root@hybriddb03 ob]#bash /root/docker_init.sh 执行命令后,初始化操作的流程如下: 1. 在元数据库中初始化数据。 2. 生成各组件的配置文件。 3. 重启所有组件。 4. 初始化 OMS 社区版资源标签和资源组。

成功的OMS,最后脚本会输出服务接口联调成功的信息。

3.png

也可以进入容器内部测试各个组件是否正常工作

[root@hybriddb03 ~]# supervisorctl  status
nginx                            RUNNING   pid 1618, uptime 2 days, 23:52:46
oms_console                      RUNNING   pid 1621, uptime 2 days, 23:52:36
oms_drc_cm                       RUNNING   pid 1749, uptime 2 days, 23:52:25
oms_drc_supervisor               RUNNING   pid 163108, uptime 2 days, 12:33:03
sshd                             RUNNING   pid 2326, uptime 2 days, 23:52:05

使用OMS

4.png

第一次登录, 默认信息 user: admin password: aaAA11__ ,输入信息后它会要求你更改密码重新登录 ,界面如下

5.png

因为是把mysql的数据往OceanBase里面的同步,需要创建三个数据源

mysql数据源

定义数据源mysql备库

6.png

定义数据源mysql主库

image.png

如果是增量迁移 ,定义mysql的时间要选 择主库,my.cnf加入以下内容,并重启mysql,

binlog_format=ROW log-bin=mysql-bin

确认mysql启动binlog

mysql> show variables like 'binlog_format%'; 
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'log-bin%';
Empty set (0.01 sec)

mysql> show variables like 'log_bin%';
+---------------------------------+--------------------------------+
| Variable_name                   | Value                          |
+---------------------------------+--------------------------------+
| log_bin                         | ON                             |
| log_bin_basename                | /var/lib/mysql/mysql-bin       |
| log_bin_index                   | /var/lib/mysql/mysql-bin.index |
| log_bin_trust_function_creators | OFF                            |
| log_bin_use_v1_row_events       | OFF                            |
+---------------------------------+--------------------------------+
5 rows in set (0.00 sec)

定义数据源OceanBase

7.png

新建迁移项目

8.png

全量迁移的选项

9.png

增量迁移的选项

image.png

10.png

将会在目标系统创建56个表。

12.png

这里确定同步的动力输出

13.png

预检查红色的报错必须更正,才能进入 下一步

14.png

遇上时间不同步的,可以通过 ntpdate ntp.tencent.com 快速排查。

15.png

预检查

全部绿色,正式运行两边的数据同步

16.png

进入结构迁移中,OceanBase创建相关的表

17.png

进入全量数据迁移中

18.png

数据校验稽核

数据校验稽核中

19.png

20.png

迁移结束

同步完成,输出同步检查报告

21.png

OCP安装步骤及注意事项

OceanBase 云平台(OceanBase Cloud Platform,OCP)伴随 OceanBase 数据库而生,是一款以 OceanBase 为核心的企业级数据库管理平台。

OCP 不仅提供对 OceanBase 集群和租户等组件的全生命周期管理服务,同时也对 OceanBase 相关的资源(主机、网络和软件包等)提供管理服务,让您能够更加高效地管理 OceanBase 集群,降低企业的 IT 运维成本。

前置条件

  • 部署 OCP 的宿主机上已安装 Docker,xx.xx.xx.21 已经安装docker 17.12.0-ce
  • root可以无密钥登陆

正式安装

下载OCP介质安装介质

wget https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/download-center/opensource/ocp/3.3.0_CE_BP1/ocp-3.3.0-ce-bp1-x86_64.tar.gz 解压得到以下文件, [root@xxx03 ocp-3.3.0-ce-bp1-x86_64]# ll ocp ocp_installer.sh ocp-installer.tar.gz ocp.tar.gz

OCP有两种方式

一种是黑屏安装,就是把已知道的参数配置写到一个XML里面,运行程序就会进行安装布署,前提你必须对集群很熟悉。

一种是交互安装,你会得到交互式的WEB界面,你填入相关的参数按下一页,最后点击运行。

下面介绍的是交互安装,ocp_installer.sh是安装程序

./ocp_installer.sh launch -i ocp-installer.tar.gz -o ocp.tar.gz -k /root/.ssh/id_rsa -p 5000

运行后

[root@hybriddb03 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5b69d2922135 reg.docker.alibaba-inc.com/ocp2/ocp-installer:3.3.0-x86_64 "bash start.sh" 3 days ago Up 3 days 0.0.0.0:5000->80/tcp wonderful_austin

通过浏览器进入http://xx.xx.xx.:5000 安装界面

22.png

23.png

输入目标OCP相关信息,这里我选择root private key免钥登录。

24.png

这里我选 择把metabase布署 在ob上面

25.png

确定容器的CPU、内存规格

26.png

27.png

验证是否安装成功,可以确认元数据库是否已经建立,并且执行以下命令

[root@hybriddb03 ~]# curl --user admin:aaAA11__: 'http://xx.xx.xx.xx:8080/api/v2/info' {"status":401,"successful":false,"timestamp":1669048056378,"errMsg":"Bad credentials"}

使用OCP

登录

28.png

默认信息 user: admin password: aaAA11__

托管集群

29.png

点击接管集群

30.png

选择连接方式

点击接管集群OBProxy, 输入 IP、端口、集群名、root@sys密码,

root@sys密码可能默认设置为空,首先以root@sys的登录,运行命令alter user ‘root’ identified by ‘xxxx’;

预检查

预检查主要为监控目标打上标识,这里会把监控对象做一个基本的定义

31.png

管理需求,设置节点对应的机型

32.png

管理需求,定义机型配置

33.png

配置节点对应的机型。

34.png

配置目标管理机器IP的用户名和密码

托管执行结束

35.png

托管完成的信息

36.png

接管成功后状态

37.png

监控管理

查看集群工作状态

38.png

托管的节点都会装上ob_agent [root@hdp2 ~]# netstat -tnlpu | grep ocp tcp6 0 0 :::62888 :::* LISTEN 8437/ocp_mgragent tcp6 0 0 :::62889 :::* LISTEN 8438/ocp_monagent

评测OCP与OMS

亮点

  • OMS定位是一个数据迁移管理系统,最基本的一个功能作用从外到内的数据复制【数据同步】,就是把其它源系统数据导入到自家的OceanBase上面,从数据源定义、数据结构转换、数据迁移、数据校体验来看有清晰的轨迹线,在任务执行结束后也可以追踪溯源。
  • 除了支持数据同步,OMS也支持数据迁移即从内到外的数据复制,即把OB的数据转移到其它系统,以便可以和其它数据融合,目前暂支持Kafka和RockMQ。
  • 整个数据流转过程较注重资源管理调度、预检查、审核、校验的细节。
  • OMS支持数据迁移和数据同步相关的数据库参数管理,可以知道数据迁移与哪些关键数据库参数配置有关。
  • OMS走在主流技术前沿 ,既支持全量迁移,也支持增量迁移,这是某某平台非常满意的地方,这里点赞。
  • OCP定位监控管理系统,支持OceanBase集群的安装、管理、运维等基本功能,OCP满足可视化安装集群需求的基础上,还实现了托管集群,能够把非OCP创建的OB集群也纳入进来管理 ,这里值得称赞。
  • OCP支持对数据库日志检索,能对排查ob日志发生的所有的事件
  • OCP支持对目标数据库参数的管理维护。

建议

  • 安装的体验性,OCP和OMS前提必须安装docker,相对来说还是重量级了,理想中轻量级的生态工具最好是能够一键步署,例如yum install ocp oms 的方式。近期内不能做到的话,尽量屏蔽简化OCP与OMP的安装脚本,尽量输入简单并显示安装中的执行过程,OMS安装oms_drc_cm报错error, 笔者费了好些功夫才定位到 容器里面的日志报错 OCP metadb and server time is not in-sync: ,OCP安装卡在执行界面,一直没有返还,笔者定位原因发现是不小心填写了数据库ocp-meta,错误的数据库名无法创建,但是程序没有任何报错提示。
  • 数据库参数多版本管理,目前OCP和OMS仅显示当前的参数,未必单一参数可以适应所有的情景,而且应对不同状况需要反复调整,建议参数的管理以v1、v2、v3加时间戳的方式进行管理。
  • OMS有一个地域配置,这个我在官网上翻查了一下,觉得没有什么必要,感觉是ob的特别之处,也许与安全有关系, 用不上的东西就是麻烦。
  • OCP监控总界面单调,全部是折线图,内容欠丰富,没有提纲的作用,无法让人对总体性能状况宏观全局,最好能做到数字图、柱状图、热力图各种混合,五颜六色、楚河汉界、泾渭分明,现在感觉还离得远。
  • OCP目前的对节点和服务组件管理维护稍薄弱,未来方向OCP按理可以做到 各个服务件的启停、安装、维护,像 软件包的上传功能,笔者认为不需要什么上传,OCP安装好就应该内置所有的软件包,然后提供一系列清单让用户选配,选好安装就行。

结尾

Oceanbase的官方文档有一定质量的提升,笔者是通过社区文档的引导完成OMS和OCP的安装的。

Oceanbase的发展变化有目共睹,最近发布了OceanBase 4.0 社区版,小鱼给工程师更友好的安装体验、快速尝新,我认为Oceanbase此举最接地气。毕竟,mysql已经像电力饮水一样自然,工程师随手可得,没有几个大站能做到天猫的流量规模,有些中小企业发展有限,只需要某某级别产品需求就够了,也许民间现状就是这样。 Oceanbase要提供更好的易用性,才能被工程师接受,才能撼动国外数据库种下的群众根基。可用性方面,我发现Oceanbase已经有一些超融合的东西 ,只有商业版才能提供的OAT,通过OAT可以集成OMS、OCP、OMA。

产品可用性是一个永远的话题,而安全性与可用性是敌对关系,两者此消彼长,很难做到两者兼而容之共存,小鱼后面还可以考虑小小鱼,商业版肯定安全级别最高,而社区版需要的是拿来就用。数据库本身是一个漫长的事业,Oceanbase任重道远,致敬国产数据库路上的每一位实干者。

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

文章被以下合辑收录

评论