Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Резервный сервер на Linux

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [*nix/Linux] >> Резервный сервер на Linux
Имя
Сообщение << Старые топики   Новые топики >>
Резервный сервер на 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.

Проблема в том, что сервер находится совсем в другом здание где нет админов, которые легко могут поднять второй сетевой интерфейс. Поэтому необходимо как-то сделать так, чтобы второй сетевой интерфейс на резервном сервере был запущен и ждал когда к нему подключат кабель, на настоящий момент это невозможно сделать так как если его "поднять" то резервный сервер начинает посылать запрос сам к себе.

Кто сталкивался с подобным, поделитесь опытом.
Post #: 1
RE: Резервный сервер на Linux - 2011-08-09 12:23:28.553333   
mactep.Black

Сообщений: 6065
Оценки: 678
Присоединился: 2008-02-28 13:01:19.656666
так а в чем проблема? как поднять интерфейс или кто будет в другом здании втыкать сетевой провод?
Post #: 2
RE: Резервный сервер на Linux - 2011-08-09 12:35:41.733333   
WinLinux

Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
Проблема, как поднять второй интерфейс но при этом не потерять связь с боевым сервером.
Post #: 3
RE: Резервный сервер на Linux - 2011-08-09 16:27:55.760000   
Mammoth

Сообщений: 1
Оценки: 0
Присоединился: 2006-12-25 09:09:59.930000
А чё хоть за функции у сервака?

А вообще, для целей резервирования поднимают отказоустойчивый кластер,
например со связкой DRBD + Heartbeat.[sm=bd.gif]
Поднимается просто, инфы в инете дофига.
Post #: 4
RE: Резервный сервер на Linux - 2011-08-09 20:04:01.736666   
WinLinux

Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
Я не прошу разводить теорию и конечно понимаю, что кластер это беспорно круто. Но я написал конкретный вопрос и прошу разрешить именно его. По последним поискам я наткнулся на создание bonding однако в моем случае это не совсем приемлимо. Так как все равно сервер по дефолту начинает видеть сам себя по второму интерфейсу не смотря на то что к нему не подключен сетевой кабель.
Post #: 5
RE: Резервный сервер на Linux - 2011-08-09 20:13:04.460000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Подключи всё, чтобы ничего перетыкивать не надо было. И напиши скрипт, который из резервного сервера делает "боевой". Типа ip адреса на интерфейсах меняет, и всё прочее делает, что надо. Дальше делаешь кнопку на рабочем столе пользователя ответственного за переключение не резервный сервер. И делаешь так, чтобы кнопка запускала тот самый сервер. Хотя лучше делать кнопку не на рабочем столе, а где-нибудь чуть глубже, чтобы исключить случайное нажатие.
Post #: 6
RE: Резервный сервер на Linux - 2011-08-10 19:58:11.160000   
WinLinux

Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
rgo, идея хорошая, я такое мог бы сделать но проблема в том, что сервер без X-оф стоит чистая консоль. [sm=ab.gif]
Post #: 7
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'ы? Там что ни одного другого компьютера подключённого к сети нету? Вот на любом другом компьютере кнопку приделай.
Или кстати можно не на рабочем столе делать кнопку, подними на сервере сайтик с кнопкой.
Post #: 8
RE: Резервный сервер на Linux - 2011-08-12 19:23:06.670000   
WinLinux

Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
rgo скажу честно, как приделать кнопку на любом другом компе (под Виндовс) не могу придумать. А вот на счет сайта с кнопкой такое можно, только можно примерный код выполнения, я так подозриваю одним HTML тут не обойтись.
Post #: 9
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 &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;unistd.h&gt; #include &lt;string.h&gt; static void html_radio(char *name, char *value, int checked, char *comment) { printf("&lt;input type=\"radio\" name=\"%s\" value=\"%s\"%s /&gt; %s&lt;br /&gt;", name, value, checked ? " checked" : "", comment); } int main () { int uid = getuid(); char *query = getenv("QUERY_STRING"); int server_started = !!system("check-status.sh &gt;/dev/null 2&gt;&1"); printf("Content-Type: text/html;charset=utf-8\r\n\r\n" "&lt;html&gt;" "&lt;head&gt;" "&lt;title&gt;Управление резервным сервером&lt;/title&gt;" "&lt;/head&gt;" "&lt;body&gt;"); if(!strcmp(query, "action=start") && !server_started) { int ret; seteuid(0); ret = system("start-server.sh &gt;/dev/null 2&gt;&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 &gt;/dev/null 2&gt;&1"); setuid(uid); if(ret) printf("Сервер не остановлен в силу ошибки #%d", ret); else printf("Сервер успешно остановлен"); } printf("&lt;br/&gt;&lt;br/&gt;" "&lt;form action=\"server-control.cgi\" method=\"get\"&gt;"); html_radio("action", "start", server_started, "Запустить сервер"); html_radio("action", "stop", !server_started, "Остановить сервер"); printf("&lt;/form&gt;" "&lt;/body&gt;" "&lt;/html&gt;\n"); return 0; }Если я ничего не напутал, то так. Запускается любой http-сервер, который умеет cgi, ему подпихивается скомпилированный этот сорец (с именем server-control.cgi), с повешенным suid битом. И в PATH кладутся три скрипта: start-server.sh, stop-server.sh и check-status.sh. Последний должен завершаться с успехом (то есть со статусом 0), если сервер запущен, и со статусом 1 – если остановлен.
В принципе всё тоже самое можно сделать и не на C, а на php или чём-нибудь ещё, но либо придётся сервер запускать с рутовскими правами, либо как-то потом извращаться с получением рутовских прав для скриптов старта/останова.
Post #: 10
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 &gt;/dev/null 2&gt;&1"); setuid(uid); Вместо seteuid(0), нужно использовать setuid(0), т.к. bash-скриптам на установленный EUID пофик, им важен UID, так же бесполезно ставить SUID на скрипты в Линуксе.
Post #: 11
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.
Post #: 12
RE: Резервный сервер на Linux - 2011-08-15 13:26:06.810000   
WinLinux

Сообщений: 491
Оценки: 0
Присоединился: 2008-07-18 14:06:33.563333
rgo, большое спасибо за пример!…
Post #: 13
RE: Резервный сервер на Linux - 2011-09-18 13:10:26.386666   
int

Сообщений: 28
Оценки: 0
Присоединился: 2004-12-06 23:23:00
А зачем вам кнопка? Пингуешь адрес основого сервера, если пинг не идёт, меняешь адрес на своём втором интерфейсе. Но вот выключать это дело придётся всё же вручную.
Post #: 14
Страниц:  [1]
Все форумы >> [*nix/Linux] >> Резервный сервер на Linux







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.