【发布时间】:2016-11-21 19:04:57
【问题描述】:
我正在尝试在 F5 负载平衡器后面配置 RabbitMQ。我有一个正常工作的 RabbitMQ 节点,默认节点名称为 rabbit@%computername%。它设置为侦听所有网络接口(所有 IP 地址 0.0.0.0:5671,即 AMQP SSL 端口),并且工作正常。但是,连接到它的所有客户端应用程序当前都使用特定的节点名称,例如“%计算机名%”。为了利用负载均衡器的容错性,我想更新我的所有客户端应用程序以使用负载均衡名称而不是特定节点名称,例如使用 HostName = "balancedname.mycompany.com" 而不是 "%computername%" 进行连接。但是,当我更新客户端应用程序以连接到负载平衡名称时,连接失败。我怎样才能让它工作?
我是 F5 的新手,我确实注意到池的成员地址是 IP 地址...应该是节点名称而不是 IP 地址吗?是否有可能看到节点名称可以是完全任意的,并且不一定映射到任何网络可解析的东西?我在托管情况下没有对 F5 的写入权限,因此尝试这些事情有点棘手。
我还没有找到太多关于负载平衡 RabbitMQ 设置的信息。我确实了解所有 RabbitMQ 队列仅真正存在于一个节点上,并且我已将 F5 设置为主动-被动模式,这样流量将始终路由到主节点,除非它出现故障。
更新1:看来this issue又回来咬我了。我正在使用 SSL 证书进行外部身份验证,并且由于客户端使用负载平衡名称而不是节点名称进行连接,并且负载平衡名称未用于创建证书,因此它拒绝了连接。我最终重新生成了证书并使用了负载平衡名称,但这还不够——我还必须在 Windows 主机文件中添加一个条目,以将 127.0.0.1 和 ::1 映射到负载平衡 DNS 地址。
更新 2: 更新 1 仅解决在作为负载平衡器一部分的应用服务器上运行客户端应用程序的连接问题,但远程客户端不起作用。内部异常说“证书链是由不受信任的机构颁发的”。 RabbitMQ + SSL 很难。而添加负载平衡则更加困难。
【问题讨论】: