大约六个月前,我建立了一个将视频转换为各种格式的网站。
在过去的几周里,该网站的流量增加了 300% 以上,现在我需要平衡负载。
目前,我有一个主服务器,由于 ffmpeg 转换次数过多,服务器负载过高。我想添加第二和第三台服务器,但脚本不是为此而构建的。
我想知道是否有办法设置一个域来动态选择服务器 IP。这样我就可以在所有后续服务器上安装与主服务器上完全相同的配置,并保留脚本原样。
如有任何反馈或建议,我们将不胜感激。
更新
这是我设置的反向代理。在其他服务器上,我设置了同名虚拟主机“main.website.com”,但由于某种原因,页面加载时没有 CSS。查看服务器日志,似乎我代理的服务器没有使用正确的虚拟主机,而是使用默认虚拟主机。
<VirtualHost *:80>
ProxyRequests off
ServerName main.website.com
ServerAlias www.main.website.com
ServerAdmin [email protected]
<Proxy balancer://mycluster>
# Server ip 1
BalancerMember http://0.0.0.0:80
# Server ip2
BalancerMember http://0.0.0.0:80
ProxySet lbmethod=byrequests
</Proxy>
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
</VirtualHost>
答案1
如果我理解你的问题,有很多方法可以做到这一点 -
使用 DNS - 为域设置多个资源记录,每个记录指向不同的 IP 地址 - 可以有多个 A 记录,服务器将以随机顺序分发它们,这可以提供粗略的负载平衡。您可能希望为此运行较低的 TTL,如果尝试上传的系统很少,它将无法正常工作。不过,这并不需要任何特殊的东西。
上述方法的一个更复杂的变体是让您的名称服务器使用拆分 DNS 为不同的请求提供不同的答案 - 通常基于源 IP 地址。您需要支持多个视图的 DNS 服务器 - 通常想到的是 BIND。(重点是,如果您使用的是其他人的名称服务器,这可能不可行)
忘记在 DNS 上执行此操作 - 将您的系统安排到集群中并在其前面使用负载平衡器。这将在系统发生故障时提供弹性,以及更细粒度的控制。许多系统都可以做到这一点 - Squid、Apache、IPVadm(不同的方法,在较低级别工作)。我没有看过它,但作为替代方案,您可以使用类似 Amazons Cloudfront 的东西。