dubbo zookeeper上出现大量的节点,并且出现很多数字admin://10.11.119.219/MidBuisPlatServiceImpl.premiumOutSide%25252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252528%25252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252529?category=providers,consumers&check=false&classifier=&group=&interface=MidBuisPlatServiceImpl.premiumOutSide%25252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252528%25252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252529&version=*
导致Len error 16809104 zookeeper 无法正常工作。
dubbo的版本是2.5.3.
可以先升级下 Dubbo 试试,你这版本有点老啊
另外想问一下Home > Registries > localhost:2181 > Registered | Subscribed, dubbo monitor下的这个数据Subscribed consumer Consumer URL:是存储在哪的?我想手动删除。
服务消费者 url 会在 zookeeper 中注册,你可以到 zookeeper 中删除
zookeeper的node节点里删除了,但是Home > Registries > localhost:2181 > Registered | Subscribed 下一直有这个信息,不知道存到哪个地方?
消费者注册信息在 /dubbo/com.foo.BarService/consumers 下,可以直接用 zkCli 登录 zk 删除。
还有你的 dubbo monitor 可以用最新版试试。
问题出在dubbo admin的注册类上,监听收到了ZK的节点通知,结果字符不符合规则,服务名包含非法字符转义导致admin BUG 不停的新建25节点,直到ZK崩溃
@lanpeiluoqi
提交一个pr修复一下吧
@nzomkxia
@nzomkxia could you pls. double check if it applies to the new dubbo admin?
develop分支上的版本无法重现,请试一下,如果重现的话请提供demo,并且在https://github.com/apache/incubator-dubbo-ops 报issue
问题出在dubbo admin的注册类上,监听收到了ZK的节点通知,结果字符不符合规则,服务名包含非法字符转义导致admin BUG 不停的新建25节点,直到ZK崩溃
请问问题现在解决了吗?有什么修复的方法
问题出在dubbo admin的注册类上,监听收到了ZK的节点通知,结果字符不符合规则,服务名包含非法字符转义导致admin BUG 不停的新建25节点,直到ZK崩溃
请问问题现在解决了吗?有什么修复的方法
同问 @xiaocainia
已经修复了,在admin读zk的节点信息是加入正则过滤,try掉这条数据或者删除就好了!
发自我的 iPhone
在 2019年5月17日,11:41,yehuan <[email protected]notifications@github.com> 写道:
问题出在dubbo admin的注册类上,监听收到了ZK的节点通知,结果字符不符合规则,服务名包含非法字符转义导致admin BUG 不停的新建25节点,直到ZK崩溃
请问问题现在解决了吗?有什么修复的方法
同问 @xiaocainiahttps://github.com/xiaocainia
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHubhttps://github.com/apache/incubator-dubbo/issues/2808?email_source=notifications&email_token=AE5PDP26UFP4QGYPAFCP6O3PVYSOLA5CNFSM4GFQ7ISKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODVTUNZY#issuecomment-493307623, or mute the threadhttps://github.com/notifications/unsubscribe-auth/AE5PDP3IOEFC2QW66RSM62TPVYSOLANCNFSM4GFQ7ISA.
同遇到该问题,原因是人为或程序往注册中心上写了带特殊字符的path(例如 ':' 、'<' 、'?' 等)。
问题原因:
dubbo-admin,dubbo-keeper类似第三方dubbo服务监控程序,都会使用到Registry实现类去订阅服务信息。
以我司使用zookeeper注册中心为例,ZookeeperRegistry订阅服务接口doSubscribe,非订阅所有服务(订阅到的URL服务名为Constants.ANY_VALUE, 即'*')的情况下,则执行下面分支代码:
// ZookeeperRegistry源代码
for (String path : toCategoriesPath(url)) {
...
zkClient.create(path, false);
...
}
notify(url, listener, urls);
问题出在toCategoriesPath这个方法里,因为可以看到后面是会把toCategoriesPath(url)后的path往zk上写节点。
toCategoriesPath中有个toServicePath方法:
String name = url.getServiceInterface();
if (Constants.ANY_VALUE.equals(name)) {
return toRootPath();
}
return toRootDir() + URL.encode(name);
问题就出现在URL.encode(name)上,如果带有特殊字符的服务往zk上注册,它的url就会被编码,然后就出现开头的%25。由于dubbo的推送机制,新注册的path信息又会被订阅到,然后走到相同的代码中,再次被编码,此时%号又被编码为%25,以此无限循环,发现服务名不断变长,path节点一直在增加。就出现了楼主所述的问题。
这个问题导致的另一个问题是,zkClient默认读取节点信息的package大小有限制,所以当服务path增长到一定程度时,zkClient将报错无法再读取到服务信息,此时消费方无法再更新服务上下线信息。
另外,这个死循环也导致zk服务器IO打满,CPU100%,最后挂了。
解决办法:
一般写dubbo服务,Java类命名与XML规范就规避了这种特殊字符的问题。特殊情况是使用泛化调用的时候用字符串写服务名称,命名上可能就放飞自我了。又例如我司的情况,有同步zk上path节点的场景,使用自研程序做这个事情的时候出现bug导致往path上写了特殊字符,从而触发上述问题。
我们更正同步器的bug,同时给底层dubbo的jar打上补丁,过滤特殊字符的URL编码,并更新dubbo-admin,dubbo-keeper底层dubbo的jar。不过如果有人手写去改动path信息,那还是可能会触发这个问题,毕竟不能保证所有订阅服务的第三方都打上了补丁(🌚感觉发现一种报复手段)。
考虑减少对业务方的影响,可以升级zk(打补丁),对于含特殊字符或者超出一定长度的path就拒绝创建,这样也可以打破上述的循环问题,这样只用重启zk就可以了。
The same problem we met
dubbo-admin makes this
Most helpful comment
同遇到该问题,原因是人为或程序往注册中心上写了带特殊字符的path(例如 ':' 、'<' 、'?' 等)。
问题原因:
dubbo-admin,dubbo-keeper类似第三方dubbo服务监控程序,都会使用到Registry实现类去订阅服务信息。
以我司使用zookeeper注册中心为例,ZookeeperRegistry订阅服务接口doSubscribe,非订阅所有服务(订阅到的URL服务名为Constants.ANY_VALUE, 即'*')的情况下,则执行下面分支代码:
问题出在toCategoriesPath这个方法里,因为可以看到后面是会把toCategoriesPath(url)后的path往zk上写节点。
toCategoriesPath中有个toServicePath方法:
问题就出现在URL.encode(name)上,如果带有特殊字符的服务往zk上注册,它的url就会被编码,然后就出现开头的%25。由于dubbo的推送机制,新注册的path信息又会被订阅到,然后走到相同的代码中,再次被编码,此时%号又被编码为%25,以此无限循环,发现服务名不断变长,path节点一直在增加。就出现了楼主所述的问题。
这个问题导致的另一个问题是,zkClient默认读取节点信息的package大小有限制,所以当服务path增长到一定程度时,zkClient将报错无法再读取到服务信息,此时消费方无法再更新服务上下线信息。
另外,这个死循环也导致zk服务器IO打满,CPU100%,最后挂了。
解决办法:
一般写dubbo服务,Java类命名与XML规范就规避了这种特殊字符的问题。特殊情况是使用泛化调用的时候用字符串写服务名称,命名上可能就放飞自我了。又例如我司的情况,有同步zk上path节点的场景,使用自研程序做这个事情的时候出现bug导致往path上写了特殊字符,从而触发上述问题。
我们更正同步器的bug,同时给底层dubbo的jar打上补丁,过滤特殊字符的URL编码,并更新dubbo-admin,dubbo-keeper底层dubbo的jar。不过如果有人手写去改动path信息,那还是可能会触发这个问题,毕竟不能保证所有订阅服务的第三方都打上了补丁(🌚感觉发现一种报复手段)。
考虑减少对业务方的影响,可以升级zk(打补丁),对于含特殊字符或者超出一定长度的path就拒绝创建,这样也可以打破上述的循环问题,这样只用重启zk就可以了。