解决dubbo注册zookepper服务IP乱入问题

最近升级生产环境的一个项目,项目引入了dubbo+zookepper的分布式服务治理框架。在应用的发布的时候出现一个怪问题。zookepper服务是起在服务器172.16.x.x上。消费者跟提供者部署在同一台机子也是172.16.x.x上,zookepper地址写的都是172.16.x.x。消费者发布到服务器上注册的服务地址就变成了172.26.x.x,这个地址消费者根本就找不到,所以老是报连接超时。按道理来说应该是172.16.x.x是消费者注册的地址才对。开始以为是代码里写了一个172.26.x.x这样的地址,搜了一遍没有找到。搜了一遍服务器的配置也没有这样一个地址。这个地址不知道是从哪里来的。应为服务消费者和zookepper在一台机器上,将服务提供者的注册地址改成127.0.0.1,发现还是一样的注册上去后就变成了172.26.x.x。于是怀疑是不是服务器上做了地址转发什么的或者服务器的ip有问题。

然后在服务器ifconfig一下发现了绑定了2个网卡,这时就找到问题的原因了。

下面是3种解决方法:

1、去掉服务器上的DNS配置
找到服务器上的/etc/resolv.conf 将DNS配置去掉或配置成8.8.8.8或配成172.16.x.x这样这台服务器的DNS不可用。
参考配置如下
nameserver 172.16.x.x
#search localdomain
服务启动的时候会报一个"未知的名称或服务"的错误,但是不要紧,服务可以正常启动。也可以正常注册到zookepper,注册的地址也是真实的服务器地址。客户端可以正常访问。
 
2、在工程duboo注册服务配置文件里指定IP
把管理控制台中dubbo/webapps/ROOT/WEB-INF/dubbo.properties文件中加入dubbo.protocol.host=172.16.x.x,然后在Dubbo服务的dubbo配置文件<dubbo:protocol
 name="dubbo" port="20883"  />中加入 host="172.16.x.x",在Dubbo消费者端加入<dubbo:protocol host="192.168.0.123" />的配置。然后重启Dubbo管理员控制台、停止消费者端,停止服务提供端,启动服务提供端,再启动消费者端。
参考配置如下:
服务提供者provider.xml
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" host="172.16.x.x" port="20883" />
消费者consumer.xml
<dubbo:protocol host="172.16.x.x" />
配置完了后在dubbo-admin控制台可以看到服务提供者注册到zookepper上的dobbo服务已经是正常的172.16.x.x。消费者显示的还是consumer://172.26.x.x/***** 但不影响调用。
 
3、在服务器上/etc/hosts,上配置主机名和注册服务的IP。如:172.16.x.x host2
没有配置之前ping 主机名host2 返回的是172.26.x.x
ping host2
PING host2 (172.26.x.x) 56(84) bytes of data.
64 bytes from 172.26.x.x: icmp_seq=1 ttl=55 time=5.67 ms
在/etc/hosts里配置IP和主机名172.16.x.x host2 后ping主机名host2返回 172.16.x.x
ping host2
PING host2 (172.16.x.x) 56(84) bytes of data.
64 bytes from host2 (172.16.x.x): icmp_seq=1 ttl=64 time=0.024 ms
配置完后,服务注册IP地址正常,消费者可以正常访问。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值