【问题标题】:In PhP5 is there a way to get all of my servers IP addresses?在 PhP5 中有没有办法获取我所有的服务器 IP 地址?
【发布时间】:2015-04-07 08:15:44
【问题描述】:

基本上我想对超过 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,每个网卡一个。这里的情况是针对大型局域网聚会,我们希望将文件从主服务器分发给所有游戏玩家。每个游戏玩家需要大约 20GB 的文件,因此严格的负载平衡并不是非常重要,但服务器的即插即用能力才是最重要的。目前,每次我们使用不同的路由器或 DHCP 时,我都必须手动将 IP 地址输入 php 文件本身,这需要时间并且很容易被遗忘,直到成为问题。

在上面的代码中,我希望第 2 行中的数组自动获取 NIC 的 IP,而不是对其进行硬编码。

【问题讨论】:

  • 这还不清楚。运行脚本的机器是否有多个 IP,或者此脚本从中下载文件的目标机器。这有很大的不同。
  • 服务器机器有多个IP,每个网卡一个。这里的情况是针对大型局域网聚会,我们希望将文件从主服务器分发给所有游戏玩家。每个游戏玩家需要大约 20GB 的文件,因此严格的负载平衡并不是非常重要,但服务器的即插即用能力才是最重要的。目前,每次我们使用不同的路由器或 DHCP 时,我都必须手动将 IP 地址输入到 php 文件中,这需要时间并且很容易被遗忘,直到成为问题。

标签: php linux apache apache2 lamp


【解决方案1】:

首先你将如何保持平衡? 使用随机函数将不起作用

这里有 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";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    相关资源
    最近更新 更多