В основном я хочу загружать загрузку баланса через интерфейсы 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-адресов, по одному для каждого сетевого адаптера. Ситуация здесь для большой вечеринки, где мы хотим распространять файлы с основного сервера всем игрокам. Каждому игроку требуется около 20 ГБ файлов, поэтому серьезная балансировка нагрузки не очень важна, но способность сервера подключаться и воспроизводиться. В настоящее время мне приходится вручную вводить IP-адреса в файл php каждый раз, когда мы используем другой маршрутизатор или DHCP, который требует времени и легко забывается, пока это не станет проблемой.
В приведенном выше коде я хотел бы, чтобы массив в строке 2 автоматически получал 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";