MySQL 和 Jetty 的高可用性和负载平衡

MySQL 和 Jetty 的高可用性和负载平衡

我即将部署两个不同的系统:MySQL 集群和一群Jetty 网络服务器

1. 软件

我可以获得更多 Linux 服务器来实现 HA/LB,但是我应该使用哪个软件?我使用 CentOS。

我听说过 HAProxy、LVS 和 UltraMonkey。
我读过很多它们的文档,但不清楚它们是否支持 MySQL 和 HTTP/S(两者)。
我想要一个解决方案可以同时解决两个问题,为了简单起见(而不是处理两个)。

  • 该解决方案应该像上面的三个一样开源。
  • SSL(MySQL 和 HTTPS)应该是可行的。
  • “粘性会话”不是必需的,因为我打算让 Jetty 的会话在 MySQL 数据库中共享。

2. 性能

我读到过,负载平衡可以通过三种方式实现:
- 直接路由<<依赖于 LAN 交换机?
- IP-IP 封装(隧道)<<听起来最好。不受 LAN 的约束,与“直接路由”相反
- 网络地址转换<<极其有限(应用服务的回复通过 LB)

让我担心的是,最终有可能(我不希望)互联网用户和我的集群之间的所有数据都经过一台服务器(平衡器),这使得平衡器成为瓶颈.
如果它与100MBit 连接然后整个系统是有限的对此。
是否有可能避免这种情况,同时获得平衡和高可用性?这样做的“成本”是什么?我是否需要在网络上安装特殊交换机?

答案1

很好,您不必依赖 LB(负载均衡器)来获取会话信息。

在我看来,您对速度的需求使我选择了 LVS 和“直接路由”方法。您可以在不使用 ip_forward 机制的情况下进行直接路由。我通过使用从 LB 到真实服务器的专用 lvs 网络来设置它。

现在来谈谈“速度需求”:使用直接路由,LB 接收传入请求,更改其目标 MAC 并将它们放在通往 RS 的线路上。现在 RS 必须在 LVS 网络上拥有逻辑 IP(但不应响应该 IP 的 arp 请求)。RS 将处理请求并直接向客户端做出响应 - 响应不会通过 LB 返回,从而最大限度地减少 LB 的负载。

此外,您的传入流量很可能比传出流量低得多 - 因此这可以满足您的需求。

最后一个弱点是 LB 本身的可用性。您可以将 LB 与另一台接管逻辑 IP(和 lvs)的机器进行集群。由于会话粘性在您的设置中不是问题 - 这就是您所要做的全部工作。

我发现 lvs-kiss 是动态重新配置 lvs 的一个很好的可能性 - 但是还有其他可行的解决方案。

顺便说一句 - 我们使用 LVS 的大多数服务器都是 CentOS 5。

更新2011-11-11: 心跳-ldirectord是心跳的插件,如果您无论如何都想进行集群,那么您就不需要 lvs-kiss。

答案2

负载均衡:

  • 对于 Mysql LB,您可以使用 Mysql Proxy(或者最好在应用程序层执行);
  • 对于 LB 网络服务器,我建议nginx

对于 HA,我建议看看起搏器它是针对集群和高可用性的强大、可扩展且灵活的解决方案。

相关内容