ip地址错误(Dubbo的IP错乱问题)

精英怪
广告

一直用的好好的dubbo框架,前天突然发现测试环境中某模块consumer无法调用producer了,查看错误日志,发现consumer端获取的producer ip地址是错的,而且错的很离谱,我们明明是内网环境ip是10打头,但是获取到的地址是120.197.235.97,用小岳岳的话说就是:“我的天哪!”,难道中毒了?什么鬼?

ip地址错误(Dubbo的IP错乱问题)

先说一下我们dubbo框架的部署情况:

dubbo使用zookeeper做注册中心,一共10来个独立部署的独立模块,出现第一个模块有问题以后,重启其他模块也全部中招(真TM像病毒)

测试环境是一台独立主机,也就是说,加ZK在内的所有东西,都是部署在这一台机器上,IP是内网地址,10打头,可以通过集团网络连接外网,DNS配置为:223.5.5.5(阿里的,很好用),hosts无异常,啥都没配

事发很突然,出问题前硬件环境没有任何修改,服务器配置也没有任何变化,重启那个模块以后就突然出现了开篇的问题

背景交代完毕,开始说解决的心路历程。

作为一个普通人,当然是baidu啦,不过结果不理想,但是先辈们提供的方案至少帮助理顺了思路:

1,编辑/etc/hosts 加入

10.XXX.XXX.XXX localhost test (test为主机名)

这样做的主要目的是,可以将zk的注册地址里面不直接写ip,改为用主机名。窃以为这个方案能解决部分情况的错误,但是对我这种情况无效

2,把/etc/resolv.conf 内的DNS地址改为网关地址

nameserver 10.XXX.XXX.1

原来的DNS是223.5.5.5 确实很好用,但是想必120.197.235.97这个怪胎跟他脱不了干系,照做之,果然有效,producer的注册地址变成了169.254.xx.xxx,虽然还是不对,但是至少有进步了。(169.254段地址是保留地址,需要了解详情请百度)

3,查看网卡配置信息,ifconfig命令

发现服务器正常的4个网卡(eno1,eno2,eno3,eno4)之外多了三个(lo,virxxx,enp0xxxx),难道是dubbo框架自动获取ip地址时取错了网卡?下面是dubbo的源代码,比较简单,大家可以看一下,就知道我这样猜测的原因了:

其中eno1里是真正的网络配置,lo是本机回路这两个肯定是没有问题的。搞怪的应该是 virxxx,enp0xxxx,查了一下,vir是虚拟桥接地址,先执行以下命令删掉:

virsh net-list

virsh net-destroy default

virsh net-undefine default

service libvirtd restart

执行以后发现问题还是没解决,ok,再继续删enp0xxxx,执行命令:

nmtui

出现图形化界面,不过里面出现这个网卡连接是汉语的名字貌似叫“xxx连接”,我给忘了,不碍事,反正除了几个正常的名字能对的上的,就是它了,在图形化操作界面里干掉!退出,再用ifconfig查看,我去,清净了。

重启服务器,一切恢复正常。

总结:

上面主要是做了3个操作:

将本地IP加入hosts(这个在多机环境中,跟我的操作肯定不一致,请区分)

配置DNS,改为网关地址

删除多余的网卡连接

大家服务器配置都不一样,出现问题时完全可以从头操作到底,总有一种适合你。

对了,百度查到还有一种常用的方法,就是去掉zookeeper注册中心,直接改为ip直联,这个感觉也能解决问题,但是这个就有点改动太剧烈。。。没试,也没意义。大家看情况取舍吧。

建议收藏本文!

这个姑娘,不知道有没有人认识,算福利了。

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,222人围观)

还没有评论,来说两句吧...