2015-02-07 20 views
0

基本上我想通過6個以上的接口進行負載均衡下載。我的服務器運行Apache2和PHP5,目前我必須手動輸入所有服務器的ip地址到php文件數組中。有沒有辦法自動做到這一點?在PhP5中有一種方法可以獲得我所有的服務器IP地址?

對於每個下載鏈接代碼目前看起來是這樣的:

<?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。這裏的情況是我們想要從主服務器向所有遊戲玩家分發文件的大型lan派對。每個玩家需要大約20GB的文件,所以嚴重的負載平衡並不是非常重要,但服務器能夠即插即用。目前我每次使用不同的路由器或DHCP都需要手動將IP地址輸入到php文件本身,這需要時間並且很容易被遺忘,直到成爲問題。

在上面的代碼中,我希望第2行中的數組自動獲取NIC的IP,而不是硬編碼。

+0

這是不清楚。運行腳本的機器是否有多個IP或此腳本從中下載文件的目標機器。它有很大的不同。 – 2015-02-07 04:41:59

+0

服務器機器有多個IP,每個NIC一個。這裏的情況是我們想要從主服務器向所有遊戲玩家分發文件的大型lan派對。每個玩家需要大約20GB的文件,所以嚴重的負載平衡並不是非常重要,但服務器能夠即插即用。目前我每次使用不同的路由器或DHCP都需要手動將IP地址輸入到php文件本身,這需要時間並且很容易被遺忘,直到成爲問題。 – Aedazan 2015-02-07 04:50:17

回答

0

首先你會保持平衡嗎? 利用隨機函數,它不會工作

這裏有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"; 
相關問題