RabbitMQ使用哪些端口?

155

RabbitMQ服务器在集群节点上需要使用或打开哪些防火墙端口?

我的 /usr/lib/rabbitmq/bin/rabbitmq-env 设置如下,我假设这些是必需的(35197)。

SERVER_ERL_ARGS="+K true +A30 +P 1048576 \   
-kernel inet_default_connect_options [{nodelay,true}] \  
-kernel inet_dist_listen_min 35197 \   
-kernel inet_dist_listen_max 35197"

我没有修改 rabbitmq.config 文件来设置自定义的 tcp_listener,因此它应该正在监听默认的5672端口。

以下是相关的 netstat 输出:

tcp        0      0 0.0.0.0:4369           0.0.0.0:*           LISTEN      728/epmd 
tcp        0      0 0.0.0.0:35197          0.0.0.0:*           LISTEN      5126/beam
tcp6       0      0 :::5672                :::*                LISTEN      5126/beam

我的问题是:

  1. 为了让其他节点能够连接到集群,是否需要打开所有3个端口4369、5672和35197?

  2. 为什么5672不是在TCP上运行,而只是在TCP6上运行?


2
可能在ServerFault上会得到更多的回应,而不是在StackOverflow上,但我很高兴你在这里发布了它,因为它正是我正在寻找的! - Norman H
5个回答

174

端口4369:Erlang使用Port Mapper Daemon (epmd)来解析群集中的节点名称。节点必须能够相互访问和访问端口映射程序才能使群集工作。

端口35197: 由inet_dist_listen_min/max设置。防火墙必须允许在此范围内的流量在群集节点之间传递。

RabbitMQ管理控制台:

  • RabbitMQ版本3.x的端口15672
  • RabbitMQ 3.x以前的端口55672

确保启用了rabbitmq_management插件,否则您将无法通过这些端口访问管理控制台。

  • 端口5672 RabbitMQ主要端口(AMQP)
  • 端口5671 TLS加密AMQP(如果启用)

对于一个节点群集,它们必须在3519743695672上相互开放。

对于想要使用消息队列的任何服务器,只需要5672(或可能是5671)。


10
在3.x版本发布中,管理端口似乎已更改为15672。 - kjw0188
1
在3.x版本中,管理端口似乎已更改为15672:http://www.rabbitmq.com/management.html#configuration - Greg M. Krsak
6
看起来集群端口是4369和25672,来自:https://www.rabbitmq.com/clustering.html。 - adamkonrad

85

RabbitMQ使用哪些端口?

默认端口是5672,可以在手册中找到答案。它在RABBITMQ_NODE_PORT变量中定义。

https://www.rabbitmq.com/configure.html#define-environment-variables

如果有人在RabbitMQ配置文件中更改了端口,则数字可能会不同:

vi /etc/rabbitmq/rabbitmq-env.conf

询问 nmap 是否能够检测到它:

sudo nmap -p 1-65535 localhost

Starting Nmap 5.51 ( http://nmap.org ) at 2014-09-19 13:50 EDT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00041s latency).
PORT      STATE         SERVICE
443/tcp   open          https
5672/tcp  open          amqp
15672/tcp open  unknown
35102/tcp open  unknown
59440/tcp open  unknown

哦,看,5672和15672

询问netstat能否看到它:

netstat -lntu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address        State
tcp        0      0 0.0.0.0:15672               0.0.0.0:*              LISTEN
tcp        0      0 0.0.0.0:55672               0.0.0.0:*              LISTEN
tcp        0      0 :::5672                     :::*                   LISTEN

噢,看,5672.

使用lsof查看端口:

eric@dev ~$ sudo lsof -i | grep beam
beam.smp  21216    rabbitmq   17u  IPv4 33148214      0t0  TCP *:55672 (LISTEN)
beam.smp  21216    rabbitmq   18u  IPv4 33148219      0t0  TCP *:15672 (LISTEN)

使用不同的计算机,使用nmap工具,查看5672端口是否开启:

sudo nmap -p 5672 10.0.1.71
Starting Nmap 5.51 ( http://nmap.org ) at 2014-09-19 13:19 EDT
Nmap scan report for 10.0.1.71
Host is up (0.00011s latency).
PORT     STATE SERVICE
5672/tcp open  amqp
MAC Address: 0A:40:0E:8C:75:6C (Unknown)    
Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds

尝试使用 Telnet 手动连接端口,5671 端口处于关闭状态:

telnet localhost 5671
Trying 127.0.0.1...
telnet: connect to address 127.0.0.1: Connection refused

尝试使用telnet手动连接端口,5672已开放:

telnet localhost 5672
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

检查防火墙:

sudo cat /etc/sysconfig/iptables  

它应该告诉你哪些端口是开放的:

-A INPUT -p tcp -m tcp --dport 5672 -j ACCEPT

重新应用您的防火墙:

sudo service iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

1
优秀的回答。如果有什么的话,你可能有些过度了。 - Darth Egregious
如果有人想知道,rabbitmq默认只会将4369端口绑定到您在rabbitmq-env.conf中指定的接口上; 如果您希望通过指定的接口允许所有与rabbitmq相关的流量(例如我自己-通过专用的openvpn链路),则必须在rabbitmq.conf中配置rabbitmq将所有其他流量通过该接口传递(否则,其他端口将不会绑定到您选择的接口上,而是将监听所有端口)。 - Greg0ry

23

查找 RabbitMQ 使用的端口号:

$ epmd -names

输出:

epmd: up and running on port 4369 with data:
name rabbit at port 25672

以 root 用户身份运行以下命令:

lsof -i :4369
lsof -i :25672

更多有关epmd选项的信息。


"lsof"非常缓慢...而且需要root权限。您可以使用"netstat -an | egrep '.(4369|25672).*LISTEN'"以更快的速度完成相同的操作。 - dland
真的需要root权限吗?我以普通用户身份成功运行了它。也许最近的版本有所改变了? - asgs

17

端口访问

防火墙和其他安全工具可能会阻止RabbitMQ绑定端口。当发生这种情况时,RabbitMQ将无法启动。请确保可以打开以下端口:

4369:epmd,由RabbitMQ节点和CLI工具使用的对等发现服务

5672、5671:用于AMQP 0-9-1和1.0客户端,无TLS和有TLS

25672:用于Erlang分布式进行节点间和CLI工具的通信,并从动态范围(默认限制为单个端口,通过计算AMQP端口+ 20000获得)。有关详细信息,请参见网络指南。

15672:HTTP API客户端和rabbitmqadmin(仅在启用管理插件时)

61613、61614:STOMP客户端,无TLS和有TLS(仅在启用STOMP插件时)

1883、8883:(MQTT客户端,无TLS和有TLS,如果启用了MQTT插件)

15674:STOMP-over-WebSockets客户端(仅在启用Web STOMP插件时)

15675:MQTT-over-WebSockets客户端(仅在启用Web MQTT插件时)

参考文档:https://www.rabbitmq.com/install-windows-manual.html


0

检查 \AppData\Roaming\RabbitMQ\log。如果你在那里有一个日志文件,请搜索 started TCP listener on [::]

它应该告诉你 rabbitMq 运行的端口号。寻找最后一条记录。

免责声明:这不是找到端口的最佳方法,因为在此期间可能已更改端口。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接