【问题标题】:How can I set up a load balancer for multiple virtual hosts (apache)如何为多个虚拟主机(apache)设置负载均衡器
【发布时间】:2015-04-24 03:24:36
【问题描述】:

我正在尝试为我的 apache 服务器上的几个虚拟主机设置负载平衡器。 通过为文件“C:\Windows\System32\drivers\etc\hosts”添加以下行来添加这些虚拟主机:

127.0.0.1       localhost
127.0.0.1       vhosta
127.0.0.1       vhostb
127.0.0.1       vhostc
127.0.0.1       load-balancer
::1             localhost

然后我为文件“C:\xampp\apache\conf\extra\httpd-vhosts.conf”添加了以下行:

<VirtualHost *:80>
  DocumentRoot c:/xampp/htdocs
  ServerName localhost
</VirtualHost>
<VirtualHost *:80>
  DocumentRoot c:/vhosts/vhosta
  ServerName vhosta
</VirtualHost>
<VirtualHost *:80>
  DocumentRoot c:/vhosts/vhostb
  ServerName vhostb
</VirtualHost>
<VirtualHost *:80>
  DocumentRoot c:/vhosts/vhostc
  ServerName vhostc
</VirtualHost>
<VirtualHost *:80>
  DocumentRoot c:/vhosts/load-balancer
  ServerName load-balancer
</VirtualHost>

当然,我已经在 C:/vhosts/ 中创建了文件夹,并为每个文件夹添加了一个 index.php 文件(其中包含一个 echo 语句)。

现在,我可以通过浏览器访问“http://vhosta”等访问虚拟主机了。

但我需要的是制作一个负载均衡器,它可以选择执行“http://vhosta”、“http://vhostb”或“http://vhostc”。

我怎样才能做到这一点?到目前为止,我所做的一切都正确吗?

任何帮助将不胜感激! 提前致谢!

(我在 Windows 8.1 上使用 xampp。)

【问题讨论】:

  • 您在 IP 到名称映射方面走错了路。您可能希望将 127.0.0.2-5 映射到您的负载平衡器主机名,但即使在这种情况下,它也无法与 hosts 文件一起使用。您将需要 DNS 来完成这样的事情。我在回答中详细说明了。

标签: apache xampp load-balancing virtual-hosts


【解决方案1】:

有很多方法可以做到这一点,但你试图做的事情是行不通的。 /etc/hosts 是 IP 到主机名映射的基本方式。如果要循环解析,则必须使用 DNS 服务器。此外,在同一台机器上进行负载均衡并没有多大意义,除了学习和配置测试。

这些是您拥有的一些选项。

1) 使用 mod_proxy_balancer。您需要启用 mod_proxy 和 mod_proxy_balancer 模块。此外,您需要选择一种调度程序算法。选项有:mod_lbmethod_byrequests、mod_lbmethod_bytraffic、mod_lbmethod_bybusyness 和 mod_lbmethod_heartbeat。

http://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html

<VirtualHost *:80>
  ...

  ServerName load-balancer

  <Proxy balancer://mybalancers>
    BalancerMember http://vhosta:80
    BalancerMember http://vhostb:80
    BalancerMember http://vhostc:80
  </Proxy>
  ProxyPass / balancer://mybalancers
  ProxyPassReverse / balancer://mybalancers

  ...
</VirtualHost>

2) 使用 DNS 循环选项。您需要将多个 IP 指向同一个主机名。使用此选项,当您向负载平衡器主机发出请求时,DNS 服务器将为您提供下一个 IP(以循环方式)。

DNS 配置

load-balancer        IN            A       10.0.0.1
load-balancer        IN            A       10.0.0.2
load-balancer        IN            A       10.0.0.3

Apache 服务器的虚拟主机

<VirtualHost 10.0.0.1:80>
  DocumentRoot c:/vhosts/vhosta
  ServerName load-balancer
</VirtualHost>

<VirtualHost 10.0.0.2:80>
  DocumentRoot c:/vhosts/vhostb
  ServerName load-balancer
</VirtualHost>

<VirtualHost 10.0.0.3:80>
  DocumentRoot c:/vhosts/vhostc
  ServerName load-balancer
</VirtualHost>

还有一件事与 hosts 文件有关。如果您想将环回 IP 映射到主机名,请随意使用从 127.0.0.0 到 127.255.255.255 的完整范围。我很确定这是在 Windows 中映射的,但我没有办法对其进行测试。要进行测试,只需 ping 127.1.2.3,看看你会得到什么。

http://en.wikipedia.org/wiki/Loopback

如果您需要多个 IP 进行测试,您可以通过这种方式组织 /etc/hosts 文件。

127.0.0.1       localhost
127.0.0.2       vhosta
127.0.0.3       vhostb
127.0.0.4       vhostc
127.0.0.5       load-balancer

【讨论】:

  • 我将使用您给我的第一个选项,但我收到“500 内部服务器错误”。在 apache 日志中,给出了以下消息:没有协议处理程序对 URL 有效/error/HTTP_INTERNAL_SERVER_ERROR.html.var。如果您使用的是 DSO 版本的 mod_proxy,请确保代理子模块包含在使用 LoadModule 的配置中。
  • 可能是因为我需要给虚拟主机,不同的端口?
  • 对不起,我犯了一个错误。我不小心删除了我的 vhost# 文件夹。它现在正在工作。非常感谢鲍里斯。
猜你喜欢
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 2014-12-13
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多