Голосование
Какую CMS Вы предпочитаете
AtomX
Fapos CMS
Drunya CMS
Топ новостей
- Генератор аватарок в стиле пиксель-арт
- Скачать Fapos CMS 1.1.8 Бесплатно
- Цунами в Японии. Последствия.
- Предварительная инфа о FAPOS 1.1.9. Часть 2
- Описание версии CMS Fapos 0.9.9
- Новая версия Fapos 1.3
- Половина россиян не смогла отличить легальный контент
- Что есть Fapos CMS
- Убийца Apache у вас на пороге
- Открытое тестирование Fapos 0.9.9
Последние комментарии
Топ пользователей
Сайты на AtomX CMS
В прошлой статье я рассказал как можно балансировать нагрузку между серверами и обещал показать как теперь, вооружившись полученными знаниями, сделать продвинутую систему пинга и балансинга своих серверов. Вот решил выполнить обещанное.
Пинг своих серверов и балансировка нагрузки между ними могут экономить вам очень много времени и сил, а если скрипты будут написаны более менее правильно, то позволят еще и не совершать лишних движений. Поговорим о самой сути вопроса, а за тем я покажу примеры скриптов. Смысл в том что у нас есть много серверов и нам надо проверить работоспособность HTTP сервера на каждом из них и внести IP адреса работающих серверов в конфиги DNS, как описывалось в предыдущей статье. Правильный скрипт должен уметь фиксировать упавшие сервера и посылать отчеты по почте о их оффлайне. Но так же, правильный скрипт пинга, должен, при следующей проверке, если, бывший в оффе сервер, восстановился после збоя, сказать нам и об этом. Это позволит нам, читая отчеты, сразу определить, какие сервера надо смотреть и отлаживать а какие восстановились сами, таким образом, мы не тратим время на дурную работу.
Код что я привел это тот скрипт что я когда то писал, только я выкинул из него много лишнего. Лишнего для статьи. Может в нем и закралась не объявленная переменная или что-то в таком духе, так я мог не заметить и не дочистить, но не в этом дело. Этот скрипт лишь наглядная иллюстрация принципа работы. Как вы могли догадаться, для работы всего этого счастья, необходимо наличие некоего проверочного файлика на проверяемых серверах. Обычный ping не подходит, так как мы проверяем именно веб сервер, который может быть упавшим, даже если сервер пингуется хорошо.
Так же хочу отметить, что файл, который формирует скрипт - конфиг DNS, сам по себе не является всем конфигом, а должен инклудиться в основной конфиг. Это сделано для безопасности. Так мы не боимся повредить рабочий конфиг. Инклуд делается так
Ну вот и еще одна статья по теме, которая и для меня довольно свежа. Если что-то осталось не понятным, спрашивайте на форуме или в комментах.
Пинг своих серверов и балансировка нагрузки между ними могут экономить вам очень много времени и сил, а если скрипты будут написаны более менее правильно, то позволят еще и не совершать лишних движений. Поговорим о самой сути вопроса, а за тем я покажу примеры скриптов. Смысл в том что у нас есть много серверов и нам надо проверить работоспособность HTTP сервера на каждом из них и внести IP адреса работающих серверов в конфиги DNS, как описывалось в предыдущей статье. Правильный скрипт должен уметь фиксировать упавшие сервера и посылать отчеты по почте о их оффлайне. Но так же, правильный скрипт пинга, должен, при следующей проверке, если, бывший в оффе сервер, восстановился после збоя, сказать нам и об этом. Это позволит нам, читая отчеты, сразу определить, какие сервера надо смотреть и отлаживать а какие восстановились сами, таким образом, мы не тратим время на дурную работу.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php // Список наших серверов
$Servers = array(
'11.11.11.11',
'11.11.11.12',
'11.11.11.13',
);
/**
* Перебираем и отдаем на проверку все ИПы
*
* @retrun array
*/
function pingStorages() {
global $Servers;
foreach ($Servers as $key => $ip) {
$check = pingIp($ip);
if (!$check) registerServerInstance($ip, 0);
else registerServerInstance($ip, 1);
}
return $Servers;
}
/**
* Получаем тестовую страничку
*
* @param string $serverName
* @retrun boolean
*/
function pingIp($ip) {
$data = @file_get_contents('http://' . $ip . '/test_monitoring.html');
if (empty($data)) return false;
return true;
}
/**
* Запоминаем состояние серверов, для того чтобы могли
* в будущем сообщить о подьеме.
*
* @param string $serverName
* @param boolean $instance
* @return none
*/
function registerServerInstance($ip, $instance) {
global $Servers;
$subject = 'Content Server Info';
if (file_exists('file.dat')) {
$logData = unserialize(file_get_contents('file.dat'));
} else {
$logData = array();
}
if ($instance) {
if (!array_key_exists($ip, $logData)) return;
else {
unset($logData[$ip]);
$mess = 'Server is online.' . "\n";
$mess .= 'IP: ' . $ip . "\n";
$mess .= 'Date: ' . date("Y-m-d H:i") . "\n";
$subject = 'Content Server Info. Server is online' ;
}
} else {
$logData[$ip] = true;
$mess = 'Server is offline.' . "\n";
$mess .= 'IP: ' . $ip . "\n";
$mess .= 'Date: ' . date("Y-m-d H:i") . "\n";
$subject = 'Content Server Info. Server is offline' ;
}
$headers = "From: Content Servers Pingator \n";
$headers .= "Content-type: text/plain; charset=\"utf-8\"\n";
mail('[email protected]', $subject, $mess, $headers);
file_put_contents('file.dat', serialize($logData));
writeLog($mess);
}
/**
* Пишем лог
*
* @param string $message
*/
function writeLog($message) {
$f = fopen(dirname(__FILE__) . '/log.dat', 'a+');
fwrite($f, $message . "\n\n");
fclose($f);
}
/**
* Строим конфиг DNS
*
* @return string
*/
function buildConf() {
// Эта функция берет все сервера из конфига и проверяет каждый из них
$data = pingStorages();
$output = '';
// Просто формируем текст, который запишем в конфиг
// (Конфиг выйдет не полный, так как расчитан на инклуд)
foreach ($data as $key => $ip) {
$output .= 'domain.com 300 IN A ' . $ip . "\n";
$output .= "\n";
}
file_put_contents('/var/named/domen.com', $output);
exec("/usr/sbin/rndc reload", $a, $status);
}
buildConf();?>
Код что я привел это тот скрипт что я когда то писал, только я выкинул из него много лишнего. Лишнего для статьи. Может в нем и закралась не объявленная переменная или что-то в таком духе, так я мог не заметить и не дочистить, но не в этом дело. Этот скрипт лишь наглядная иллюстрация принципа работы. Как вы могли догадаться, для работы всего этого счастья, необходимо наличие некоего проверочного файлика на проверяемых серверах. Обычный ping не подходит, так как мы проверяем именно веб сервер, который может быть упавшим, даже если сервер пингуется хорошо.
Так же хочу отметить, что файл, который формирует скрипт - конфиг DNS, сам по себе не является всем конфигом, а должен инклудиться в основной конфиг. Это сделано для безопасности. Так мы не боимся повредить рабочий конфиг. Инклуд делается так
Code:
$INCLUDE /var/named/domen.com
Ну вот и еще одна статья по теме, которая и для меня довольно свежа. Если что-то осталось не понятным, спрашивайте на форуме или в комментах.
Балансинг нагрузки и пинг серверов
Теги: Ping php ballansing распределение нагрузки на сервера;
Источник: Drunya
Теги: Ping php ballansing распределение нагрузки на сервера;
Источник: Drunya
Сейчас online: 59. Зарегистрированных: 0. Гостей: 59.
AtomX 2.8 Beta - Новая версия бесплатной CMS
AtomX 2.8 Beta - Новая версия бесплатной CMS
Программирование - что может быть проще.
Программирование - что может быть проще.
AtomX 2.8 Beta - Новая версия бесплатной CMS
AtomX 2.8 Beta - Новая версия бесплатной CMS
Написание простого вируса в блокноте
Что такое API и для чего они нужны
Классы в PHP для чайников
Написание простого вируса в блокноте