需求描述:接到需求,zookeeper需要配置密码。配置好密码后,发现mc服务启动失败。
zk配置密码操作步骤:
找到zk服务的目录,执行./zkCli.sh登录本地zk服务。然后执行如下命令:
addauth digest username:password
create /path
setAcl /path auth:username:password:cdrwa
getAcl /path
修改mc服务的参数configUrl地址为:IP地址:端口/路径?user=用户名&password=密码。例如127.0.0.1:2181/why?user=cosmic&password=password
重启MC服务,一直报错,MC访问报503错误。
原因分析:
1. MC启动注册服务时,服务报错,根据报错信息,找到代码点如下:
2. 报错是initServiceConfig()方法,但实际出错是这个方法传递的参数config不对。我们在断点调试的时候,发现registryConfigs的地址只有地址,没有用户名和密码。
3. zk配置了密码,但registryCoonfigs没有密码信息,在这段代码中搜registryConfigs,看下这个参数是如何初始化的。如下图:
4. 如上图,获取zk的地址,先从dubbo.registry.address获取,若获取为空,再从configUrl获取。我们找一个正常的环境,切换公共参数服务,搜下dubbo.registry.address,发现这个值默认是IP:port
5. 那么我们设置dubbo.registry.address,不读取configUrl这样就可以解决问题了
解决方案:在mc服务/bin/setappenv.sh,添加属性-Ddubbo.registry.address=zkIP:port。如图:
推荐阅读