当前位置: 代码迷 >> 综合 >> 【RocketMQ】 双主双从同步集群配置,发送消息返回状态码:SLAVE_NOT_AVAILABLE
  详细解决方案

【RocketMQ】 双主双从同步集群配置,发送消息返回状态码:SLAVE_NOT_AVAILABLE

热度:84   发布时间:2023-09-21 00:15:23.0

一、现象

搭建了 rocketmq 的双主双从集群,在使用同步模式下,在向 master 发送消息时,返回的消息状态码为 SLAVE_NOT_AVAILABLE 

【RocketMQ】 双主双从同步集群配置,发送消息返回状态码:SLAVE_NOT_AVAILABLE

 

二、解决方式

这个问题是由于没有开放对应端口:

在配置文件中找到自己设置的 Master 开放端口:

【RocketMQ】 双主双从同步集群配置,发送消息返回状态码:SLAVE_NOT_AVAILABLE

rocketmq 默认端口:9876

配置的 ListenPort 端口:10911

vip 通道端口为:ListenPort - 2 = 10909

HA 通道端口为: ListenPort + 1 = 10912

需要检查 Master 是否打开了这两个端口

 

端口对应描述:

以配置的  ListenPort 为 10911 为例

端口号 作用 描述
9876 nameserver 对外暴露的端口,允许消费者和生产者连接  
10909 fastListen 端口

在消费者或生产者中配置 isVipChannel 为 false 即可

10912 HA 高可用端口,用于主从同步,为 Master 常见新的 socket 连接 若没有开放,则无法连接到 Slave

 

三、解决过程和原因

跟踪 log 日志

tail -f /~/log/rocketmqlogs/broker.log

发现使用了10911端口,但这是自己设置的 ListenPort 端口

【RocketMQ】 双主双从同步集群配置,发送消息返回状态码:SLAVE_NOT_AVAILABLE

初步猜测是由于端口没开放的原因,故关闭 Master 防火墙,再次发送消息,发现发送成功

【RocketMQ】 双主双从同步集群配置,发送消息返回状态码:SLAVE_NOT_AVAILABLE

由于是主从配置,猜测是某个被进程使用的端口没有对外暴露,查看当前进程使用的端口:

netstat -ntpl

找到 java 进程,有两个靠近我设置的 10911 端口的端口 10909、10912 被使用

【RocketMQ】 双主双从同步集群配置,发送消息返回状态码:SLAVE_NOT_AVAILABLE

经查询可得:

vip 通道端口为 ListenPort(10911-2) = 10909

HA 高可用端口为 ListenPort(10911+1) = 10912

那么,他们是否一定要对外暴露呢?

vip 通道端口一般没什么作用

而 HA 高可用端口用于主从集群时,创建 Master 和 Slave 之间的 socket 连接。故需要对外暴露