问题现象
应用启动一段时间后,无法访问 Web 版 ODC 地址。
问题原因
| 报错信息 | 常见原因 |
|---|---|
| 应用无法连接元数据库导致启动失败 |
|
| 升级执行数据迁移失败 | ODC V3.2.0 之前的版本升级到更高版本时,存在已有的 admin 账号名称冲突。 |
| 容器化部署场景下由于宿主机 Docker 的网络设定错误导致无法访问 | Docker 启动网络参数配置端口映射,但 Docker 内 DNS 寻址故障。 |
解决方法
查询 ODC 日志 odc.log。
无法连接元数据库
此问题可能因用户在启动参数中填写错误元数据库的信息导致的:元数据库的 endpoint 错误或者元数据库的账户密码错误。
具体原因需要根据 ODC 的日志来判断。通常,由于元数据库因素导致的启动失败会在日志中发现如下打印,关键字为:Could not connect to address。

用户需要对启动参数中的元数据库信息做逐一检查,建议通过 OBClient 在 ODC 的部署环境中进行实际连接测试,确保元数据库连接信息无误。
docker run 参数小技巧
使用 docker run 启动 odc-server docker 时,需要通过 -e 设置环境变量值,该变量值可以使用 export命令设置后在 docker run 中直接引用,或者直接设置在 docker run -e 参数列表中。
推荐使用 export命令设置后在 docker run 中直接引用的方式,因为
密码字段通常会包含特殊字符,如包含 $$ 符号,在 shell 中会被解析为进程号导致含义出错,docker run 中引用变量值可避免该问题。
更安全,避免在宿主机通过 ps 命令显示 MetaDB 连接信息。
示例:使用 export命令设置后在 docker run 中直接引用。
#创建 metadb,配置启动参数配置
export DATABASE_HOST=***
export DATABASE_PORT=***
export DATABASE_NAME=***
export DATABASE_USERNAME=***
export DATABASE_PASSWORD=***
# 启动 odc-server docker
ODC_DOCKER_NAME="odc-server" &&
MEMORY_LIMIT=8G &&
docker run -d -it --name ${ODC_DOCKER_NAME} --network host \
--cpu-period 100000 --cpu-quota 400000 --memory=${MEMORY_LIMIT} \
-e PROFILE_MODE -e DATABASE_HOST -e DATABASE_PORT -e DATABASE_NAME \
-e DATABASE_USERNAME -e DATABASE_PASSWORD \
${ODC_DOCKER_IMAGE_ID}
升级执行数据迁移失败
3.1.x 之前的版本升级到 3.2.0 及之后的版本,内置 admin 账号名称冲突
为避免账号冲突,ODC 启动时会进行预检查,如果存在内置账号名称冲突则需要将之前版本冲突的账号重命名。
查看odc.log确认具体的出错位置。日志关键字可能为下述一种:
Failed to migrate users
Renamed account name conflicts
Failed to migrate odc users
Duplicated account name

在日志中查询 ODC 生成的rename.properties文件路径,该文件用于对系统中的同名 admin 用户进行更名。
[2022-03-23 20:15:31.837][main][,,][ERROR][com.alipay.odc.metadb.alipay.V3202BuiltInResourceMigrate][103]: Failed to migrate odc users, the reason is that the account name and the reserved account have the same name, reservedAccountNames=admin, renameFile=/Users/yh263208/oceanbase/odc/ob-odc/app/odc-web-starter/target/classes/static/tmp/rename.properties查看rename.properties文件内容。
#Please enter the rename of the conflicting account name here #Wed Mar 23 20:15:31 CST 2022 admin=将新的账户名填写在冲突名称之后,再重启 ODC 应用。
升级时 MetaDB 数据迁移出错
如果不是内置账号名称冲突导致的数据迁移失败,则需要根据迁移历史和日志做进一步分析。
连接到 ODC 的 MetaDB,确定应用的升级是否成功。
ODC 的元数据库 migrate_schema_history表记录了应用的升级历史,可以检查最新一条记录的success是否为1,如果是则证明应用升级成功,否则证明升级失败。
查询参考语句:
-- 按照版本号和执行脚本聚合查询,原始的记录数量可能因为反复尝试重新运行失败的脚本而较多 select version, script, success, max(install_rank) as install_rank from migrate_schema_history group by version, script, success order by install_rank desc;检查日志,根据odc.log中的报错信息确定具体的升级失败原因。
Docker 网络设置问题
如果是通过 Docker 技术部署 ODC 应用,需要排查 Docker 的网络设置是否正确。在 ODC 部署手册中有 2 种网络模式以供选择:
host 模式,这种模式将复用宿主机的网络,用户无需进行任何网络设定即可使用。
对相应的网络端口映射,以保证 ODC 和外界的网络通信。