使用 Vsphere 和 Apache 负载平衡进行集群

使用 Vsphere 和 Apache 负载平衡进行集群

我正在研究使用 Vsphere 自动平衡我的 apache web 服务器和 mysql 服务器的负载,但是它真的能完成工作吗?

我知道它说它可以进行自动负载平衡,但实际上不确定它是否完全意味着我想要实现的目标。

有没有更简单的方法在虚拟机内设置 php-apache 和 mysql 集群?

或者有任何关于聚类的指南吗?(我试过用谷歌搜索,但没有成功)

如能得到任何有助于理解/设置虚拟机内的集群和负载平衡的帮助,我们将不胜感激。

答案1

vSphere 的功能:

  • 集群 - DRS = 在多个主机上运行多个虚拟机,vSphere 将自动决定将运行的虚拟机移动到哪个主机上
  • 高可用性 = 在多台主机上并行运行客户机 - 如果一台主机发生故障 - 第二台主机可确保服务可用性

MySQL 集群 - 并不容易,无法在这里描述细节,但一般来说:

  • 取决于数据库引擎 (MyISAM、InnoDB、XtraDB)
  • 非常有限
  • 共享存储——大多不可能
  • 通过复制更容易实现单写多读节点

Apache/web 负载平衡,最佳配置:

  • 网络级别 - TCP 负载平衡,正常运行需要至少 1 个平衡器节点,HA(主动备份)需要 2 个。通过以下方式实现Linux 虚拟服务器 (LVS)内核模块:
    • Piranha web GUI(RHEL 和 Fedora)(足够,易于实现)
    • Keepalived
    • 超级猴子
    • Linux 高可用性
  • 操作系统级别——网络配置、网关、ARP 配置(LVS-DR)、为本地主机分配全局 IP(127.0.0.1——LVS-NAT)。
  • 应用程序级别
    • Apache 级别 - 没有变化,只是保持在端口 80 上运行,这样应用程序就可以看到自己(环回请求)
    • PHP 级别 - 会话、tmp 也必须在节点之间共享
    • 使用 mysql-proxy 在套接字和端口监听模式下运行,将请求转发到 mysql 服务器
  • 存储级别 - Web 服务器之间的数据必须通过非常快的方式共享,例如 GlusterFS

LVS 的性能相当高 - 它是内核级的,双核 1.6 GHz 可以在 NAT 模式下运行超过千兆位,并防止许多网络级问题。LB 服务器将在 L2 上获取虚拟 IP,请求将由内核转发到可能具有相同 IP(LVS-DR)或具有 NAT(LVS-NAT)的服务器 IP。LVS-DR 需要在服务器端进行特定的 arp 配置,因为所有服务器都将使用相同的 IP 运行。LVS-NAT 实施更简单,您可以将所需的所有内容负载平衡到任何服务器。要正常使用 LVS-NAT,请使用内核 2.6.37 或更高版本。Balancer 也可以充当网关和防火墙。必须设置连接持久性以避免某些问题(请参阅 LVS 文档),并且必须将内核 TCP 超时设置为最小值。您还必须编写脚本来检查主机可用性 - 是否正常工作。尝试在 Web 节点上进行 100% 相等的配置。

总体而言 - 它非常好,非常有效和最佳的架构,但之后需要进行一些调整。瓶颈是存储响应和 mysql。php-apache HA/Balancing 运行理想。

Squid、mod_proxy_balancer、HAproxy 等是用户级应用程序,效率低下且愚蠢:

  • Squid 可用作 HTTP 终止或/和安全过滤器的代理或反向代理(最好使用 Varnish)。您可以在每个 Web 服务器上添加它并在内部转发请求以隐藏您的 Web 服务器信息等,此外还需要 mod_extract_forwarded 来确保 Web 服务器和应用程序正确识别源 IP。
  • 在这种情况下,mod_proxy_balancer 只是另一个“无关紧要 - 我编写了 apache 模块”的东西。
  • haproxy 是非常愚蠢的东西 - 应用程序监听端口并向后端发起请求 - 我讨厌它。

您可以使用 RedHat 集群套件并获得一些文件共享(GFS2 等)的改进,并在那里拥有应用程序 HA,但需要您付出更多努力。

对于平衡器节点 - 我严格推荐 Fedora 15 或更高版本(内核越新越好)。对于其他节点 - 随便你,甚至是 Windows(但回送 http 访问会有一些问题)。

另外,我建议您在存储网络端使用基于 LACP 的绑定。

答案2

这不是您想要的解决方案。vSphere 集群旨在保护整个虚拟机,而不是这些虚拟机上的应用程序,您需要一个负载平衡器,很抱歉,像 Squid/HA 代理这样简单的东西一直到 Cisco ASA/F5 套件都是合适的。

相关内容