本章节为使用者介绍多发比对配置相关内容。

10.9.1. 多发配置管理

10.9.1.1. 多发配置文件 jrescloud.properties 配置说明

参数(值)

说明

示例

是否可运行修改

应用范围

multi.sendCompareService

是否发送到比对服务(总开关),默认0不发送到比对服务,取值范围[0,1]

multi.sendCompareService=1

不限制

multi.run.what

2:执行多发(关联多发的源库(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

多租户下的多发比对支持的应用类型配置,可用于区分接入应用类型,支持范围为JRES/CRES/LDP/LOW_CODE/STUDIO/OTHER,分别表示jres开发/cres开发/高性能ldp/低码/lightdb studio开发工具/其他类型,不配置默认为OTHER

暂不允许配置其他值,否则有可能会导致比对服务异常!!!

multi.appType=OTHER

不限制

multi.appName

多租户下的多发应用名称,由用户根据实际业务填写,可用于区分微服务名称,不配置默认为default

multi.appName=default

不限制

multi.username

多租户下的多发用户名称,由用户根据实际业务填写,可用于区分多发操作用户,不配置默认为default

multi.username=default

不限制

multi.tenantName

多租户下的多发租户名称,由用户根据实际业务填写,可用于区分业务域,不配置默认为default

multi.tenantName=default

不限制

multi.resultSetFetchLimit

多发采样配置,当需要比对的数据集大于此值时,只会保留此阈值以内的数据进行比对,其余的数据忽略;默认1000,配置 0 代表关闭采样功能

multi.resultSetFetchLimit=1000

不限制

multi.resultSetSpillThreshold

多发结果集溢出配置,当需要比对的数据集超过此值时,会采用文件的形式发给多发服务,而不是报文;默认1000,配置 0 代表关闭文件传输功能

multi.resultSetSpillThreshold=1000

不限制

multi.resultSetSpillFileBasedir

多发结果集溢出文件路径,需要采用文件的形式发给多发服务时,写文件的本地路径。不填默认为 /tmp。 请确保该路径 能够在比对服务访问,可将多发服务与比对服务部署在一起,或者两者用相同的 NFS 路径。

multi.resultSetSpillFileBasedir=/mnt/nfs-share/tmpfiles

不限制

multi.targetThreadPoolSize

多发时目标库执行会放入异步执行,此参数为多发时目标库线程池核心数大小,默认值为CPU核数。

multi.targetThreadPoolSize=32

不限制

multi.targetThreadPoolQueueSize

多发时目标库执行会放入异步执行,此参数为多发时目标库线程池队列大小,默认为10。

multi.targetThreadPoolQueueSize=10

不限制

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.propertiescomparison/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

不限制

comparison.compareResultPushErrorRetryTimes

将比对报告推送给外部系统时,推送失败后的重试次数配置,默认继续尝试 3 次,配置为 0 表示不重试,配置为非数值则报错。

comparison.compareResultPushErrorRetryTimes=3

不限制

comparison.fastfailRetryLines

多发比对快速失败行数。达到此失败行数后直接判定比对失败,后续行不再比较以提升性能。格式为数字,取值范围 [0,10],默认为 3,配置为 0 表示关闭快速失败功能。

comparison.fastfailRetryLines=3

不限制

comparison.compareProgressRows

多发比对进度日志打印行数间隔。格式为数字,默认 1000,配置为 0 表示不打印进度日志。

comparison.compareProgressRows=1000

不限制

comparison.waitMultiResult

比对服务等待多发结果推送的最长时长,单位为秒,默认 10 秒。

comparison.waitMultiResult=10

不限制

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. 忽略表字段规则

它指定某张表里的某些字段不进行比较。

该规则可以在比对服务界面进行配置,配置后即可生效。进入比对服务界面,点击 配置管理 ,再点击 新增配置项参数类型 选择 忽略表字段参数名 填写 表名参数值 填写 列名参数描述 可根据实际情况进行编写。

配置效果图如下:

../_images/compare_rules_multiplex_2025-02-19-17-31-08.png

10.9.3. 微服务侧多发比对参数一键配置

10.9.3.1. 配置说明

微服务在接入多发比对,需要在微服务的用户主目录、多发比对jar包、业务源库的url/驱动类等都需要进行配置,配置比较繁琐,开发了一键配置的功能,提升业务效率。

10.9.3.2. 执行过程

0 概览

0.1. 一键配置的命令行执行

./multiplex_deploy_x86_64 -package_dir /path/to/packages -config_file config.json -service_name hsamlwl

0.2. 执行过程中关键步骤如下

  • 步骤1:扫描包目录
    • 扫描命令行参数 -package_dir (该命令行参数非必填,完整命令行参数解析参考 命令行参数解析)中配置的路径,

    • 确认三个软件包(LightDB1.0-multiplex-Vxxxx-xx-xxx.zipLightDB1.0-comparison-Vxxxxxx-xx-xxx.zipLightDB1.0-unisql-Vxxxxxx-xx-xxx.zip)的版本一致性。

    • 检查包目录下统一sql配置文件unisql.conf是否存在,提示,unisql.conf模版配置文件可以从安装包 LightDB1.0-unisql-Vxxxxxx-xx-xxx.zip 中config目录下获取。

    • 检查包目录下多发配置文件jrescloud.properties是否存在,提示,jrescloud.properties模版配置文件可以从安装包 LightDB1.0-multiplex-Vxxxx-xx-xxx.zip 中config目录下获取。

  • 步骤2:解析配置文件
    • 解析命令行参数 -config_file (非必填,默认文件名称config.json),该参数内容表示一键配置的配置的文件,完整配置参考见 配置文件),

    • 解析配置文件中属性是否缺失。

    • 解析配置文件中配置项内容是否合理。

    • 解析命令行参数 -service_name (非必填,不填的情况下是配置文件中配置的所有微服务,遍历这些服务,完成一键配置),获取 hsamlwl 服务的部署配置信息(服务需要在配置文件中指定,对应配置项名称 service_name )。

  • 步骤3:提取动态库
    • 从软件包 LightDB1.0-unisql-Vxxxxxx-xx-xxx.zip 中提取将动态库 unisql.linux.*.so

    • 再将动态库拷贝至 /home/lightdb/test/lib 目录(在 config.json 文件中指定,对应配置项名称unisql_lib_full_path,表示动态库的目录)。

  • 步骤4:更新JAR包
    • 复制JAR包(sql-convert-runtime-fat-*.jarunisql-compare-client-fat-*.jar)到 /home/lightdb/test/jar 目录(这个目录是目标服务的类加载的目录。

    • 对应 config.json 文件中配置项unisql_jar_dir.dir),并替换旧版本文件。

  • 步骤5:修改微服务的数据库连接串
    • 修改微服务的数据源配置文件(该数据源配置文件路径在 config.json 文件中配置,对应配置项名称config_file.file)。

    • 在微服务的数据源配置文件中,将jdbcURL修改为多发型格式(具体见下方)。

    • 在微服务的数据源配置文件中,更新驱动为统一SQL驱动(com.hundsun.lightdb.unisql.proxy.Driver)。

0.3. 输出结果

  • 控制台实时显示文件复制、配置更新等操作日志。

  • 最终输出提示信息:”安装完成”

0.4 说明
  • 执行过程中的每个步骤均包含错误校验机制,若某一步骤失败(如版本不一致、文件权限不足),会立即终止并输出错误日志。

  • 配置文件 config.json 需包含服务IP、端口、数据库连接参数等必要信息,否则无法完成部署。

../_images/multiplex_one-click_install_workflow_2025-07-04_17-34-22.png

1 解析一键配置的命令行参数

1.1 命令行参数的用途和示例 (详细见下方 命令行参数解析)

命令行参数用途和示例

参数

用途

示例

package_dir

指定存放 unisqlmultiplexcomparison 三个ZIP包的目录,再加上统一sql配置文件unisql.conf和多发配置文件jrescloud.properties

-package_dir /home/packages:程序会扫描该目录下的 LightDB1.0-*.zip 包 ,检测版本是否一致,再检测文件是否存在,文件包括统一sql配置文件unisql.conf和多发配置文件jrescloud.properties

config_file

安装配置文件,默认从当前目录中寻找config.json文件,默认从当前目录读取config.json

-config_file /etc/deploy/config.json:指定自定义配置文件路径

auto_create_dir

当目标部署目录不存在时,是否自动创建,默认false不会自动创建目录。

启用后,若 /home/lightdb/test/lib 不存在,会自动创建该路径

service_name

指定需要部署的微服务名称,多个名称用逗号分隔,默认部署所有服务

-service_name hsamlwl,order-service:仅部署这两个服务(需在 config.json 中定义,对应config.json中配置项名称 service_name

1.2 命令行参数在一键配置程序执行过程中的作用
../_images/multiplex_one-click_install_command_parameters_workflow_2025-07-04_16-35-47.png

1.3 注意

  • 参数优先级:命令行参数会覆盖 config.json 中的默认配置。

  • 路径规范:所有路径参数建议使用绝对路径,避免相对路径导致的部署错误。

  • 服务过滤规则-service_name 的值必须与 config.json 中的 service_name 字段完全匹配。

2. 解析一键配置项配置文件config.json

一键配置程序(包括 multiplex_deploy_x86_64multiplex_deploy_aarch64)通过解析配置文件 config.json 实现部署,具体流程如下:

  • 2.1 配置文件解析:程序读取并解析(完整配置参考见 配置文件),生成两个核心数据结构:

    • ConfigFile 结构体,映射一键配置的配置文件config.json中主字段,涵盖:

      • 配置文件 jrescloud.properties (多发配置)和 unisql.conf (统一sql配置)的安装路径(如 /home/lightdb,对应config.json中配置项名称user.dir,将unisql.conf和jrescloud.properties拷贝到该目录)

      • 动态库(unisql.linux.*.so)存储路径(如 lib 子目录,对应config.json中配置项名称unisql_lib_full_path,表示动态库最终拷贝到的目录)

      • JDBC连接参数(包含URL模板、驱动类名等,对应config.json中配置项config_file(object类型))数组,ConnectUrlFiles [] ConnectUrlFile

    • ConnectUrlFile 结构体,映射一键配置的配置文件config.json中属性config_file,涵盖:

      • 待修改的服务的数据源的文件路径(如 test.properties,表示服务中数据源的配置文件完整路径,对应对应config.json中配置项config_file.file,举例/home/lightdb/test/test.properties)

      • jdbcUrl连接字符串的键名(如 jdbc.url,表示服务中数据源的配置文件中jdbcUrl这个配置项的键名,对应对应config.json中配置项config_file.url_key,举例hs.datasource.default.url)

      • 驱动类名的键名(如 jdbc.driver,表示服务中数据源的配置文件中某个数据源的驱动类这个配置项的键名,对应对应config.json中配置项config_file.driver_key,举例hs.datasource.default.driver-class-name)

  • 2.2 注释处理:解析时会自动移除配置文件中的 // 行注释,避免JSON解析错误。配置文件必须使用 UTF-8 编码。

3. 安装包验证

安装包验证流程包含以下核心步骤:

  • 3.1 包完整性校验 检查由命令行参数 package_dir 指定的目录中是否包含以下三个基础组件包,并确保版本号完全一致:

    • LightDB1.0-multiplex-Vxxxx-xx-xxx.zip

    • LightDB1.0-comparison-Vxxxxxx-xx-xxx.zip

    • LightDB1.0-unisql-Vxxxxxx-xx-xxx.zip

  • 3.2 部署预处理 按以下顺序执行准备操作:

    3.2.1 版本一致性验证

    扫描目录确认所有组件包的版本号前缀(如 Vxxxx-xx-xxx 部分,比如LightDB1.0-multiplex-V202501-00-000.zip中版本信息是V202501-00-000)匹配。

    3.2.2 旧文件清理

    • 删除旧的动态库文件,比如unisql.linux.x86_64.so

    • 删除旧的sql-convert-runtime-.*.jar包,比如sql-convert-runtime-1.0.0.jar

    • 删除旧的unisql-compare-client-.*.jar包,比如sql-convert-runtime-1.0.0.jar

    3.2.3 动态文件提取

    从zip包(LightDB1.0-multiplex-Vxxxx-xx-xxx.zipLightDB1.0-unisql-Vxxxxxx-xx-xxx.zipLightDB1.0-comparison-Vxxxxxx-xx-xxx.zip )中提取以下关键文件:

    • 动态库(如 unisql.linux.x86_64.debug.so

    • Java 依赖包 sql-convert-runtime-fat-*.jar

    • Java 依赖包 unisql-compare-client-fat-*.jar

    3.2.4 检测jrescloud.properties和unisq.conf是否存在

    • 检查命令行参数 -package_dir 对应的目录(默认是当前mutiplex_deploy所在目录)下是否有jrescloud.properties和unisq.conf

    • 不存在报错提示,停止安装

4. 文件复制和替换

  • 4.1 一键配置程序从安装包中提取并复制必要文件到目标目录,包括:

    • 统一 SQL 动态库(.so 文件,根据 CPU 架构选择版本)

    • 统一 SQL 配置文件 unisql.conf

    • 两个 jar 包:sql-convert-runtime-fat-*.jarunisql-compare-client-fat-*.jar

    • 多发配置文件 jrescloud.properties

  • 4.2 前置操作 复制前删除目标目录中旧版本的同名文件。

5. 数据库连接配置修改

6. 多服务支持

  • 一键配置程序支持对多个微服务进行一键替换部署,通过命令行参数 -service_name 指定目标服务:

    • 若命令行参数 -service_name 为空,则对所有微服务执行替换

    • 若命令行参数 -service_name 不空,但与配置文件config.json中配置项service_name对应的内容不同,一键配置程序在控制台打印报错日志并停止安装。

7. 错误处理和日志记录

  • 程序具备详细的错误处理机制,错误时输出错误信息

  • 记录关键操作日志,便于问题排查

10.9.3.3. 命令行参数解析

一键配置命令行参数说明

参数

说明

package_dir

指定一键配置所需的安装包的所在的目录(如果是相对路径,则是基于当前目录(一键配置程序所在目录)下的路径)。一键配置程序在此目录下查找 LightDB1.0-multiplex-Vxxxx-xx-xxx.zipLightDB1.0-comparison-Vxxxxxx-xx-xxx.zipLightDB1.0-unisql-Vxxxxxx-xx-xxx.zip 三个 zip 包。此外,此路径还用于存放统一SQL配置文件 unisql.conf 和多发配置文件 jrescloud.properties

config_file

安装配置文件,默认从当前目录中寻找config.json文件。配置文件是 JSON 格式,包含了安装路径、连接串配置等信息。

auto_create_dir

一个布尔标志,指示当目标目录不存在时,是否自动创建目录。true表示自动创建目录,false表示不会自动创建目录,默认false。

service_name

指定需要进行一键替换的微服务名称。如果为空,则对config.json文件中所有微服务执行替换。

说明 命令行参数解析失败,会打帮助信息,举例如下:

# 命令 ./multiplex_deploy_x86_64 -package_dir
# 报错原因: -package_dir 参数需要给参数值
# 输出如下:
flag provided but not defined: -package_dir
Usage of multiplex_deploy_x86_64:
  -auto_create_dir
        当目标目录不存在时,是否自动创建目录
  -config_file string
        安装配置文件,默认从当前目录中寻找config.json文件 (default "config.json")
  -package_dir string
        统一sql安装包、统一sql配置文件unisql.conf和多发配置文件jrescloud.properties的所在路径,在此目录下存放unisql,multiplex,comparision三个包
        注意三个包要相同版本,从制品库下载下来直接放进去就可以了, 例如:
        LightDB1.0-comparison-V202403-02-000-debug.zip
        LightDB1.0-multiplex-V202403-02-000-debug.zip
        LightDB1.0-unisql-V202403-02-000-debug.zip
         (default ".")
  -service_name string
        支持对多个微服务进行一键替换部署,多个微服务之间用英文逗号分隔比如a,b,c,默认是空串表示所有的微服务都执行一键替换

10.9.3.4. 配置文件

微服务一键集成统一 sql 和多发的配置文件config.json模板如下:(来自安装包LightDB1.0-multiplex-Vxxxxxx-xx-xxx.zip中deploy目录下)

[
  // 单个微服务的统一SQL与多发部署配置项,每个对象对应一个微服务的完整部署配置
  {
    // 统一SQL核心配置文件(unisql.conf)和多发配置文件(jrescloud.properties)的目标存放目录
    // 工具将从package_dir目录(对应命令行参数packag_dir,默认是当前目录)拷贝这两个文件至该目录(user.dir)
    "user.dir": "/home/lightdb/test/config",

    // 统一SQL动态库文件(.so)的目标安装目录
    // 工具会从unisql安装包(LightDB1.0-unisql-Vxxxxxx-xx-xxx.zip)中提取对应CPU架构的动态库(如x86_64或aarch64架构)并拷贝至此目录
    "unisql_lib_full_path": "/home/lightdb/test/lib",

    // 数据源配置文件及连接串修改规则集合
    // 用于指定需要更新JDBC连接串和驱动类的配置文件,及对应配置项名称
    "config_file": [
      {
        // 需要修改连接串和驱动的目标配置文件路径(如.properties文件)
        "file": "/home/lightdb/test/test.properties",
        // 该配置文件中JDBC连接串的配置项名称(如hs.datasource.default.url)
        "url_key": "hs.datasource.default.url",
        // 该配置文件中数据库驱动类的配置项名称(如hs.datasource.default.driver-class-name)
        "driver_key": "hs.datasource.default.driver-class-name"
      }
    ],

    // 统一SQL依赖JAR包的目标安装目录集合
    // 工具会从安装包中提取sql-convert-runtime-fat-*.jar和unisql-compare-client-fat-*.jar并拷贝至这些目录
    "unisql_jar_dir": [
      {
        // JAR包最终部署的目标目录(支持多目录配置)
        "dir": "/home/lightdb/test/jar"
      }
    ],

    // 源数据库方言类型,用于构建JDBC连接串的sourceDialect参数
    // 需与实际源库类型一致(如oracle或者mysql)
    "source_dialect": "oracle",

    // 主目标数据库方言类型,用于构建JDBC连接串的targetDialect参数
    // 需与主要目标库类型一致(如oracle、ocean_base_oracle等)
    "target_dialect": "oracle",

    // 多发场景下涉及的所有数据库方言集合(含源库),用于构建JDBC连接串的multiplexTargetDialects参数
    // 格式为方言名称数组,多个值将自动拼接为逗号分隔的字符串(如"oracle,gaussdb_oracle,ocean_base_oracle")
    "multiplex_target_dialects": [
      "oracle",
      "gaussdb_oracle",
      "ocean_base_oracle"
    ],

    // 多发模式开关,控制JDBC连接串是否添加mode=MULTIPLEX参数
    // true:真多发模式,连接串自动添加mode=MULTIPLEX;false:伪多发模式,不添加该参数
    "multiplex": true,

    // 微服务唯一标识名称,用于指定当前配置所属的微服务
    // 与命令行参数service_name配合使用,仅当service_name包含该值时才执行本配置的安装
    "service_name": "hsamlwl"
  }
]

配置文件中数据源集成统一SQL相关配置举例说明

{
    // 目标,数据源集成统一 sql 的相关配置
    "config_file": [
        {
            // 数据源所在文件
            "file": "/home/lightdb/test/test.properties",
            // 数据源所在文件中数据源的 jdbcUrl 的配置项名称,对应下方样例中配置项名称hs.datasource.default.url
            "url_key": "hs.datasource.default.url",
            // 数据源所在文件中数据源的驱动类的配置项名称,对应下方样例中配置项名称hs.datasource.default.driver-class-name
            "driver_key": "hs.datasource.default.driver-class-name"
        }
    ]
}

数据源所在文件 /home/lightdb/test/test.properties 样例部分内容如下(修改前):

# 数据源的 驱动类 的配置项
hs.datasource.default.driver-class-name=com.oceanbase.jdbc.Driver
# 数据源的 jdbcUrl 的配置项
hs.datasource.default.url=jdbc:oceanbase://${IP}:${PORT}/${DBNAME}
hs.datasource.default.username=${USER}
hs.datasource.default.password=${PASSWORD}

数据源所在文件 /home/lightdb/test/test.properties 样例部分内容如下(经过一键配置修改后):

# 数据源的 驱动类 的配置项的内容改为统一sql驱动类 com.hundsun.lightdb.unisql.proxy.Driver
hs.datasource.default.driver-class-name=com.hundsun.lightdb.unisql.proxy.Driver
# 数据源的 jdbc 的配置项内容修改后格式为jdbc:unisql:oceanbase://${IP}:${PORT}/${DBNAME}?sourceDialect=oracle&targetDialect=ocean_base_oracle&multiplexTargetDialects=oracle,gaussdb_oracle,ocean_base_oracle&mode=MULTIPLEX,其中mode=MULTIPLEX是否存在取决于配置文件中配置项multiplex内容
hs.datasource.default.url=jdbc:oceanbase://${IP}:${PORT}/${DBNAME}?sourceDialect=oracle&targetDialect=ocean_base_oracle&multiplexTargetDialects=oracle,gaussdb_oracle,ocean_base_oracle&mode=MULTIPLEX
hs.datasource.default.username=${USER}
hs.datasource.default.password=${PASSWORD}
微服务一键集成统一 SQL 和多发的配置文件模板

字段

描述

user.dir

微服务下统一 SQL 配置文件 unisql.conf 和多发配置文件 jrescloud.properties 最终所在目录。可通过命令参数 -auto_create_dir 设置为 true 以自动创建

unisql_lib_full_path

统一 SQL 动态库 (*.so) 在微服务所在服务器目录。可通过命令参数 -auto_create_dir 设置为 true 以自动创建

config_file

数据源集成统一 SQL 的相关配置。

config_file.file

数据源所在文件。

config_file.url_key

数据源所在文件中数据源的 jdbcUrl 的配置项名称。

config_file.driver_key

数据源所在文件中数据源的统一 SQL 驱动类 (com.hundsun.lightdb.unisql.proxy.Driver) 的配置项名称。

unisql_jar_dir

统一 SQL 和多发依赖的 jar 包 (sql-convert-runtime-fat-.*.jarunisql-compare-client-fat-.*.jar) 所在目录。

unisql_jar_dir.dir

统一 SQL 和多发依赖的 jar 包最终拷贝到的目录。可通过命令参数 -auto_create_dir 设置为 true 以自动创建

source_dialect

数据源所在文件中数据源 jdbcUrl 查询参数 sourceDialect,表示源库方言。 支持范围参考 支持范围

target_dialect

数据源所在文件中数据源 jdbcUrl 查询参数 targetDialect,表示目标库方言。 支持范围参考 支持范围

multiplex_target_dialects

真多发/伪多发情况下,微服务涉及的数据库产品信息(包括源库),对应数据源所在文件中数据源 jdbcUrl 查询参数 multiplexTargetDialects 内容,样例数据:mysql,oracle,oceanbase-oracle。 支持范围参考 支持范围

multiplex

只有首次配置生效 控制数据源所在文件中数据源 jdbcUrl 查询参数是否有 mode。 真多发情况下,multiplextruejdbcUrl 查询参数添加 mode=MULTIPLEX。伪多发情况下,multiplexfalsejdbcUrl 查询参数不再添加 mode=MULTIPLEX

service_name

指定需要进行一键替换的微服务名称。

10.9.3.5. 具体操作

  1. 从官网下载最新的多发比对安装包: 比对服务下载

解压 LightDB1.0-multiplex-Vxxxx-xx-xxx.zip,将 deploy 文件夹复制到需要接入多发比对服务的服务器,复制的目标路径用户自定义即可。deloy文件夹内包含的文件如下:

../_images/configuration_deploy_before.png
  1. 在deploy文件内,将 LightDB1.0-comparison-Vxxxxxx-xx-xxx.zipLightDB1.0-unisql-Vxxxxxx-xx-xxx.zip、事先配置好的文件 jrescloud.propertiesunisql.conf 拷贝到 deploy 文件夹中

  2. 打开deploy文件夹中json文件 config.json ,进行微服务参数配置,原始的 config.json 模版如下

[
  // 单个微服务的统一SQL与多发部署配置项,每个对象对应一个微服务的完整部署配置
  {
    // 统一SQL核心配置文件(unisql.conf)和多发配置文件(jrescloud.properties)的目标存放目录
    // 工具将从package_dir目录(对应命令行参数packag_dir,默认是当前目录)拷贝这两个文件至该目录(user.dir)
    "user.dir": "/home/lightdb/test/config",

    // 统一SQL动态库文件(.so)的目标安装目录
    // 工具会从unisql安装包(LightDB1.0-unisql-Vxxxxxx-xx-xxx.zip)中提取对应CPU架构的动态库(如x86_64或aarch64架构)并拷贝至此目录
    "unisql_lib_full_path": "/home/lightdb/test/lib",

    // 数据源配置文件及连接串修改规则集合
    // 用于指定需要更新JDBC连接串和驱动类的配置文件,及对应配置项名称
    "config_file": [
      {
        // 需要修改连接串和驱动的目标配置文件路径(如.properties文件)
        "file": "/home/lightdb/test/test.properties",
        // 该配置文件中JDBC连接串的配置项名称(如hs.datasource.default.url)
        "url_key": "hs.datasource.default.url",
        // 该配置文件中数据库驱动类的配置项名称(如hs.datasource.default.driver-class-name)
        "driver_key": "hs.datasource.default.driver-class-name"
      }
    ],

    // 统一SQL依赖JAR包的目标安装目录集合
    // 工具会从安装包中提取sql-convert-runtime-fat-*.jar和unisql-compare-client-fat-*.jar并拷贝至这些目录
    "unisql_jar_dir": [
      {
        // JAR包最终部署的目标目录(支持多目录配置)
        "dir": "/home/lightdb/test/jar"
      }
    ],

    // 源数据库方言类型,用于构建JDBC连接串的sourceDialect参数
    // 需与实际源库类型一致(如oracle或者mysql)
    "source_dialect": "oracle",

    // 主目标数据库方言类型,用于构建JDBC连接串的targetDialect参数
    // 需与主要目标库类型一致(如oracle、ocean_base_oracle等)
    "target_dialect": "oracle",

    // 多发场景下涉及的所有数据库方言集合(含源库),用于构建JDBC连接串的multiplexTargetDialects参数
    // 格式为方言名称数组,多个值将自动拼接为逗号分隔的字符串(如"oracle,gaussdb_oracle,ocean_base_oracle")
    "multiplex_target_dialects": [
      "oracle",
      "gaussdb_oracle",
      "ocean_base_oracle"
    ],

    // 多发模式开关,控制JDBC连接串是否添加mode=MULTIPLEX参数
    // true:真多发模式,连接串自动添加mode=MULTIPLEX;false:伪多发模式,不添加该参数
    "multiplex": true,

    // 微服务唯一标识名称,用于指定当前配置所属的微服务
    // 与命令行参数service_name配合使用,仅当service_name包含该值时才执行本配置的安装
    "service_name": "hsamlwl"
  }
]

可以根据实际业务情况进行参数配置,下面是see的一个微服务真多发参数配置,配置好的 config.json 文件如下:

[
        {
                // 将统一 sql 配置文件 unisql.conf 和多发配置文件 jrescloud.properties拷贝到微服务下某个目录
                "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的文件夹包含的内容如下

../_images/configuration_deploy_after.png
  1. 根据执行的服务器环境,选择执行./multiplex_deploy_x86_64或者multiplex_deploy_aarch64,提示配置成功!,具体操作见下方

# 查看命令行帮助
[root@liangdong30629 deploy]# ./multiplex_deploy_x86_64 -h
Usage of ./multiplex_deploy_x86_64:
  -auto_create_dir
        当目标目录不存在时,是否自动创建目录
  -config_file string
        安装配置文件,默认从当前目录中寻找config.json文件 (default "config.json")
  -package_dir string
        统一sql安装包、统一sql配置文件unisql.conf和多发配置文件jrescloud.properties的所在路径,在此目录下存放unisql,multiplex,comparision三个包
        注意三个包要相同版本,从制品库下载下来直接放进去就可以了, 例如:
        LightDB1.0-comparison-V202403-02-000-debug.zip
        LightDB1.0-multiplex-V202403-02-000-debug.zip
        LightDB1.0-unisql-V202403-02-000-debug.zip
         (default ".")
  -service_name string
        支持对多个微服务进行一键替换部署,多个微服务之间用英文逗号分隔比如a,b,c,默认是空串表示所有的微服务都执行一键替换
# 为服务执行一键集成统一sql和多发
[root@liangdong30629 deploy]# ./multiplex_deploy_x86_64
2025/07/09 16:31:46 安装前做的检查范围如下:
2025/07/09 16:31:46 1. 命令行参数检查:
2025/07/09 16:31:46    - 检查 config_file 对应的配置文件是否存在。
2025/07/09 16:31:46    - 检查 package_dir 对应的目录是否存在。
2025/07/09 16:31:46    - 检查 package_dir 下的 unisql.conf  jrescloud.properties 文件是否存在。
2025/07/09 16:31:46 2. 安装包检查:
2025/07/09 16:31:46    -  package_dir 目录下查找 comparison、multiplex  unisql 安装包,并验证版本一致性。
2025/07/09 16:31:46 3. 服务名称检查:
2025/07/09 16:31:46    - 确保命令行参数 service_name 中指定的微服务名称在配置文件中有对应配置。
2025/07/09 16:31:46 4. 配置文件内容检查:
2025/07/09 16:31:46    - 校验配置文件中各属性是否存在且合理。
2025/07/09 16:31:46    - 检查配置文件中各目录路径是否存在或可创建。
2025/07/09 16:31:46    - 检查源库、目标库及多发目标库列表的配置是否合理。
2025/07/09 16:31:46    - 检查数据库连接串配置文件中相关配置项是否存在。
2025/07/09 16:31:46 解析命令行参数成功,各参数值如下:
2025/07/09 16:31:46 package_dir: .
2025/07/09 16:31:46 config_file: config.json
2025/07/09 16:31:46 auto_create_dir: false
2025/07/09 16:31:46 service_name:
2025/07/09 16:31:46 目标目录不存在时不会自动创建目录
2025/07/09 16:31:46 开始校验命令行参数的内容
2025/07/09 16:31:46 检测一键配置的配置文件 config.json 是否存在
2025/07/09 16:31:46 检测目录 . 下统一 sql 文件 unisql.conf 和多发配置文件 jrescloud.properties 是否存在
2025/07/09 16:31:46 1 命令行参数检测通过
2025/07/09 16:31:46 检测目录 . 下comparison,multiplex,unisql安装包是否存在
2025/07/09 16:31:46 comparison:LightDB1.0-comparison-V202501-00-000.zip
2025/07/09 16:31:46 multiplex:LightDB1.0-multiplex-V202501-00-000.zip
2025/07/09 16:31:46 unisql:LightDB1.0-unisql-V202501-00-000.zip
2025/07/09 16:31:46 2 comparison,multiplex,unisql安装包查找和验证通过
2025/07/09 16:31:46 配置文件 config.json 解析成功
2025/07/09 16:31:46 开始提取和校验服务名称集合
2025/07/09 16:31:46 3 服务名称校验通过
2025/07/09 16:31:46 开始检查配置文件内容
2025/07/09 16:31:46 检查配置文件 config.json 中配置的工作目录(user.dir)
2025/07/09 16:31:46 检查配置文件 config.json 中配置的动态库目录(unisql_lib_full_path)
2025/07/09 16:31:46 检查配置文件 config.json 中配置的jar包目录(unisql_jar_dir.dir)
2025/07/09 16:31:46 检查配置文件 config.json 中源库与目标库信息
2025/07/09 16:31:46 配置文件 config.json 中配置的真多发,配置项multiplex=true
2025/07/09 16:31:46 检查配置文件 config.json 中数据库连接串
2025/07/09 16:31:46 检查文件 /data/unisql_trunk/multiplex/deploy/test/test.properties 中配置项 dyn.spring.datasources[0].driverClassName 和配置项 dyn.spring.datasources[0].url 是否存在
2025/07/09 16:31:46 4 配置文件内容检查通过
2025/07/09 16:31:46 开始安装服务:  hsamlwl
2025/07/09 16:31:46 删除文件: /data/unisql_trunk/multiplex/deploy/test/lib/unisql.linux.x86_64.so
2025/07/09 16:31:47 复制文件: LightDB1.0-unisql-V202501-00-000/c/x86_64/lib/unisql.linux.x86_64.so -> /data/unisql_trunk/multiplex/deploy/test/lib/unisql.linux.x86_64.so
2025/07/09 16:31:47 复制1个文件
2025/07/09 16:31:47 复制文件:  /data/unisql_trunk/multiplex/deploy/unisql.conf  ->  /data/unisql_trunk/multiplex/deploy/test/config/unisql.conf
2025/07/09 16:31:47 删除文件: /home/lightdb/test/jar/sql-convert-runtime-fat-25.1.0.jar
2025/07/09 16:31:47 复制文件: LightDB1.0-unisql-V202501-00-000/sql-convert-runtime-fat-25.1.0.jar -> /home/lightdb/test/jar/sql-convert-runtime-fat-25.1.0.jar
2025/07/09 16:31:47 复制1个文件
2025/07/09 16:31:47 删除文件: /home/lightdb/test/jar/unisql-compare-client-fat-25.1.0.jar
2025/07/09 16:31:47 复制文件: LightDB1.0-comparison-V202501-00-000/unisql-compare-client-fat-25.1.0.jar -> /home/lightdb/test/jar/unisql-compare-client-fat-25.1.0.jar
2025/07/09 16:31:47 复制1个文件
2025/07/09 16:31:47 复制文件:  /data/unisql_trunk/multiplex/deploy/jrescloud.properties  ->  /data/unisql_trunk/multiplex/deploy/test/config/jrescloud.properties
2025/07/09 16:31:47 更新驱动配置项 /data/unisql_trunk/multiplex/deploy/test/test.properties: dyn.spring.datasources[0].driverClassName = com.hundsun.lightdb.unisql.proxy.Driver
2025/07/09 16:31:47 更新数据源配置项 /data/unisql_trunk/multiplex/deploy/test/test.properties: dyn.spring.datasources[0].url = jdbc:unisql:postgresql://10.20.47.203:6434/comparison?sourceDialect=mysql&targetDialect=mysql&multiplexTargetDialects=mysql,oceanbase-oracle&mode=MULTIPLEX
2025/07/09 16:31:47 安装完成

10.9.3.6. 异常退出场景

该程序在以下几种情况下会退出:

  1. 命令行参数相关

    • 参数解析出错:无法正确解析命令行参数,程序会因无法继续执行而退出。

    • 获取package_dir绝对路径失败:程序无法确定安装包资源路径,从而退出。

    • config_file对应的配置文件不存在:配置文件不存在,程序无法获取配置信息,故退出。

    • package_dir目录不存在:检查发现该目录不存在,程序无法找到相关资源,因此退出。

    • package_dir下unisql.conf或jrescloud.properties文件不存在:在package_dir路径下检查这两个文件,若不存在,程序因缺少关键配置文件而退出。

  2. 安装包相关

    • 未找到包:在 package_dir中遍历查找统一 SQL 相关安装包(comparison、multiplex、unisql)时,若有任何一个包未找到,导致程序退出。

    • 版本不一致:在检查安装包版本时,若发现版本不一致,程序报错退出。

  3. 配置文件相关

    • 配置文件解析失败:在解析config.json文件时,若文件格式错误、缺失必要字段等,导致无法正确解析,程序退出。

    • 服务名称校验不通过:校验命令行参数中的服务名称集合是否包含在配置文件的服务名称集合中,若不通过则程序退出。

    • 配置文件属性内容校验不合理:检查配置文件属性内容,如目录不存在且 auto_create_dirfalse 等情况,若发现不合理,程序报错退出。

  4. 安装操作相关

    • 具体安装过程中出现错误:执行安装操作,包括文件复制、配置项更新等步骤,若其中任何一步出错,程序将终止。例如,文件复制失败、配置项更新失败等。

  5. 检查不通过的样例如下,打印详细报错信息

    [root@liangdong30629 deploy]# ./multiplex_deploy
    2025/07/10 16:02:56 安装前做的检查范围如下:
    2025/07/10 16:02:56 1. 命令行参数检查:
    2025/07/10 16:02:56    - 检查 config_file 对应的配置文件是否存在。
    2025/07/10 16:02:56    - 检查 package_dir 对应的目录是否存在。
    2025/07/10 16:02:56    - 检查 package_dir 下unisql.conf 和 jrescloud.properties 文件是否存在。
    2025/07/10 16:02:56 2. 安装包检查:
    2025/07/10 16:02:56    - 在命令行参数 package_dir 对应的目录下查找 comparison、multiplex 和 unisql 安装包,并验证版本一致性。
    2025/07/10 16:02:56 3. 服务名称检查:
    2025/07/10 16:02:56    - 确保命令行参数 service_name 中指定的微服务名称在配置文件中有对应配置。
    2025/07/10 16:02:56 4. 配置文件内容检查:
    2025/07/10 16:02:56    - 校验配置文件中各属性是否存在且合理。
    2025/07/10 16:02:56    - 检查配置文件中各目录路径是否存在或可创建。
    2025/07/10 16:02:56    - 检查源库、目标库及多发目标库列表的配置是否合理。
    2025/07/10 16:02:56    - 检查数据库连接串配置文件中相关配置项是否存在。
    2025/07/10 16:02:56 解析命令行参数成功,各参数值如下:
    2025/07/10 16:02:56     package_dir(包目录): .
    2025/07/10 16:02:56     config_file(配置文件): config.json
    2025/07/10 16:02:56     auto_create_dir(目标目录不存在是否自动创建): false,目标目录不存在时不会自动创建目录
    2025/07/10 16:02:56     service_name(服务名称):
    2025/07/10 16:02:56 1 开始校验命令行参数的内容
    2025/07/10 16:02:56 检测一键配置的配置文件 config.json 是否存在
    2025/07/10 16:02:56 检测目录 . 下统一 sql 文件 unisql.conf 和多发配置文件 jrescloud.properties 是否存在
    2025/07/10 16:02:56 1 命令行参数检测通过
    2025/07/10 16:02:56 2 检测目录 . 下comparison,multiplex,unisql安装包是否存在
    2025/07/10 16:02:56     comparison:LightDB1.0-comparison-V202501-00-000.zip
    2025/07/10 16:02:56     multiplex:LightDB1.0-multiplex-V202501-00-000.zip
    2025/07/10 16:02:56     unisql:LightDB1.0-unisql-V202501-00-000.zip
    2025/07/10 16:02:56 2 安装包检查通过,comparison,multiplex,unisql安装包存在且版本一致
    2025/07/10 16:02:56 配置文件 config.json 解析成功
    2025/07/10 16:02:56 3 开始提取和校验服务名称集合
    2025/07/10 16:02:56 3 服务名称校验通过
    2025/07/10 16:02:56 4 开始检查配置文件内容
    2025/07/10 16:02:56 检查配置文件 config.json 中第 1 个配置
    2025/07/10 16:02:56     检查配置的工作目录(user.dir) ,该目录用于存放统一sql配置文件unisql.conf和多发配置文件jrescloud.properties
    2025/07/10 16:02:56     检查配置的动态库目录(unisql_lib_full_path),该目录用于存放统一sql动态库(*.so)
    2025/07/10 16:02:56     检查配置的jar包目录(unisql_jar_dir.dir),该目录用于存放多发比对依赖的jar包(sql-convert-runtime-fat-*.jar和unisql-compare-client-fat-.*.jar)
    2025/07/10 16:02:56     检查配置的源库,目标库和多发目标库列表信息
    2025/07/10 16:02:56             源库信息: mysql
    2025/07/10 16:02:56             目标库信息: mysql
    2025/07/10 16:02:56             多发目标库列表信息: [mysql oracle oceanbase-oracle]
    2025/07/10 16:02:56     配置的真多发,配置项multiplex=true
    2025/07/10 16:02:56     检查配置的数据库连接串
    2025/07/10 16:02:56             检查配置的数据源文件 /home/lightdb/test/test.properties 是否存在
    2025/07/10 16:02:56             检查配置的数据源文件 /home/lightdb/test/test.properties 中配置项 hs.datasource.default.driver-class-name 和配置项 hs.datasource.default.url 是否存在
    2025/07/10 16:02:56 检查配置文件 config.json 中第 2 个配置
    2025/07/10 16:02:56     检查配置的工作目录(user.dir) ,该目录用于存放统一sql配置文件unisql.conf和多发配置文件jrescloud.properties
    2025/07/10 16:02:56     检查配置的动态库目录(unisql_lib_full_path),该目录用于存放统一sql动态库(*.so)
    2025/07/10 16:02:56     检查配置的jar包目录(unisql_jar_dir.dir),该目录用于存放多发比对依赖的jar包(sql-convert-runtime-fat-*.jar和unisql-compare-client-fat-.*.jar)
    2025/07/10 16:02:56     检查配置的源库,目标库和多发目标库列表信息
    2025/07/10 16:02:56             源库信息: mysql
    2025/07/10 16:02:56             目标库信息: mysql
    2025/07/10 16:02:56             多发目标库列表信息: [mysql oracle oceanbase-oracle]
    2025/07/10 16:02:56     配置的真多发,配置项multiplex=true
    2025/07/10 16:02:56     检查配置的数据库连接串
    2025/07/10 16:02:56             检查配置的数据源文件 /home/lightdb/test/test.properties 是否存在
    2025/07/10 16:02:56             检查配置的数据源文件 /home/lightdb/test/test.properties 中配置项 hs.datasource.default.driver-class-name 和配置项 hs.datasource.default.url 是否存在
    2025/07/10 16:02:56 4 配置文件内容检查发现问题
    2025/07/10 16:02:56 安装失败,一键配置程序退出,错误:配置文件 config.json 中配置存在以下问题:
    第[1]个配置存在问题:user.dir 配置项对应的目录 /home/lightdb/test/config 不存在。可通过命令参数 -auto_create_dir 设置为 true 以自动创建。
    第[1]个配置存在问题:unisql_lib_full_path 配置项对应的目录 /home/lightdb/test/lib 不存在。可通过命令参数 -auto_create_dir 设置为 true 以自动创建。
    第[1]个配置存在问题:unisql_jar_dir.dir 配置项对应的目录 /home/lightdb/test/jar2 不存在。可通过命令参数 -auto_create_dir 设置为 true 以自动创建。
    第[1]个配置存在问题:配置项 MultiplexTargetDialects(多发目标库列表) 中只能有一个oracle或者一个mysql(源库只能放一个), 当前配置的多发目标库列表 [mysql oracle oceanbase-oracle]
    第[1]个配置存在问题:无效的数据库类型: [oceanbase-oracle],当前配置的多发目标库列表 [mysql oracle oceanbase-oracle],支持的多发目标库范围 [LIGHTDB_MYSQL LIGHTDB_ORACLE LIGHTDB_POSTGRESQL DM MYSQL TDSQL_MYSQL MYSQL_80 OCEAN_BASE_MYSQL OCEAN_BASE_ORACLE OPENGAUSS ORACLE POSTGRESQL GOLDENDB_MYSQL GOLDENDB_ORACLE GAUSSDB_MYSQL GAUSSDB_ORACLE SQLSVR TDSQL_PG_ORACLE GAUSSDB500_ORACLE SQLITE LTMEMDB ORACLE_19C GAUSSDB_MYSQL_B TDSQL_PG]
    第[1]个配置存在问题:文件打开失败: open /home/lightdb/test/test.properties: no such file or directory
    第[2]个配置存在问题:user.dir 配置项对应的目录 /home/lightdb/test/config 不存在。可通过命令参数 -auto_create_dir 设置为 true 以自动创建。
    第[2]个配置存在问题:unisql_lib_full_path 配置项对应的目录 /home/lightdb/test/lib 不存在。可通过命令参数 -auto_create_dir 设置为 true 以自动创建。
    第[2]个配置存在问题:配置项 MultiplexTargetDialects(多发目标库列表) 中只能有一个oracle或者一个mysql(源库只能放一个), 当前配置的多发目标库列表 [mysql oracle oceanbase-oracle]
    第[2]个配置存在问题:无效的数据库类型: [oceanbase-oracle],当前配置的多发目标库列表 [mysql oracle oceanbase-oracle],支持的多发目标库范围 [LIGHTDB_MYSQL LIGHTDB_ORACLE LIGHTDB_POSTGRESQL DM MYSQL TDSQL_MYSQL MYSQL_80 OCEAN_BASE_MYSQL OCEAN_BASE_ORACLE OPENGAUSS ORACLE POSTGRESQL GOLDENDB_MYSQL GOLDENDB_ORACLE GAUSSDB_MYSQL GAUSSDB_ORACLE SQLSVR TDSQL_PG_ORACLE GAUSSDB500_ORACLE SQLITE LTMEMDB ORACLE_19C GAUSSDB_MYSQL_B TDSQL_PG]
    第[2]个配置存在问题:文件打开失败: open /home/lightdb/test/test.properties: no such file or directory