Резервный сервер на Linux
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Резервный сервер на Linux - 2011-08-09 12:03:26.496666
|
|
|
WinLinux
Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
|
У меня возникла следущая проблема по подготовке холодного резерва (ОС CentOS), в случае если боевой стал недоступен, чтобы к холодному резервному серверу подключили сетевой кабель и все продолжило работать, в теорие кажется просто но есть свои нюансы: 1. На боевом сервере 1 сетевой адаптер к которому посредствам NAT подключаются из разных сетей. 2. На резервном сервере 2 сетевых адаптера у коготорого на первом сетевом адаптере настроен IP из той-же подсети, что и боевой, это сделано для того, чтобы посредством синхронизации он всегда имел актуальную информацию. Вторая сетевая карта находится в "down'e" т.е. параметр ONBOOT=no. Проблема в том, что сервер находится совсем в другом здание где нет админов, которые легко могут поднять второй сетевой интерфейс. Поэтому необходимо как-то сделать так, чтобы второй сетевой интерфейс на резервном сервере был запущен и ждал когда к нему подключат кабель, на настоящий момент это невозможно сделать так как если его "поднять" то резервный сервер начинает посылать запрос сам к себе. Кто сталкивался с подобным, поделитесь опытом.
|
|
|
RE: Резервный сервер на Linux - 2011-08-09 12:23:28.553333
|
|
|
mactep.Black
Сообщений: 6065
Оценки: 678
Присоединился: 2008-02-28 13:01:19.656666
|
так а в чем проблема? как поднять интерфейс или кто будет в другом здании втыкать сетевой провод?
|
|
|
RE: Резервный сервер на Linux - 2011-08-09 12:35:41.733333
|
|
|
WinLinux
Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
|
Проблема, как поднять второй интерфейс но при этом не потерять связь с боевым сервером.
|
|
|
RE: Резервный сервер на Linux - 2011-08-09 16:27:55.760000
|
|
|
Mammoth
Сообщений: 1
Оценки: 0
Присоединился: 2006-12-25 09:09:59.930000
|
А чё хоть за функции у сервака? А вообще, для целей резервирования поднимают отказоустойчивый кластер, например со связкой DRBD + Heartbeat.[sm=bd.gif] Поднимается просто, инфы в инете дофига.
|
|
|
RE: Резервный сервер на Linux - 2011-08-09 20:04:01.736666
|
|
|
WinLinux
Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
|
Я не прошу разводить теорию и конечно понимаю, что кластер это беспорно круто. Но я написал конкретный вопрос и прошу разрешить именно его. По последним поискам я наткнулся на создание bonding однако в моем случае это не совсем приемлимо. Так как все равно сервер по дефолту начинает видеть сам себя по второму интерфейсу не смотря на то что к нему не подключен сетевой кабель.
|
|
|
RE: Резервный сервер на Linux - 2011-08-09 20:13:04.460000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
Подключи всё, чтобы ничего перетыкивать не надо было. И напиши скрипт, который из резервного сервера делает "боевой". Типа ip адреса на интерфейсах меняет, и всё прочее делает, что надо. Дальше делаешь кнопку на рабочем столе пользователя ответственного за переключение не резервный сервер. И делаешь так, чтобы кнопка запускала тот самый сервер. Хотя лучше делать кнопку не на рабочем столе, а где-нибудь чуть глубже, чтобы исключить случайное нажатие.
|
|
|
RE: Резервный сервер на Linux - 2011-08-10 19:58:11.160000
|
|
|
WinLinux
Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
|
rgo, идея хорошая, я такое мог бы сделать но проблема в том, что сервер без X-оф стоит чистая консоль. [sm=ab.gif]
|
|
|
RE: Резервный сервер на Linux - 2011-08-10 20:12:58.900000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: WinLinux rgo, идея хорошая, я такое мог бы сделать но проблема в том, что сервер без X-оф стоит чистая консоль. [sm=ab.gif] А нахрена серверу X'ы? Там что ни одного другого компьютера подключённого к сети нету? Вот на любом другом компьютере кнопку приделай. Или кстати можно не на рабочем столе делать кнопку, подними на сервере сайтик с кнопкой.
|
|
|
RE: Резервный сервер на Linux - 2011-08-12 19:23:06.670000
|
|
|
WinLinux
Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
|
rgo скажу честно, как приделать кнопку на любом другом компе (под Виндовс) не могу придумать. А вот на счет сайта с кнопкой такое можно, только можно примерный код выполнения, я так подозриваю одним HTML тут не обойтись.
|
|
|
RE: Резервный сервер на Linux - 2011-08-12 23:23:18.070000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: WinLinux rgo скажу честно, как приделать кнопку на любом другом компе (под Виндовс) не могу придумать. Есть putty.exe – ssh клиент для вендовс. По-моему, если его запускать из командной строки, то можно подпихнуть ему ключевой файл и попросить запустить на серваке не bash, а указанную команду. Соответственно на сервере создаётся скрипт, который будет делать всё что надо. На венде создаётся .lnk, который запускает putty.exe с нужными параметрами. Единственное неудобство в том, что придётся на серваке поднимать sshd, позволяя логин руту. Но я не думаю что это такой уж ужасный удар по безопасности, в данном случае. quote:
ORIGINAL: WinLinux А вот на счет сайта с кнопкой такое можно, только можно примерный код выполнения, я так подозриваю одним HTML тут не обойтись. На C пишем программку:#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
static void html_radio(char *name, char *value, int checked, char *comment)
{
printf("<input type=\"radio\" name=\"%s\" value=\"%s\"%s /> %s<br />",
name, value, checked ? " checked" : "", comment);
}
int main ()
{
int uid = getuid();
char *query = getenv("QUERY_STRING");
int server_started = !!system("check-status.sh >/dev/null 2>&1");
printf("Content-Type: text/html;charset=utf-8\r\n\r\n"
"<html>"
"<head>"
"<title>Управление резервным сервером</title>"
"</head>"
"<body>");
if(!strcmp(query, "action=start") && !server_started) {
int ret;
seteuid(0);
ret = system("start-server.sh >/dev/null 2>&1");
setuid(uid);
if(ret)
printf("Сервер не запущен в силу ошибки #%d", ret);
else
printf("Сервер запущен успешно");
} else if (!strcmp(query, "action=stop") && server_started) {
int ret;
seteuid(0);
ret = system("stop-server.sh >/dev/null 2>&1");
setuid(uid);
if(ret)
printf("Сервер не остановлен в силу ошибки #%d", ret);
else
printf("Сервер успешно остановлен");
}
printf("<br/><br/>"
"<form action=\"server-control.cgi\" method=\"get\">");
html_radio("action", "start", server_started, "Запустить сервер");
html_radio("action", "stop", !server_started, "Остановить сервер");
printf("</form>"
"</body>"
"</html>\n");
return 0;
} Если я ничего не напутал, то так. Запускается любой http-сервер, который умеет cgi, ему подпихивается скомпилированный этот сорец (с именем server-control.cgi), с повешенным suid битом. И в PATH кладутся три скрипта: start-server.sh, stop-server.sh и check-status.sh. Последний должен завершаться с успехом (то есть со статусом 0), если сервер запущен, и со статусом 1 – если остановлен. В принципе всё тоже самое можно сделать и не на C, а на php или чём-нибудь ещё, но либо придётся сервер запускать с рутовскими правами, либо как-то потом извращаться с получением рутовских прав для скриптов старта/останова.
|
|
|
RE: Резервный сервер на Linux - 2011-08-13 11:18:38.423333
|
|
|
itention
Сообщений: 40
Оценки: 0
Присоединился: 2011-06-18 02:34:39.700000
|
rgo, небольшое дополнение: Для использования SUID в CGI Апач, должен быть скомпилирован с параметром WITH_APACHE_SUEXEC=yes(хотя может быть достаточно выставить нужный параметр в конфиге) У тебя в коде есть строки:
seteuid(0);
ret = system("start-server.sh >/dev/null 2>&1");
setuid(uid);
Вместо seteuid(0), нужно использовать setuid(0), т.к. bash-скриптам на установленный EUID пофик, им важен UID, так же бесполезно ставить SUID на скрипты в Линуксе.
|
|
|
RE: Резервный сервер на Linux - 2011-08-13 14:42:29.900000
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
ORIGINAL: itention Вместо seteuid(0), нужно использовать setuid(0), т.к. bash-скриптам на установленный EUID пофик, им важен UID, так же бесполезно ставить SUID на скрипты в Линуксе. Да, наверное. Я эти setuid'ы использовал лишь единожды, так что забыл всё напрочь. Но, я думаю, WinLinux, если предпочтёт этот способ, почитает `info libc 'Users and Groups'` прежде чем что-то делать. suid – это такая штука, которую не стоит доверять постороннему. quote:
ORIGINAL: itention Для использования SUID в CGI Апач, должен быть скомпилирован с параметром WITH_APACHE_SUEXEC=yes(хотя может быть достаточно выставить нужный параметр в конфиге) Да. Но я просто мыслю, что запускать апач из-за одной странички как-то жирновато будет. Это всё равно что использовать сельскохозяйственный комбайн для подстригания газона 10x10 метров. Проще взять, скажем, nginx, но я вот не упомню, чтобы в nginx был бы suexec.
|
|
|
RE: Резервный сервер на Linux - 2011-08-15 13:26:06.810000
|
|
|
WinLinux
Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
|
rgo, большое спасибо за пример!…
|
|
|
RE: Резервный сервер на Linux - 2011-09-18 13:10:26.386666
|
|
|
int
Сообщений: 28
Оценки: 0
Присоединился: 2004-12-06 23:23:00
|
А зачем вам кнопка? Пингуешь адрес основого сервера, если пинг не идёт, меняешь адрес на своём втором интерфейсе. Но вот выключать это дело придётся всё же вручную.
|
|
|
|
|