Вот и мы:
Получить 5 подчиненных серверов для обновления таблицы в базе данных на главном сервере, вставляя их нагрузку каждые X секунд / минут. Затем на главном сервере проверьте, какой из них имеет наименьшую нагрузку, и перенаправьте пользователя на этот конкретный сервер.
![alt text](https://i.stack.imgur.com/RHelk.jpg)
Как получить нагрузку на сервер?
Есть функция с именем sys_getloadavg();
, которая возвращает три выборки, представляющих среднюю загрузку системы (количество процессов в очереди выполнения системы) за последние 1, 5 и 15 минут, соответственно, в массиве.
Таким образом, если загрузка системы превышает установленное число, вы должны перенаправить посетителя на другой подчиненный сервер. Например:
$load = sys_getloadavg();
if ($load[0] > 80) {
//insert into database "I'm busy!!"
$query = "UPDATE `server_load` SET `load` = $load WHERE `server_id` = 1";
mysql_query($query);
}
Обратите внимание, что 0
на $load
означает, что он получает нагрузку на сервер за последнюю минуту, используйте 1 или 2 для 5 и 15-минутной средней загрузки системы.
Запрос будет выполняться по сценарию на подчиненных серверах, и каждый раз, когда он будет выполняться, он будет обновлять среднюю нагрузку на сервер в таблице server_load
.
Как выбрать с основного сервера
После того, как вы изолировали функцию 'get server load' от подчиненных серверов. Все, что вам нужно сделать с главного сервера, это запросить базу данных и получить наименьшую нагрузку из таблицы server_load
. Упомянутая таблица будет достаточно функциональной с полем отметки времени, полем идентификатора и полем загрузки со следующей структурой:
`timestamp` int(11) not_null
`id` int(1) not_null autoincrement
`load` int(3) not_null
Для базового учебника по взаимодействию с mysql и php я предлагаю ссылку из phpsense. Если вы посвятите достаточно времени чтению документации, с которой я вас связал, вы сможете достичь своей цели. Обязательно задавайте все следующие вопросы как независимые лица, если вы не можете найти их на этом сайте. Скорее всего, их снова и снова спрашивали люди, предшествовавшие вам. Надеюсь, я помог.
Источники: