Балансировка нагрузки

Автор Gnostis, 09 апреля 2013, 13:10:00

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Gnostis

Переехал на новый VPS, после настройки обнаружил что балансировка нагрузки собственно и не работает =)

Вместо балансировки имеем сообщение о том что на нашем хостинге отключена балансировка или как она там, но где наша не пропадала.

Стандартно форум получает информацию о балансировке от системы:
$modSettings['load_average'] = @file_get_contents('/proc/loadavg');

if (!empty($modSettings['load_average']) && preg_match('~^([^ ]+?) ([^ ]+?) ([^ ]+)~', $modSettings['load_average'], $matches) !== 0)
$modSettings['load_average'] = (float) $matches[1];
elseif (($modSettings['load_average'] = @`uptime`) !== null && preg_match('~load averages?: (\d+\.\d+), (\d+\.\d+), (\d+\.\d+)~i', $modSettings['load_average'], $matches) !== 0)
$modSettings['load_average'] = (float) $matches[1];
else
unset($modSettings['load_average']);



Хотя непонятна логика, зачем? Есть же стандартная функция в PHP (Начиная с версии 5.1.3) -  sys_getloadavg

В результате сокращаем несколько кусков кода и стандартную функцию получения load average сокращаем до двух строк:
$load = sys_getloadavg();
$modSettings['load_average'] = $load[0];

далее все идет так же.

Возникают следующие вопросы:
1) Зачем такие сложности?
2) Где искать основную проверку нагрузки? Я так понимаю здесь только настройка, а сама проверка нагрузки должна быть в другом месте или я ошибаюсь?

Gnostis

Сам нашел =)
В файле load.php начиная с 256 строки, аналогичный вызов, заменяем ну и в теории все работает.

iaroslav

Спасибо. Я тоже давно столкнулся с этой проблемой, но так и не смог найти решение. А тут такая халява. Сегодня вечерком себе сделаю.
P.S. А сложности, видимо, от того что форум под более старую версию php писался.

Gnostis

Коль пошла такая пьянка и может пригодиться поддержка старой версии версии PHP, можно сделать так:

if (function_exists('sys_getloadavg')) { //Проверяем есть ли функция 'sys_getloadavg

    $load = sys_getloadavg(); //если есть получаем от PHP значения load average
    $modSettings['load_average'] = $load[0];

} else {
//Если функция sys_getloadavg отсутсвует, используем стандартный метод
    $modSettings['load_average'] = [at]file_get_contents('/proc/loadavg');
   if (!empty($modSettings['load_average']) && preg_match('~^([^ ]+?) ([^ ]+?) ([^ ]+)~',
$modSettings['load_average'], $matches) !== 0)
$modSettings['load_average'] = (float) $matches[1];

elseif

(($modSettings['load_average'] = [at]`uptime`) !== null && preg_match('~load averages?: (\d+\.\d+), (\d+\.\d+), (\d+\.\d+)~i',
$modSettings['load_average'], $matches) !== 0)
$modSettings['load_average'] = (float) $matches[1];

else

unset($modSettings['load_average']);
}


Ну данный кусок кода не тестировался, можно сказать написан на бумаге, но чисто в теории должен работать.

iaroslav

Кстати, зделал как вы прделагаете. Но у меня всё-равно выводится сообещние
ЦитироватьБалансировка нагрузки отключена в настройках вашего хостинга.
Так что, видимо, в моём случае решение какое-то иное.

vladimirr

Цитата: iaroslav от 12 апреля 2013, 11:40:28
Кстати, зделал как вы прделагаете. Но у меня всё-равно выводится сообещниеТак что, видимо, в моём случае решение какое-то иное.
Что-то похожее было здесь http://www.simplemachines.ru/index.php?topic=10190.msg122052#msg122052
Посмотри, может, подойдёт.


iaroslav

Цитата: vladimirr от 14 апреля 2013, 09:46:42
Что-то похожее было здесь http://www.simplemachines.ru/index.php?topic=10190.msg122052#msg122052
Посмотри, может, подойдёт.
Нет, там не то. У меня есть доступ к настройкам (то есть можно задавать пороги отключения и прочая), но не отображается информация (которая над оными настройками должна быть).
Цитата: digger® от 14 апреля 2013, 16:58:23
А у вас свой сервер или общий хостинг?
У меня VPS от руцентра.

Gnostis

В корне сайта создаем файл, к примеру info.php, со следующим содержимым:

<?php
$load 
sys_getloadavg();
print_r($load);
?>


После заходим на http://sitename.ru/info.php
И смотрим что у нас будет на выходе

Цитата: iaroslav от 14 апреля 2013, 22:15:00У меня VPS от руцентра.
Мы говорим про одно и то же?
VPS (англ. Virtual Private Server) или VDS (англ. Virtual Dedicated Server) — услуга, в рамках которой пользователю предоставляется так называемый Виртуальный выделенный сервер. В плане управления операционной системой по большей части она соответствует физическому выделенному серверу.

У RuCentr-a  в упор не вижу этой услуги.

iaroslav

#9
Цитата: Gnostis от 15 апреля 2013, 02:49:42
В корне сайта создаем файл, к примеру info.php, со следующим содержимым:

<?php
$load 
sys_getloadavg();
print_r($load);
?>


После заходим на http://sitename.ru/info.php
И смотрим что у нас будет на выходе
Массив, вестимо.
Цитата: Gnostis от 15 апреля 2013, 02:49:42
Мы говорим про одно и то же?
VPS (англ. Virtual Private Server) или VDS (англ. Virtual Dedicated Server) — услуга, в рамках которой пользователю предоставляется так называемый Виртуальный выделенный сервер. В плане управления операционной системой по большей части она соответствует физическому выделенному серверу.

У RuCentr-a  в упор не вижу этой услуги.
Тариф 301.
Я, конечно, могу и ошибиться в терминологии. Но мне всегда казалось, что если позволяют ставить собственные модули из дистрибутивов (управляя всем этим через консоль с доступом по ssh... там поначалу только так ngixом можно было обзавестись), перезагружать сервер и пускают к php.ini, конфигу нгикса и прочим радостям, то это VPS.

digger®

Цитата: iaroslav от 15 апреля 2013, 20:24:00Тариф 301.Я, конечно, могу и ошибиться в терминологии. Но мне всегда казалось, что если позволяют ставить собственные модули из дистрибутивов (управляя всем этим через консоль с доступом по ssh... там поначалу только так ngixом можно было обзавестись), перезагружать сервер и пускают к php.ini, конфигу нгикса и прочим радостям, то это VPS.

Цитировать4. Какая операционная система используется на виртуальном хостинге RU-CENTER?
Ответ:
На виртуальных серверах, обслуживающих услуги хостинга по тарифам «101», «201», «301», и на услуге хостинга конфиденциальной информации используется операционная система FreeBSD, принадлежащая к семейству Unix-систем.
Имхо, это FreeBSD Jail у вас, а не VPS.

iaroslav


Gnostis

Нашел багу или фичу =)

При очень низкой загрузке сервера, sys_getloadavg() в первом значении имеет значение просто 0 и форум начинает сообщать о том что балансировка нагрузки на сервере отключена.

Фикс для файлов ManageServer.php, Load.php

меняем
$load = sys_getloadavg();
$modSettings['load_average'] = $load[0];

На
$load = sys_getloadavg();
$modSettings['load_average'] = number_format($load[0],2);


значение всегда будет иметь дробную часть.

iaroslav

От оно как. Возможно как-раз в этом то и проблема у меня... Спасибо, попробую применить и гляну что вылезет.

iaroslav

Ага, теперь пишет нагрузку без всяких стрёмных сообщений.