1.前言
最近环境中负载较高,于是协调运维给集群中的机器做了升配,调整MQ的配置并逐个进行重启。
但是在重启后,发现业务服务器连接MQ报createChannel: connect remote host[172.17.0.1:30911] failed错误,比较奇怪的点是,RocketMQ是Dledger模式部署的,其IP分别为192.168.157.7,192.168.157.8以及192.168.157.9,没有设置172.17.0.1这个IP。
2.问题排查
应用的mq配置基本如下:
rocketmq:
name-server: rocketmq1.xsk.top:9876;rocketmq2.xsk.top:9876;rocketmq3.xsk.top:9876;rocketmq4.xsk.top:9876
producer:
group: connector-producer-group
enable-msg-trace: false
send-message-timeout: 10000
然后在主机的hosts(/etc/hosts)文件里配置:
182.168.157.7 rocketmq1.xsk.top
182.168.157.8 rocketmq2.xsk.top
182.168.157.9 rocketmq3.xsk.top
在应用机器上,分别尝试ping rocketmq1.xsk.top、rocketmq2.xsk.top、rocketmq3.xsk.top,均可以正常响应。
于是回顾MQ部署节点,联想172.17.0.1可能是docker启动的docker0网桥地址,于是检查报错的MQ broker地址,发现确实存在一个Docker容器在运行。
那么问题就比较明确了,Broker启动时,因为未指定监听的地址信息,Broker监听到172.17.0.1这个地址上了。
3.解决方案
去官网上查询,只需要在配置文件中添加brokerIP1属性,即可指定Broker服务监听的地址。
于是在配置文件中添加此属性,发现服务恢复正常运行。