众所周知,阿里云的续费是最贵的。最近,又到了续费的时候,原来是两台服务器都是阿里云,使用内网链接,服务运行的并没有问题。最近为了省钱,准备把一台过期的服务器迁移到腾讯云。即下图的服务器B。
迁移的很顺利,但是服务器跑起来就不对了,consumer始终链接不上B的dubbo。
刚开始的配置如下:
服务器A的zookeeper配置IP为B外网IP;
服务器B的zookeeper配置IP为B内网IP。
运行报错,A的consumer连接不上。
首先,这样两台服务器肯定是可以跑如下架构的,所以没跑起来肯定是我配置的原因,这一点我是始终坚信的。接下去就是debug时刻。
仔细查看报错,A的consumer报错信息里出现了B内网IP:端口链接失败的信息,这说明dubbo链接的IP是有问题的,从而证实了服务器B的配置IP错误,于是开始第一次尝试,更改服务器B的zookeeper配置IP。
满心以为这次修改肯定没问题了,没想到还是报错,当然报错的IP并没问题,想到可能是zookeeper的问题,因为之前一直是内网链接,是不是zookeeper也有相应的配置,于是查询了解到zookeeper需要配置文件修改,在zoo.cfg配置文件中需要加上 quorumListenOnAllIPs=true
于是开始了第二次尝试,更改配置并重启服务,运行之。结果问题依旧。
为什么还是链接不上,zookeeper的问题都得到了排除,那肯定是dubbo的问题了。于是查询dubbo的链接,发现原来dubbo链接默认是内网,而A链接B是外网链接。如果A要连接到B,需要更改B的hosts配置。最终修改如下:
服务器B执行:hostname
这一步查看服务器B的主机名
服务器B执行:vim /etc/hosts
在最前面加上 服务器B的外网IP 服务器B的主机名
重启zookeeper,问题解决,dubbo顺利外网链接。