更新时间:2024-10-21 GMT+08:00
分享

常见问题

异常1:Username is Emty!

异常:ERROR com.huawei.rainbow.utils.parser.DbNodeConfParser:46 - [] - appConfStr is not json format

原因:业务直接往ETCD里面set值,但set格式不是有效的json格式。

解决:使用工具检查,是否使用正确的Json串。

异常2:Access denied for user

异常:java.sql.SQLException: Access denied for user 'xxxx'@'xx.xx.xx.xx' (using password: YES)

  • 原因1:密码错误或者服务器分配权限错误。现网问题定位占了60%左右。数据库登录密码是否使用了明文!

    定位:

    1. 请认真检查密码配置,检查MySQL权限是否分配正确。
    2. 通过dump内存,搜索相关关键字判断解密字符为需要的字符串。

    解决:使用正确的密码。

  • 原因2:或者是业务账号配错。

    解决:删除SDK配置信息,重新在wisedba新建业务账号,在SDK配置重新录入配置信息。

异常3:NodeDataSource can't init或者init dataSource Params Error!

异常:com.huawei.rainbow.exception.RainbowRunTimeException: NodeDataSource can't init: dsKey=xx.xx.xx.xx:3306@mysql或者Caused by: com.huawei.rainbow.exception.DbNodeInitialException: [ConfigError]init dataSource Params Error! config is

  • 原因1:大部分就是密码为null或者空串。

    定位:

    1. 请认真检查密码配置是否解密成功。通过搜索Rainbow日志关键字:Password is Empty! 请检查解密类是否继承了基类com.huawei.rainbow.utils.PasswordCoder。
    2. 搜索rainbow日志关键字:DbNodeConfig Check,查看是否校验失败。

    解决:使用正确的密码。

  • 原因2:如果用的是cloud+stsl连的高斯数据库,原因是没有STS的调用步骤。

    通过搜索rainbow日志关键字:Password is Empty!

    解决:正确调用STS。

  • 原因3:本地连接报这个错。

    解决:

    1. 先把配置信息删除,给Schema创建新的业务账号,新增配置信息。
    2. 把config目录下的rainbow.properties里面的ETCD地址和密码注释掉。

异常4:dbGroupKey can not be null

异常:ParameterErrorException: dbGroupKey can not be null, length need bigger than 0(或者类似参数异常错误)。

原因1:dbGroupKey为null或者空串。 必填字段会做参数校验,请检查相关参数是否设置。

原因2:确定是否在rainbow.properties 中配置ETCD地址。

解决: 找到设置参数的地方,咨询核对配置的appName,dbGroupKey,dbName是否正确。

异常5:Key not found, cause 或者 item lose

异常:类似 Key not found, cause: /Dbmonitor/status/DB/Services/xzjDB/xzjDB/activeDBs/mysql222, at index: 211562166

或者: item lose 关键字

或者:Caused by: com.huawei.rainbow.exception.ParameterErrorException: xxxx can not be null, length need bigger than 0

  • 原因1:检查ETCD的IP配置。
  • 原因2:在DCG导入的监控:是否监控成功(管理台亮绿灯),如果没有成功,一般是dbmonitor的权限没有配置正确,请检查。如果已经成功,查看前台的权重是否生成?没有生成则需要到后台查看。

    解决:查看DCG连接池配置信息是否生成,若无连接池配置信息,则手动添加。

  • 原因3: 配置的appName(DCG界面的serviceName),appGroupKey(DCG的ClusterName),DBName(DCG的dbNname)是否配置正确。经常有业务将appName、appGroupKey与DCG配置的值搞得不一致,从而启动不了。
  • 原因4:rainbow.properties文件路径没有读到。 关键字 "no etcd IP configured" 。
  • 原因5:业务检查下,是否存在三方件引入的netty版本不一致导致冲突,检查netty-all版本和单独依赖的netty-handle等版本是否一致,如果不一致请业务统一升级到最新版本保持一致。
  • 原因6:业务集成Rainbow使用的是oneJar的方式,在oneJar内和外面都定义了rainbow.properties 文件,存在冲突问题。验证方式:logback配置 jetcd日志com.huawei.dcs.jetcd、com.huawei.wisecloud.jetcd为INFO级别连接时会打印ETCD的地址,如:
    <AsyncLogger name="com.huawei.dcs.jetcd" level="INFO" includeLocation="true" additivity="false">
         <AppenderRef ref="rainbow-common"/>
    </AsyncLogger>
    <AsyncLogger name="com.huawei.wisecloud.jetcd" level="INFO" includeLocation="true" additivity="false">
         <AppenderRef ref="rainbow-common"/>
    </AsyncLogger>

定位:

  1. 通过命令检查ETCD里面是否已经存在相关值。

    curl http://{etcdip:port}/v2/keys/Dbmonitor/conf/DB/Services/{appName}/{dbGroupKey}/DBnames/{dbName}/{IP:port}

    curl http://{etcdip:port}/v2/keys/Dbmonitor/status/DB/Services/{appName}/{dbGroupKey}/activeDBs/{dbName}

    {xxx}为变量,替换成实际的字段。

  2. rainbow.properties文件必须放到classpath目录下,否则读取不到。classpath目录下不能有多级目录,如classpath:db/目录。

解决:检查配置的 appName,appGroupKey,DBName字段是否正确。配置的ETCD地址是否需要连接的地址。appName对应DCG的ServiceName,appGroupKey对应 instanceName。业务配置的appName是老的字段,导致报此错误。

异常6:datasource.properties没有更新,或者没有拉取到某个数据库配置

原因1:ETCD地址是否配错。

原因2:检查是否配置了DBDataSource的懒加载模式,只有当用数据库的时候才初始化,拉取配置。

定位:

  1. 检查ETCD地址是否配错,查看日志是否有ETCD连接相关的错误。如果有,请修改重启。
  2. 检查是否配置了DBDataSource的懒加载模式、只有当用数据库的时候才初始化,拉取配置。如果是,触发一次数据库操作,看下是否更新。

异常7:启动时报ETCD fault,can't not connect

原因1:ETCD连接不上。

原因2:调用close()方法后,再调用了get etcd的方法。

定位:

1. 检查rainbow.properties文件路径有没有读到。 关键字 "no etcd IP configured" 。

2. 检查日志是否打印“close rainbow instance”关闭了Rainbow。

异常9:启动时报java.sql.SQLException: NodeDataSource XXXX@XXXX has closed

原因:Rainbow已经调用了close方法,导致无数据源。检查nuwa.out是不是有其他失败异常。

定位:检查日志中是否打印了“close rainbow instance”关闭了Rainbow。初始化失败时也会调用close方法。

异常10:启动时报Could not create connection to database server. Attempted reconnect 3 times. Giving up

原因:初始化失败,ping一下检查是否数据库是否联通。

相关文档