带有F5负载均衡器的RabbitMQ

时间:2016-11-21 19:04:58

标签: rabbitmq load-balancing

我试图在F5负载均衡器后面配置RabbitMQ。我有一个工作的RabbitMQ节点,其默认节点名称为rabbit @%computername%。它设置为侦听所有网络接口(所有IP地址0.0.0.0:5671,这是AMQP SSL端口),并且它正常工作。但是,连接到它的所有客户端应用程序当前都使用特定的节点名称,例如"%计算机%&#34 ;.为了利用负载均衡器的容错能力,我想更新所有客户端应用程序以使用负载均衡名称而不是特定节点名称,例如使用HostName =" balancedname.mycompany.com连接"而不是"%computername%"。但是,当我更新我的客户端应用程序以连接到负载平衡名称时,连接失败。我怎样才能让它发挥作用?

我是F5的新手,我确实注意到了游泳池的成员'地址是IP地址......这些是节点名称而不是IP吗?甚至可以看到,因为节点名称可以完全是任意的,并且不一定映射到网络可解析的任何东西?我处于托管状态,我没有F5的写入权限,因此尝试这些操作有点棘手。

我还没有找到关于RabbitMQ设置负载平衡的非常多的信息。我知道所有RabbitMQ队列只存在于一个节点上,并且我已经将F5设置为主动 - 被动模式,这样除非流量下降,否则流量将始终路由到主节点。

更新1:似乎this issue在这里回来咬我。我使用SSL证书使用EXTERNAL身份验证,并且由于客户端使用负载余额名称而不是节点名称进行连接,并且负载余额名称未用于创建证书,因此它拒绝连接。我最终重新生成了证书并使用了负载余额名称,但这还不够 - 我还必须在Windows hosts文件中添加一个条目,将127.0.0.1和:: 1映射到负载均衡DNS地址。

更新2:更新1仅解决了在作为负载均衡器一部分的应用服务器上运行客户端应用程序的连接问题,但远程客户端无法正常工作。内部异常表示"证书链由不受信任的权威机构颁发"。 RabbitMQ + SSL很难。并且添加负载平衡会使其变得更加困难。

1 个答案:

答案 0 :(得分:0)

我正在回答我自己的问题,希望它会为人们节省一些时间。在我的场景中,我需要客户端连接到负载平衡地址,如myrabbithost.mycompany.com,并且F5将流量定向到一个节点,只要它已经启动并且故障转移到辅助节点(如果它已经关闭)。我已经配置了安全性,并使用自签名证书对RabbitMQ进行身份验证。这些证书具有特定于每个主机的通用名称,这是问题所在。为了使用.NET,证书上的公用名必须与连接的服务器名相匹配(在我的例子中为myrabbithost.mycompany.com)。我必须做以下事情:

  • 在RabbitMQ服务器上生成新的服务器和客户端证书,通用名称为myrabbithost.mycompany.com
  • 为连接时使用的客户端生成新证书以使用SSL身份验证
  • 仍然在RabbitMQ服务器上,我不得不连接用于证书颁发机构的多个cacert.pem文件,以便客户端可以使用任何节点生成的客户端证书对任何节点进行身份验证。当我修改rabbit.config以使用“all.pem”而不是“cacert.pem”时,客户端能够连接,但它破坏了管理UI,因此我将rabbit.config中的rabbitmq_management设置修改为特定的主机 - 特定的cacert.pem文件,它又开始工作了。

为了设置高可用性,我设置了一个RabbitMQ集群,但也遇到了一些问题。除了将Erlang cookie从主节点复制到C:\ Windows和C:\ users \ myusername的辅助节点之外,我还必须通过任务管理器终止epmd.exe进程,因为rabbitmqctl join_cluster命令失败了“节点向下“错误。 epmd.exe进程在RabbitMQ停止后仍然存在,它可以导致rabbitmqctl.bat报告错误的错误,例如“节点关闭”,即使它没有关闭。