跳至主内容
版本:4.2

节点间通信心跳(网络滴答时间)

概述

本指南涵盖了 RabbitMQ 节点和 CLI 工具(即 Erlang 节点)用于确定对等方 [是否] 不可用的一种机制,称为“net ticks”或“kernel.net_ticktime”。

集群中的每对节点都通过传输层连接。所有节点对之间会定期交换滴答消息,以维护连接并检测断开连接。否则,网络中断可能会在相当长一段时间内(取决于传输和操作系统内核设置,例如 TCP)未被检测到。从根本上说,这与心跳在消息传递协议中寻求解决的问题相同,只是对等方不同:RabbitMQ 集群节点和 CLI 工具。

节点和连接的 CLI 工具会定期互相发送小数据帧。如果在给定的时间内未从某个对等方收到数据,则认为该对等方不可用(“已宕机”)。

当一个 RabbitMQ 节点确定另一个节点已宕机时,它会记录一条消息,其中包含其他节点的名称和原因,例如:

2018-11-22 10:44:33.654 [info] node rabbit@peer-hostname down: net_tick_timeout

在此例中,net_tick_timeout 事件告诉我们,由于超过了网络滴答时间,另一个节点被检测为宕机。另一个常见原因是 connection_closed,表示连接在 TCP 层面被显式关闭。

Erlang 文档 包含有关此子系统的更多详细信息。

滴答频率

滴答消息的频率和故障检测频率由 net_ticktime 配置设置控制。通常,在 net_ticktime 秒内,节点对之间会交换四次滴答。如果在 net_ticktime (± 25%) 秒内未收到来自某个节点的通信,则该节点被认为已宕机,不再是集群成员。

增加集群中所有节点的 net_ticktime 可以使集群对短期网络中断更具弹性,但剩余节点检测宕机节点需要更长时间。反之,减小集群中所有节点的 net_ticktime 可以降低检测延迟,但会增加检测到虚假分区的风险。

应仔细考虑更改默认 net_ticktime 的影响。集群中的所有节点必须使用相同的 net_ticktime。以下示例 advanced.config 配置演示了将默认 net_ticktime 从 60 秒增加到 120 秒:

[
{kernel, [{net_ticktime, 120}]}
].

对 HTTP API 的影响

HTTP API 通常需要执行集群范围的查询,这会导致在检测和处理分区之前,UI 可能显得无响应。降低 net_ticktime 有助于在此类事件中提高响应能力,但如上所述,任何更改 net_ticktime 的决定都应谨慎进行。

Windows 配置

由于 RabbitMQ 作为 Windows 服务启动的方式,您无法使用配置文件设置 net_ticktime。请参阅 Windows 配置文档的此部分,了解在将 RabbitMQ 作为 Windows 服务运行时设置 net_ticktime 的方法。

© . This site is unofficial and not affiliated with VMware.