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

OB 企业版数据同步 OMS 部署实践

1485


概述

本文主要接前篇文章,继续分享 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 大版本逻辑升级等)。

 
OMS 的迭代开发也非常快,不断的有新的版本推出。具体版本可以联系官网技术支持获取。本文测试用的版本是 4.0.1 BP1。不同版本有些功能点可能不完全一样。

 

    [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 的系统架构图。


    OMS 内部主要包含:
    • 管理控制台:进行一站式迁移调度。
    • DBCat:数据对象采集和转换组件。
    • 增量拉取组件 Store、增量同步组件 Incr-Sync、全量导入组件 Full-Import 和全量校验组件 Full-Verification。
    • 基础服务组件:集群管理、资源池管理、高可用组件和元数据管理等多个组件,以保证迁移模块的高效调度和稳定运行。
     
     

    OMS 部署

    OMS 官网推荐的部署方式是使用 OAT 工具(WEB 应用),可以通过页面上点击操作。OAT 自身部署以及部署 OMS 时对服务器资源要求一般比较高。如果服务器资源内存大于 128G ,可以使用 OAT 部署。
    本文测试用的服务器内存只有 24G 不到,选择在命令行下使用 ANTMAN 工具手动部署。
     

    部署资源评估

    OMS 部署成功时会包含一个元数据库,一个存放OMS同步性能数据的数据库 influxdb 以及一个OMS 应用容器。
    由于是测试,OMS 同步链路不会很多,因此元数据库只需要一个 2C2G的 MySQL 租户即可。Influxdb 容器使用 512M 内存即可。
    OMS 应用容器的资源取决于以后的数据同步链路数以及链路的同步任务。不同的任务模块对资源起点的要求不一样,同时数据同步的数据量,同步的并发数对资源的需求也不一样。下面是官网对不同任务模块给出的最低要求。
     
    组件
    CPU(C)
    内存(GB)
    Disk(GB)
    备注
    基础服务(共用)
    1
    1
    100

    管控服务(共用)
    4
    7
    100

    数据增量 Store(租户级别共用)
    4
    8
    NA
    Disk 取决于数据库端增量日志的生产速度和 OMS 中增量数据的保存时间。
    数据增量同步(每条链路)
    2
    8
    5

    全量数据同步/校验(每条链路)
    2
    4
    5
    全量数据同步和校验不会同时启动
    总计
    13
    28
    300+

     
    如果需要同步的数据量非常大,以及数据增量也非常大,则需要提升相应组件的各项资源,这样在做数据同步的时候可以提升内部并发数,从而提升数据同步效率。
     

    修改 ANTMAN 脚本

    OMS 元数据库是 MySQL 租户,使用 ANTMAN 部署时会默认从 OCP 元数据库里分配。ANTMAN 默认创建 OMS 元数据库的租户资源有点大(2C5G),这里我改为 2C2G。
       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;"


      判断可分配内存资源 SQL 如下:
       
        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 ;


        此外,原有的脚本在部署 Influxdb 时没有针对内存做限制,里也需要修改一下脚本,增加内存限制。内存参数后面在配置文件中增加。
         
          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 配置文件

           
          主要是修改 Influxdb 和 OMS 容器资源的大小以及镜像文件、容器映射 Volume 目录等。
             
            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

            部署很简单,部署命令:sh install.sh -i 9 。也可以清理掉,清理命令:sh install.sh -c 9 。
             
            OMS 部署提供详细的日志记录,从日志里可以看出 OMS 部署的主要步骤。
             
            简单提取一下日志中提到的几个主要的安装步骤,理解各个步骤的作用,如果报错针对性的排查:
            • 检查 OMS 和 Influxdb 端口,加载相应镜像文件。
            • 校验 OMS 配置文件  config.yaml
            • 创建 OMS 元数据库。
            • 创建 OMS 各组件的配置文件。各个组件使用  supervisor
              服务管理。
            • 重启 OMS 所有组件 (大约需要两分钟,CPU 慢的时候可能会更久,请耐心等待)。
            • 初始化 OMS 资源标签和资源组。
            • 完成容器初始化,将 OMS Console 服务设置为开机自动启动。
            • 提示全部初始化步骤执行成功。
             

            部署后检查

             
            部署成功后,OMS 监听端口 8089 成功。
             
            访问 OMS 页面:http://10.0.0.65:8089/  
             
             
            • 初始用户名:admin
            • 初始密码:aaAA11__
             
            进去后可以查看 OMS 使用的组件数 及其 日志。


            下图是开启了 任务后才有的组件。

             
             
            OMS 各个组件使用  supervisorctl 管理。登录 OMS 容器可以查看各个服务组件。
             
              [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


               
              可以针对各个服务单独查看状态、启动和停止服务。
               
              supervisor 的配置文件是   /etc/supervisor/supervisord.conf ,里面定义了监听的 IP 和 端口,默认是   127.0.0.1:8084 ,修改为  0.0.0.0:8084 后重启 OMS 服务,即可通过 8084 端口访问  supervisor 管理界面。
               
               

              常见问题

              OMS 部署命令行会输出部署日志,里面有相应步骤的详细日志。结合 OMS 部署步骤以及对应日志去分析问题原因并解决。通常失败的主要原因就是资源不够。如创建元数据库租户时 OB 集群可用资源不足,以及创建 OMS 容器时内存资源不足等。即使 OMS 部署成功了,后面创建数据迁移任务和同步任务时,还会额外需要一定的资源。所以部署 OMS 的虚拟机的资源需要满足上面最小资源要求,特别是内存。


               

              总结 

              OMS 的部署形态主要是 OMS 应用容器,容器里会运行 OMS 的各个基础组件。OMS 部署好后启动数据迁移任务或同步任务后,还会启动相应的组件。每个组件的启动有最小的资源要求,为了数据迁移和同步的性能更好,相应的资源越大越好。后面会分享使用 OMS 做 ORACLE 到 OceanBase 的数据迁移和同步任务。


              更多阅读

              文章转载自数据库技术闲谈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论