概述
本文主要接前篇文章,继续分享 OB 企业版数据同步产品 OMS 的在小内存虚拟机环境下的部署实践。
OMS 简介
产品简介
OMS 产品起源于蚂蚁内部去ORACLE 去 MySQL 项目,擅长处理大量 ORACLE/MySQL 数据到 OceanBase 的迁移和实时同步,数据校验、同步切换为反向同步等等。在对外商业化中又逐步支持了多种版本的 ORACLE和MySQL,支持 DB2 的 LUW 平台的同步。
随着 OB 面向全行业推广,客户数据库种类繁多,需求也不完全一样,同时客户还要求数据同步可回滚,支持双向同步,有高可用等。这对数据同步提出很大的挑战。传统的数据库同步产品短时间内还不能很好的满足这一需求,因此还是只能依靠 OB 官方数据同步产品 OMS。OMS 在实际 OB 项目中主要的使用案例有 ORACLE/MySQL 到 OB 的双向同步(只激活一个同步方向,可以反向切换。后面都类似)、DB2 (LUW 平台,ORACLE模式)到 OB(ORACLE租户)的双向同步、OB 下分库分表 到 OB 单表(分区表)的单向汇聚同步、OB 到 OB 的双向同步(用于数据仓库、OB 大版本逻辑升级等)。
[root@server064 t-oceanbase-antman]# docker images |egrep "influxdb|oms"
reg.docker.alibaba-inc.com/oboms/oms-all-in-one feature_4.0.1-bp1 2d01c8eea96e 3 weeks ago 4.39GB
influxdb 1.8 c15aefdd926b 2 years ago 307MB
组件概念介绍
下面是部署和使用过程中会用到的概念,这里复制官网文档的介绍。
分类 | 名词 | 解释 |
管控组件 | Ghana | OMS 控制台。 |
CM | OMS 的集群管理服务。 | |
Supervisor | OMS 的代理服务,负责接收集群管理服务下发的指令并执行。 | |
增量解析组件 | Store | 用于对数据库事务日志进行拉取解析,并对解析后的日志记录按统一格式存储。下游可以从 Store 中以一致的方式消费增量数据,无需关心不同数据库间日志格式差异。 |
LogProxy | OceanBase 数据库日志代理。 | |
框架组件 | Incr-Sync | 增量同步组件:从增量拉取组件中请求增量数据,并根据用户配置的同步对象进行数据过滤,然后在保证事务时序性及事务一致性的前提下,将日志记录同步至目标实例。 |
Full-Import | 全量导入组件:负责源库表对象中存量数据的迁移和部分增量数据的同步。 | |
Full-Verification | 全量校验组件:负责迁移表中的行记录进行全字段校验,并针对不一致的数据生成订正语句。 | |
其它 | MetaDB | 基于容器部署的 OceanBase 数据库服务,并内置了 OceanBase 数据库代理,便于外部直接访问。 MetaDB 可以用于 OCP、ODC 和 OMS 等产品的元数据存储。 |
InfluxDB | 基于容器部署的时间序列数据库服务,用于存储 OMS 的数据传输项目的监控数据。 |
架构原理
OceanBase 迁移服务(OceanBase Migration Service,OMS)连接的两端分别是待迁移的源业务数据库和目标端 OceanBase 数据库。
下图为 OMS 的系统架构图。
管理控制台:进行一站式迁移调度。 DBCat:数据对象采集和转换组件。 增量拉取组件 Store、增量同步组件 Incr-Sync、全量导入组件 Full-Import 和全量校验组件 Full-Verification。 基础服务组件:集群管理、资源池管理、高可用组件和元数据管理等多个组件,以保证迁移模块的高效调度和稳定运行。
OMS 部署
部署资源评估
修改 ANTMAN 脚本
69 antman_log "create OMS meta tenant"
70 #create oms meta tenant
71 mysql -uroot -P$MYSQL_PORT -h${ZONE1_RS_IP} -Doceanbase -p${CLUSTER_SYS_PASS} -e "CREATE RESOURCE UNIT IF NOT EXISTS oms_unit max_cpu 2, max_memory '2G', max_iops 128,max_disk_size
'500G', max_session_num 10000, MIN_CPU=2, MIN_MEMORY= '2G', MIN_IOPS=128;"
select svr_ip, zone, cpu_total, cpu_assigned, (cpu_total - cpu_assigned) cpu_free, mem_total, mem_assigned, (mem_total - mem_assigned) mem_free
from __all_virtual_server_stat ;
171 antman_log "start influxdb: docker run --net=host -v ${OMS_INFLUXDB_PHISICAL_DIR}:/var/lib/influxdb ${tsdb_env} --cpu-period 100000 --cpu-quota $OMS_INFLUXDB_DOCKER_CPUS"00
000" --memory=$OMS_INFLUXDB_DOCKER_MEMORY --name=oms-influxdb --restart on-failure:5 ${OMS_INFLUXDB_IMAGE_REPO}:${OMS_INFLUXDB_IMAGE_TAG}"
172 docker run -d --net=host -v ${OMS_INFLUXDB_PHISICAL_DIR}:/var/lib/influxdb ${tsdb_env} --cpu-period 100000 --cpu-quota $OMS_INFLUXDB_DOCKER_CPUS"00000" --memory=$OMS_INFLUX
DB_DOCKER_MEMORY --name=oms-influxdb --restart on-failure:5 ${OMS_INFLUXDB_IMAGE_REPO}:${OMS_INFLUXDB_IMAGE_TAG}
修改 ANTMAN 配置文件
70 ############ 如果准备部署OMS,请填写OMS基本配置 Edit Configuration Of OMS When Deploying OMS ############
71 OMS_IP_LIST=10.0.0.65 # 20210918 OMS 3.1 以上支持高可用部署,可填写多个ip,使用","分隔, eg: 192.168.1.10,192.168.1.20, influxdb只安装到第一台
72 OMS_DOCKER_IMAGE_PACKAGE=oms.feature_4.0.1-bp1.20230411111注意,增加了对 Influxdb 内存的参数 OMS_INFLUXDB_DOCKER_MEMORY 。
6.tar.gz
73 OMS_IMAGE_REPO=reg.docker.alibaba-inc.com/oboms/oms-all-in-one
74 OMS_IMAGE_TAG=feature_4.0.1-bp1
145 ############ OMS 高级配置,基本不用修改 OMS ADVANCED SETTINGS ############
146 OMS_PORT=8088 # Do not modify!
147 OMS_METADB_USER=root
148 OMS_METADB_TENANT=oms_tenant
149 OMS_METADB_DBNAME=oms_meta
150 OMS_CONTAINER_NAME=oms
151 OMS_DOCKER_CPUS=12
152 OMS_DOCKER_MEMORY=18G
153 OMS_INFLUXDB_DOCKER_CPUS=2
154 OMS_INFLUXDB_DOCKER_MEMORY=512M
155
156 ## oms 2.x 需要配置挂载目录及influxdb相关
157 OMS_PHYSICAL_LOG_DIR=/data/oms/oms_logs
158 OMS_PHYSICAL_RUN_DIR=/data/oms/oms_run
159 OMS_PYHSICAL_STORE_DIR=/data/oms/oms_store
160
161 ## 是否在OMS>=2.1时自动安装influxdb, 2.1之前版本会自动忽略
162 OMS_INSTALL_INFLUXDB=TRUE
163 OMS_INFLUXDB_PHISICAL_DIR=/data/oms/influxdb
164 OMS_INFLUXDB_IMAGE_PACKAGE=influxdb_1.8.tar.gz
165 OMS_INFLUXDB_IMAGE_REPO=influxdb
166 OMS_INFLUXDB_IMAGE_TAG=1.8
ANTMAN 自动化部署 OMS
检查 OMS 和 Influxdb 端口,加载相应镜像文件。 校验 OMS 配置文件 config.yaml
。创建 OMS 元数据库。 创建 OMS 各组件的配置文件。各个组件使用 supervisor
服务管理。重启 OMS 所有组件 (大约需要两分钟,CPU 慢的时候可能会更久,请耐心等待)。 初始化 OMS 资源标签和资源组。 完成容器初始化,将 OMS Console 服务设置为开机自动启动。 提示全部初始化步骤执行成功。
部署后检查
初始用户名: admin
初始密码: aaAA11__
[root@OMS ~]# docker exec -it oms bash
[root@OMS ~]# supervisorctl status
nginx RUNNING pid 40, uptime 7 days, 21:47:41
oms_console RUNNING pid 42, uptime 7 days, 21:47:41
oms_drc_cm RUNNING pid 41, uptime 7 days, 21:47:41
oms_drc_supervisor RUNNING pid 437, uptime 7 days, 21:47:29
sshd RUNNING pid 39, uptime 7 days, 21:47:41