基本上我想在6+接口上实现下载负载平衡。我的服务器正在运行Apache2和PHP5,目前我必须手动将所有服务器的ip地址输入到php文件阵列中。有没有自动完成的方法?
对于每个下载链接,代码当前看起来如下:
<?php
$a = array("192.168.2.x", "192.168.2.x", "192.168.2.x", "192.168.2.x", "192.168.2.x", "192.168.2.x");
$b = rand(0,count($a)-1);
echo "http://". $a[$b] . "/yourDownload.zip";
?>
服务器机器有多个IP,每个NIC一个。这里的情况是针对一个大型局域网,我们希望将文件从主服务器分发给所有游戏玩家。每个玩家需要大约20GB的文件,因此严重的负载平衡并不是非常重要,但服务器的即插即用能力是非常重要的。目前,每次我们使用不同的路由器或DHCP时,我都必须手动将IP地址输入到php文件中,这需要时间,而且很容易被忘记,直到它成为一个问题。
在上面的代码中,我希望第2行中的阵列自动获得NIC的IP,而不是硬编码。
首先,您将如何保持平衡?使用随机函数,它将不起作用
这里有6台服务器,所以你需要在基于优先级的上做一些工作
代码:
<?php
$pages = array('192.168.2.1'=>16.66, '192.168.2.2'=>16.66,'192.168.2.3'=>16.66,'192.168.2.4'=>16.66,'192.168.2.5'=>16.66,'192.168.2.5'=>16.66,'192.168.2.6'=>16.66);
function getServerByWeight(array $weightedValues) {
$rand = mt_rand(1, (int) array_sum($weightedValues));
foreach ($weightedValues as $key => $value) {
$rand -= $value;
if ($rand <= 0) {
return $key;
}
}
}
$page = getServerByWeight($pages);
echo "http://".$page. "/yourDownload.zip";