常见问题
异常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%左右。数据库登录密码是否使用了明文!
- 请认真检查密码配置,检查MySQL权限是否分配正确。
- 通过dump内存,搜索相关关键字判断解密字符为需要的字符串。
解决:使用正确的密码。
异常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或者空串。
- 请认真检查密码配置是否解密成功。通过搜索Rainbow日志关键字:Password is Empty! 请检查解密类是否继承了基类com.huawei.rainbow.utils.PasswordCoder。
- 搜索rainbow日志关键字:DbNodeConfig Check,查看是否校验失败。
解决:使用正确的密码。
- 原因2:如果用的是cloud+stsl连的高斯数据库,原因是没有STS的调用步骤。
通过搜索rainbow日志关键字:Password is Empty!
解决:正确调用STS。
- 原因3:本地连接报这个错。
- 先把配置信息删除,给Schema创建新的业务账号,新增配置信息。
- 把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的权限没有配置正确,请检查。如果已经成功,查看前台的权重是否生成?没有生成则需要到后台查看。
- 原因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>
定位:
- 通过命令检查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}为变量,替换成实际的字段。
- rainbow.properties文件必须放到classpath目录下,否则读取不到。classpath目录下不能有多级目录,如classpath:db/目录。
解决:检查配置的 appName,appGroupKey,DBName字段是否正确。配置的ETCD地址是否需要连接的地址。appName对应DCG的ServiceName,appGroupKey对应 instanceName。业务配置的appName是老的字段,导致报此错误。
异常6:datasource.properties没有更新,或者没有拉取到某个数据库配置
原因1:ETCD地址是否配错。
原因2:检查是否配置了DBDataSource的懒加载模式,只有当用数据库的时候才初始化,拉取配置。
定位:
- 检查ETCD地址是否配错,查看日志是否有ETCD连接相关的错误。如果有,请修改重启。
- 检查是否配置了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一下检查是否数据库是否联通。