我一直在研究RabbitMQ的可用性选项,虽然我还很新,但我将尝试用我所掌握的知识来回答您的问题。请理解,这些答案并不是全面的。
在讨论问题和答案之前,我认为值得指出的是,我认为在运行在一台计算机上的集群的上下文中使用主动/主动和主动/被动的术语并不真正适用。主动/主动和主动/被动通常是用来描述高可用集群的术语,在这些集群中,您拥有多个逻辑服务器(在您的例子中是多个RabbitMQ集群)、共享/冗余存储、网络功能、电源等等。
- 我配置了什么?
如果不对集群或队列镜像中的节点进行负载平衡,则两者都没有,这意味着您没有高度可用的群集。
- 我怎么知道?
RabbitMQ不提供任何连接管理,因此具有失败节点的通信量不会自动传递到另一个节点,这是活动/活动集群所需的。在没有队列镜像的情况下,集群中没有完全冗余的节点,这是主动/被动的。
- 怎么能改变呢?
即使您实现了负载平衡和/或队列镜像,您也缺少许多提供高可用RabbitMQ集群的要求。首先,对于RabbitMQ集群,您只有一个逻辑代理( HA集群至少需要两个逻辑代理)。
- 主动主动和主动被动之间是否有很大的性能权衡?
我认为,当您开始引入数据复制和/或冗余时,您将看到性能上的损失,这将同时影响主动/主动和主动/被动。如果使用同步数据复制,则会看到比异步复制数据对性能的影响更大。它还有很多地方,但对我来说,使用Active/Active可能会带来更大的性能冲击,但这在很大程度上取决于所有部件协同工作的速度。在主动/被动的情况下,您可能在服务器之间使用异步复制,您的性能可能会更好,但在故障转移情况下,您需要等待该复制完成后才能切换到辅助服务器。
- 与活动/主动互动的最佳实践是什么?即安装负载均衡器?阿帕奇会绕过罗宾
RabbitMQ建议使用负载均衡器,这样您就不必向客户端泄露集群中节点的详细信息。
- 与主动/被动互动的最佳实践是什么?如果我只与活动对象交互,这是一个单一的失败点。
这是一个失败点,但是对于主动/被动,您可以实现一个失败策略来重试下一个可用的服务器或所有剩余的服务器。有了这些策略,您就可以建立一个场景,在故障转移发生时,集群的功能只是退化,而不是完全不可用。此外,您可以与被动端交互,但交互类型可能非常不同(即只读访问),因为被动端可用资源可能较少,数据复制可能会出现延迟。
下面是一些用于收集这些信息的参考资料: