本章节为使用者介绍多发比对配置相关内容。
10.9.1. 多发配置管理
10.9.1.1. 多发配置文件 jrescloud.properties
配置说明
参数(值) |
说明 |
示例 |
是否可运行修改 |
应用范围 |
multi.sendCompareService |
是否发送到比对服务(总开关),默认0不发送到比对服务,取值范围[0,1] |
multi.sendCompareService=1 |
否 |
不限制 |
multi.run.what |
0:不执行自动化和多发 1:执行统一SQL转换自动化测试 2:执行多发(关联多发的源库(oracle或者mysql)的jdbcUrl中查询参数mode=MULTIPLEX) 3:执行自动化(统一SQL转换和转换SQL的执行结果)+多发(关联多发的源库(oracle或者mysql)的jdbcUrl中查询参数mode=MULTIPLEX) |
multi.run.what=2 |
否 |
不限制 |
multi.pulsarServiceUrl |
Pulsar服务端地址,格式为:pulsar://<ip>:<port> 样例数据:pulsar://10.20.47.203:6650 |
multi.pulsarServiceUrl=pulsar://127.0.0.0:6650 |
否 |
不限制 |
multi.topicName |
Pulsar的持久化主题,主题格式:persistent://<tenant>/<namespace>/<topic>,样例数据为:persistent://public/default/recordMonitorJingji |
multi.topicName=persistent://public/default/multiplex |
否 |
不限制 |
multi.subscriptionName |
在Pulsar中,订阅(Subscription)是用于消费主题消息的标识符。订阅名称是用来标识不同消费者或消费组在订阅相同主题时的唯一标识。合法字符串即可,比如jingjiTest |
multi.subscriptionName=multiplexSubscription |
否 |
不限制 |
multi.send.change.data.http.url |
http请求上送sql执行前后数据变化到到比对服务的url,默认值为空,url格式为http://ip:port/em/compare/upload/change/data |
multi.send.change.data.http.url=http://10.188.141.212:17333/em/compare/upload/change/data |
否 |
不限制 |
multi.appType |
|
multi.appType=OTHER |
否 |
不限制 |
multi.appName |
多租户下的多发应用名称,由用户根据实际业务填写,可用于区分微服务名称,不配置默认为default |
multi.appName=default |
否 |
不限制 |
multi.username |
多租户下的多发用户名称,由用户根据实际业务填写,可用于区分多发操作用户,不配置默认为default |
multi.username=default |
否 |
不限制 |
multi.tenantName |
多租户下的多发租户名称,由用户根据实际业务填写,可用于区分业务域,不配置默认为default |
multi.tenantName=default |
否 |
不限制 |
10.9.1.2. jrescloud.properties 配置说明
多发数据源配置文件jrescloud.properties中的参数配置以key=value形式存在。 多发数据源配置以该格式为前缀:multiplex.datasource.${targetDialect}.${configProperty},其中 ${targetDialect} 表示目标方言,当前支持 lightdb_oracle、gaussdb_oracle、ocean_base_oracle、dm。${configProperty} 表示连接参数配置,当前支持的参数类型包括: url、username、password。
连接参数的名称有可能和url、username、password不完全一致,按照客户的原先的定义的url、username、password名称来写即可,下面是示例:
参数(值) |
说明 |
示例 |
是否可运行修改 |
应用范围 |
url |
启用unisql代理的多发目标数据库连接串 |
multiplex.datasource.lightdb_oracle.url=jdbc:postgresql://10.20.30.218:5432/postgres?sourceDialect=oracle&targetDialect=lightdb_oracle&options=-c%20search_path=public |
否 |
不限制 |
username |
用于连接多发目标数据库的用户名 |
multiplex.datasource.lightdb_oracle.username=USERNAME |
否 |
不限制 |
password |
用于连接多发目标数据库的密码 |
multiplex.datasource.lightdb_oracle.password=PASSWORD |
否 |
不限制 |
10.9.2. 比对配置管理
10.9.2.1. 配置文件
比对服务配置文件 jrescloud.properties
在 comparison/deploy/config
文件夹下,供比对服务初始化加载调用。
10.9.2.2. 配置文件说明
比对服务配置文件jrescloud.properties中的参数配置以key=value形式存在
10.9.2.2.1. 比对服务通用配置
app通常指的是一个独立的服务实例,负责处理特定的业务需求
参数(值) |
说明 |
示例 |
是否可运行修改 |
应用范围 |
app.web.domain |
表示 Web 应用程序的域名 |
app.web.domain=ip; #ip要替换成实际部署比对服务的机器ip |
否 |
不限制 |
app.web.home |
表示应用程序的主页或根路径 |
app.web.home=http://ip:17334/em; #ip要替换成实际部署比对服务的机器ip |
否 |
不限制 |
comparison.sqlStmtCountMismatchDefaultResult |
当比对消息只有源端或目标端消息时,比对报告是显示成功还是失败,success 表示成功,failed 表示失败,其他值报错 |
comparison.sqlStmtCountMismatchDefaultResult=success |
否 |
不限制 |
multi.upload.manual.url |
上传数据库比对结果报告到手工的blade平台的URL,优先级高于comparison.compareResultPushUrl,二者只会推送一个 |
http://10.20.30.40:8080/share/v1/shareInterFace/setCompatDelivery.json |
否 |
不限制 |
comparison.compareResultPushUrl |
比对报告对外推送地址,当比对服务生成报告后,会将报告内容以json的格式推送给配置地址,请求方式为 http post,默认为空。具体使用可参考 多发比对对外推送报告接口 |
comparison.compareResultPushUrl=http://127.0.0.1:8080/webContext/receiveCompareReport |
否 |
不限制 |
10.9.2.2.2. 比对服务数据源配置
参数(值) |
说明 |
示例 |
是否可运行修改 |
应用范围 |
name |
多数据源[0]的名称 |
dyn.spring.datasources[0].name=default |
否 |
不限制 |
driverClassName |
驱动类名称 |
dyn.spring.datasources[0].driverClassName=org.postgresql.Driver |
否 |
不限制 |
url |
数据库连接地址 |
dyn.spring.datasources[0].url=jdbc:postgresql://10.20.165.223:5434/em |
否 |
不限制 |
username |
数据库用户名 |
dyn.spring.datasources[0].username=USERNAME |
否 |
不限制 |
password |
数据库密码 |
dyn.spring.datasources[0].password=PASSWORD |
否 |
不限制 |
10.9.2.3. 比对规则说明
10.9.2.3.1. 比对规则配置文件位置
比对规则文件(*.json)位于目录 ``comparison/config/compareRules`` 下与比对服务配置文件 ``jrescloud.properties`` 同一层。
规则文件(*.json)中一行(json格式)表示一条规则
10.9.2.3.2. 为什么使用比对规则
1 确保准确性。
比对规则确保在比对过程中数据能够被正确解释和处理。例如,不同格式的日期需要标准化,不同精度的数值需要统一处理,通过规则来实现这些目标,能够确保比对的准确性。
2 处理数据格式和类型差异。
数据可能来自不同的源,不同源之间的数据格式和类型可能有所不同。比对规则能够处理这些差异,例如:
将日期格式标准化(如从DD/MM/YYYY格式转换为YYYY-MM-DD格式)。
统一处理布尔值(如将1/0转换为true/false)。
3 处理异常。
数据中可能包含异常值。比对规则能定义如何处理这些情况(如赋予默认值),避免错误比对。
4 提高比对效率
明确的比对规则可以提升比对过程的效率。例如,通过定义快速判断的标准来进行初步筛选,减少详细比对的工作量。
5 自动化
使用比对规则使比对过程自动化,减少人工操作和错误。
10.9.2.3.3. 比对规则分类和样例
10.9.2.3.3.1. 规则内容说明
属性 |
说明 |
示例 |
ruleName |
规则名称 |
ForceIgnore(忽略大小规则),ForceReplace(替换规则),字符串截取规则(SubString),精度截取规则(SubPrecision),布尔转数字(Boolean2Number),时间戳转字符串(Timestamp2String)规则 |
columnType |
字段数据类型编码 |
12,具体可参考 数据类型支持范围和java.sql.Types映射值章节 中的 variableType值 |
tableName |
表名 |
example_table_six_rule |
ruleColumns |
应用规则的字段数组 |
“ruleColumns”:[“name”,”Aa”] |
ruleValue |
应用[替换规则,字符串截取规则,精度截取规则]规则后的值 |
替换规则,”ruleValue”: 100表示应用规则后替换的值为100。字符串截取规则,”ruleValue”: 4表示截取字符串前4个字符。精度截取规则,”ruleValue”: 5表示保留小数点后5位(四舍五入) |
dateFormat |
应用[时间戳转字符串]规则后,日期时间格式 |
“dateFormat”:”yyyy-MM-dd”表示转后的日期格式 |
10.9.2.3.3.2. 比对规则配置说明
可以针对不同的业务需求灵活地应用特定规则,从而提升数据处理的准确性和效率。
1 只进行字段类型的规则匹配。
2 只进行表名的规则匹配。
3 只进行列名的规则匹配。
4 字段类型+表名的规则匹配。
5 字段类型+列名的规则匹配。
6 表名+列名的规则匹配。
7 字段类型+表名+列名的规则匹配。
具体比对规则样例见下方。
注解
支持运行时修改比对规则,修改规则文件后,在规则配置文件目录下(
工作目录下的/config/compareRules下
)创建一个文件名是compareRules.reload
的文件,即可重新加载规则(每隔1分钟检查一次)。重新加载规则后,会将历史的数据根据新规则重新比对并生成报告,历史报告不会丢失。
10.9.2.3.3.3. 忽略大小规则(ForceIgnore)
该忽略大小写规则旨在确保输入字符串内容在处理过程中统一转换为小写形式,从而实现大小写不敏感的效果
样例1:
# 字段类型是varchar,该字段内容应用忽略大小写规则(转换为小写)
{"ruleType":"ColumnTypeRule","ruleName":"ForceIgnore","columnType":12}
样例2:
# 对表example_table_six_rule字段[name,Aa]内容应用忽略大小写规则(转换为小写)
{"ruleType":"ColumnTypeRule","ruleName":"ForceIgnore","tableName":"example_table_six_rule","ruleColumns":["name","Aa"]}
样例3:
# 对表tb_rpa_node_1字段[scheduler_paused_1,Aa]且该字段类型是varchar,该字段内容应用忽略大小写规则(转换为小写)
{"ruleType":"ColumnTypeRule","ruleName":"ForceIgnore","columnType":12,"tableName":"tb_rpa_node_1","ruleColumns":["scheduler_paused_1","Aa"]}
10.9.2.3.3.4. 替换规则(ForceReplace)
用于将数据替换为另一部分内容。
# 对字段[hire_day_of_week]且该字段类型为text(jdbc获取字段的元数据类型),则对该字段内容应用替换规则,将旧值[星期一]替换为[MONDAY],字段值不匹配时不替换
{"ruleName":"ForceReplace","columnType":-1,"ruleColumns":["hire_day_of_week"],"ruleValue": "星期一:MONDAY"}
10.9.2.3.3.5. 字符串截取规则(SubString)
从输入字符串中截取指定长度的子串
样例1:
# 字段类型是varchar,该字段内容应用字符串截取规则,截取字符串前3位
{"ruleType":"ColumnTypeRule","ruleName":"SubString","columnType":12,"ruleValue": 3}
样例2:
# 对表example_table_six_rule字段[address,Aa]内容应用字符串截取规则,截取字符串前3位
{"ruleType":"ColumnTypeRule","ruleName":"SubString","tableName":"example_table_six_rule","ruleColumns":["address","Aa"],"ruleValue": 3}
样例3:
# 对表tb_rpa_node_substring字段[scheduler_paused_substring,Aa]且该字段类型为varchar,对该字段内容应用字符串截取规则,截取字符串前3位
{"ruleType":"ColumnTypeRule","ruleName":"SubString","columnType":12,"tableName":"tb_rpa_node_substring","ruleColumns":["scheduler_paused_substring","Aa"],"ruleValue": 3}
10.9.2.3.3.6. 精度截取规则(SubPrecision)
将数值小数部分精确到指定的位数(四舍五入),该规则用于保证数值精度在特定应用场景下的一致性和准确性。
样例1:
# 字段类型是float8(jdbc获取到表字段元数据),该字段内容应用精度截取规则,小数点后保留4位(四舍五入)
{"ruleType":"ColumnTypeRule","ruleName":"SubString","columnType":6,"ruleValue": 4}
样例2:
# 对表example_table_six_rule字段[money,Aa]内容应用精度截取规则,小数点后保留4位(四舍五入)
{"ruleType":"ColumnTypeRule","ruleName":"SubPrecision","tableName":"example_table_six_rule","ruleColumns":["money","Aa"],"ruleValue": 4}
样例3:
# 对表example_table_six_rule字段[money,Aa]且该字段类型为float8,内容应用精度截取规则,小数点后保留4位(四舍五入)
{"ruleType":"ColumnTypeRule","ruleName":"SubPrecision","columnType":6,"tableName":"example_table_six_rule","ruleColumns":["money","Aa"],"ruleValue": 4}
10.9.2.3.3.7. 布尔转数字(Boolean2Number)规则
将true转成1,将false转成0
样例1:
# 字段类型是bit(jdbc获取到表字段元数据),将true转成1,将false转成0
{"ruleType":"ColumnTypeRule","ruleName":"Boolean2Number","columnType":-7}
样例2:
# 对表example_table_six_rule字段[true_or_false,Aa] 将true转成1,将false转成0
{"ruleType":"ColumnTypeRule","ruleName":"Boolean2Number","tableName":"example_table_six_rule","ruleColumns":["true_or_false","Aa"]}
样例3:
# 对表example_table_six_rule字段[money,Aa]且该字段类型为bit,将true转成1,将false转成0
{"ruleType":"ColumnTypeRule","ruleName":"Boolean2Number","columnType":-7,"tableName":"example_table_six_rule","ruleColumns":["true_or_false","Aa"]}
10.9.2.3.3.8. 时间戳转字符串(Timestamp2String)规则
它将数值类型的时间戳(通常为毫秒数)转换为格式化的日期字符串。
样例1:
# 字段类型是timestamp(jdbc获取到表字段元数据),字段名是create_time,内容应用时间戳转字符串规则,默认转换后格式为yyyy-MM-dd HH:mm:ss
{"ruleType":"ColumnTypeRule","ruleName":"Timestamp2String","columnType":93,"ruleColumns":["create_time"]}
样例2:
# 字段类型是timestamp(jdbc获取到表字段元数据),字段名是update_time,内容应用时间戳转字符串规则,默认转换后格式为yyyy-MM-dd
{"ruleType":"ColumnTypeRule","ruleName":"Timestamp2String","dateFormat":"yyyy-MM-dd", "columnType":93,"ruleColumns":["update_time"]}
10.9.2.3.3.9. 忽略表字段规则
它指定某张表里的某些字段不进行比较。
该规则可以在比对服务界面进行配置,配置后即可生效。进入比对服务界面,点击
配置管理
,再点击新增配置项
,参数类型
选择忽略表字段
,参数名
填写表名
,参数值
填写列名
,参数描述
可根据实际情况进行编写。配置效果图如下:
![]()
10.9.3. 微服务侧多发比对参数一键配置
10.9.3.1. 一键配置配置说明
微服务在接入多发比对,需要在微服务的用户主目录、多发比对jar包、业务源库的url/驱动类等都需要进行配置,配置比较繁琐,开发了一键配置的功能,提升业务效率。
10.9.3.2. 一键配置的具体操作
从官网下载最新的多发比对安装包: 比对服务下载
解压 LightDB1.0-multiplex-Vxxxx-xx-xxx.zip,将
deploy
文件夹复制到需要接入多发比对服务的服务器,复制的目标路径用户自定义即可。deloy文件夹内包含的文件如下:![]()
在deploy文件内,将
LightDB1.0-comparison-Vxxxxxx-xx-xxx.zip
、LightDB1.0-unisql-Vxxxxxx-xx-xxx.zip
、事先配置好的文件jrescloud.properties
、unisql.conf``拷贝到 ``deploy
文件夹中打开deploy文件夹中json文件
config.json
,进行微服务参数配置,原始的config.json
模版如下[ { // 配置文件部署路径 "user.dir": "/home/lightdb/test/config", // 统一SQL动态库部署路径 "unisql_lib_full_path": "/home/lightdb/test/lib", "config_file": [ { // 要修改的properties文件(修改url和driver) "file": "/home/lightdb/test/test.properties", // 数据库连接url的配置项名称(需要修改成多发url的配置项) "url_key": "hs.datasource.default.url", // 数据库驱动的配置项名称(需要修改成多发驱动的配置项) "driver_key": "hs.datasource.default.driver-class-name" } ], "unisql_jar_dir": [ { // 统一SQL和多发的jar包部署目录 "dir": "/home/lightdb/test/jar" } ], // 源库配置 "source_dialect": "mysql", // 目标库配置 "target_dialect": "mysql", // 多发目标数据库配置 "multiplex_target_dialects": [ "mysql", "oracle", "oceanbase-oracle" ], // 是否是真多发(true:是;false:否) "multiplex": true, // 服务名称 "service_name":"hsamlwl" } ]可以根据实际业务情况进行参数配置,下面是see的一个微服务真多发参数配置,配置好的
config.json
文件如下:[ { // 配置文件部署路径 "user.dir": "/home/see/tomcat/bin", // 统一SQL动态库部署路径 "unisql_lib_full_path": "/home/see/unisql/", "config_file": [ { // 要修改的properties文件(修改url和driver) "file": "/home/see/tomcat/webapps/acm/WEB-INF/conf/jdbc.properties", // 数据库连接url的配置项名称(需要修改成多发url的配置项) "url_key": "jdbc.url", // 数据库驱动的配置项名称(需要修改成多发驱动的配置项) "driver_key": "jdbc.driver" }, { // 要修改的properties文件(修改url和driver) "file": "/home/see/tomcat/webapps/acm/WEB-INF/conf/jdbc.properties", // 数据库连接url的配置项名称(需要修改成多发url的配置项) "url_key": "cas.authn.jdbc.query[0].url", // 数据库驱动的配置项名称(需要修改成多发驱动的配置项) "driver_key": "as.authn.jdbc.query[0].driverClass" } ], "unisql_jar_dir": [ { // 统一SQL和多发的jar包部署目录 "dir": "/home/see/tomcat/webapps/acm/WEB-INF/lib/" }, { // 统一SQL和多发的jar包部署目录 "dir": "/home/see/tomcat/webapps/cas/WEB-INF/lib/" } ], // 源库配置 "source_dialect": "mysql", // 目标库配置 "target_dialect": "mysql", // 多发目标数据库配置 "multiplex_target_dialects": [ "mysql", "gaussdb500_oracle" ], // 是否是真多发(true:是;false:否) "multiplex": true, // 服务名称 "service_name":"hsamlwl" } ]4.经过上面3步之后,deploy的文件夹包含的内容如下
![]()
执行./multiplex_deploy,配置成功!