数据校验

数据校验项目openGauss-tools-datachecker-performance,分为check服务和extract服务。check服务用于数据校验,extract服务用于数据抽取和规整。

原理介绍

全量校验:

在全量数据迁移完成后,由extract服务对MySQL源端和openGauss目标端数据抽取然后规整,并将数据推送到kafka中。最后由check服务提取kafka中的数据,并进行校验且输出校验结果。

增量校验:

由debezium服务侦听源端MySQL数据库的增量数据,到指定topic。再由源端extract服务处理该topic增量数据,触发check增量校验。

环境准备

ARM+openEuler 20.03 或 X86+CentOS 5.7

工具源码安装

  • 安装软件依赖:

jdk11 、git 、maven 、kafka、debezium(增量校验-源端connect) - 安装及操作步骤:

  1. 通过git命令下载源码。

    1. git clone https://gitee.com/opengauss/openGauss-tools-datachecker-performance.git 2. 通过maven命令构建check 和 extract jar包

    1. mvn clean package -Dmvnen.test.skip=true 3. 复制Jar包和confmvn clean package -Dmvnen.test.skip=trueig目录到指定部署目录下。 4. 配置相关配置config。

    • 校验端配置文件application.yml:

    1. server: 2. port: 9000 3. spring: 4. kafka: 5. bootstrap-servers: 192.168.0.114:9092 # kafka 集群地址 6. data: 7. check: 8. data-path: D:\code\tool # 配置数据校验结果输出本地路径 9. bucket-expect-capacity: 10 # 桶容量范围最小值为1 10. source-uri: http://127.0.0.1:9002 # 配置源端服务地址和服务端口server.port 11. sink-uri: http://127.0.0.1:9001 # 配置源端服务地址和服务端口server.port - 抽取端-源端配置 application-source.yml:

    1. server: 2. port: 9002 3. spring: 4. check: 5. server-uri: http://127.0.0.1:9000 # 数据校验服务地址 6. extract: 7. schema: test # 源端数据实例 8. databaseType: MS # 源端数据库类型 MS mysql 9. debezium-enable: false #是否开启增量debezium配置 默认不开启 10. debezium-topic:topic # debezium监听表增量数据,使用单一topic进行增量数据管理 11. debezium-groupId: debezium-extract-group # d debezium增量迁移topic ,groupId消费Group设置 12. debezium-topic-partitions: 1 # debezium监听topic 分区数量配置 13. debezium-tables: # debezium-tables配置debezium监听的表名称列表; 该配置只在源端服务配置并生效 14. table1, 15. table2 16. debezium-time-period: 1 # debezium增量迁移校验 时间周期 24*60 单位分钟 17. debezium-num-period: 1000 #debezium增量迁移校验 统计增量变更记录数量阀值,默认值1000 阀值应大于100 18. datasource: 19. druid: 20. dataSourceOne: 21. driver-class-name: com.mysql.cj.jdbc.Driver 22. url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&allowPublicKeyRetrieval=true 23. username: jack # 源端mysql用于校验的用户名称 24. password: test@123 # 源端mysql用于校验的用户名称密码 - 抽取端-目标端配置 application-sink.yml:

    1. server: 2. port: 9001 3. spring: 4. check: 5. server-uri: http://127.0.0.1:9000 # 数据校验服务地址 6. extract: 7. schema: test # 宿端opengauss 用于校验数据schema 8. databaseType: OG # 宿端数据库类型 OG opengauss 9. datasource: 10. druid: 11. dataSourceOne: 12. driver-class-name: org.opengauss.Driver 13. # 宿端opengauss用于校验数据库链接地址 14. url: jdbc:opengauss://127.0.0.1:15432/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&batchMode=OFF 15. username: jack # 宿端opengauss用于校验的用户名称 16. password: test@123 # 宿端opengauss用于校验的用户名称密码 5. 启动服务。

    • zookeeper启动。

    1. cd /data/kafka/confluent-7.2.0 2. bin/zookeeper-server-start -daemon etc/kafka/zookeeper.properties - kafka启动。

    1. bin/kafka-server-start.sh -daemon etc/kafka/server.properties - connect debezium连接器启动(增量校验要求启动),mysql-conect.properties为配置debezium连接器配置文件。

    1. bin/connect-standalone -daemon etc/kafka/connect-standalone.properties etc/kafka/mysql-conect.properties 6. 启动抽取校验服务。

    1. sh extract-endpoints.sh stat|restart|stop 2. sh check-endpoint.sh stat|restart|stop 7. 执行如下命令进行全量校验。

    1. curl -X 'POST' 'http://localhost:9000/start/check?checkMode=FULL' -H 'accept: */*' -d ''

    全量校验环境清理:

    1. curl -X 'POST' 'http://localhost:9000/stop/clean/check' -H 'accept: */*' -d '' 8. 启动增量校验(通过修改源端配置文件启动)。

    1. debezium-enable: true 2. 并配置其他debezium-相关配置,启动服务即可开启增量校验服务。

工具二进制安装

通过如下链接下载压缩包并解压,并配置相关配置文件,通过shell脚本即可启动服务。具体配置信息和操作步骤可参考源码安装部分。

1. https://opengauss.obs.cn-south-1.myhuaweicloud.com/3.1.1/tools/openGauss-datachecker-performance-3.1.0.tar.gz
2. tar -zxvf openGauss-datachecker-performance-3.1.0.tar.gz

解压目录包含:

  • datachecker-check-0.0.1.jar:校验服务Jar
  • datachecker-extract-0.0.1.jar:抽取服务Jar

config目录包含:

  • application.yml:校验端配置文件
  • application-source.yml:源端配置文件
  • application-sink.yml:目标端配置文件
  • check-endpoint.sh:校验服务启动脚本
  • extract-endpoints.sh:源端和目的端数据抽取服务启动脚本

卸载工具

删除对应JAR包,及相关配置文件即可。

注意事项

  • JDK版本应为11+。
  • 当前版本仅支持源端MySQL与目标端openGauss之间数据校验。
  • 当前版本只支持数据校验,不支持表对象校验。
  • 当前版本不支持地理位置数据校验。
  • MySQL需要5.7及以上版本。