суббота, 23 мая 2009 г.

Системный эффект (или эффект домино)

Расскажу о любопытном случае, который произошёл у меня на работе.

Однажды начали происходить спонтанно странные вещи с серверами. Первое проявление возникло как будто на пустом месте: неожиданно на файл-сервере под управлением samba стала недоступна часть сетевых папок. Если в этот момент на сервере ввести команду df -h, сервер надолго задумывался, и только примерно спустя минуту-две выдавал список смонтированных разделов. Сервер перезагружать было крайне не желательно: с частью папок пользователи продолжали работать по сети, в том числе большое количество пользователей в этот момент работало с 1С.

Удалось выяснить, что нормально открывалась та часть папок, которая находилась на отдельном дисковом разделе. Команда df -h с указанием этого раздела отрабатывала моментально, а команда df -h с указанием раздела, на котором располагались недоступные папки, опять отрабатывала только через минуту-две.

Я решил принудительно отмонтировать этот дисковый раздел и смонтировать его снова: umount -f /dev/..., mount /dev/.... Заработало нормально почти всё, за исключением одной сетевой папки.

Эта папка монтировалась по протоколу smb с факс-сервера и повторно расшаривалась на файл-сервере samba. В эту папку складывались принятые факсы. Папка была не доступна из-за того, что факс-сервер перестал отзываться по сети.

Я пошёл в серверную, залогинился на сервер, но на этом вся активность факс-сервера была исчерпана. После входа explorer не запустился, а запустить его через диспетчер задач не удавалось, поскольку его попросту не удавалось вызвать по Ctrl-Alt-Del. Перезагрузил файл-сервер и смонтировал сетевой ресурс, всё заработало.

В течение недели эти глюки повторялись от одного до трёх раз в день. Каждый раз сбой происходил с небольшими вариациями: в основном samba-сервер стал работать нормально, только не хотел открывать папку с факсами, а на факс-сервере иногда запускался explorer, но сеть по-прежнему без перезагрузки не восстанавливалась.

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

Через некоторое время отключать стало нечего - в лог не ругалась ни одна из служб, а сбои продолжались. Я решил проверить сервер антивирусом, поскольку он выполнял ещё и функции файлопомойки для нашего отдела ИТ (там лежали дистрибутивы программ) и хранил различные резервные копии.

Антивирусная проверка не дала ничего - сервер был чист. Я уже отчаялся найти причину сбоев и начал грешить на модемы, которые как раз и принимали факсы. Я уже морально приготовился поменять модемы, а в случае если это не поможет, то и переустановить на сервере всё ПО, включая ОС.

Как раз примерно в это время начальник попросил меня посмотреть статистику по телефонным звонкам одного из сотрудников. Я пошёл на веб-страницу со статистикой, но статистики телефонных звонков за прошедшую неделю не было. Я вспомнил, что на факс-сервере стоял демон для сбора статистики с телефонной станции, который складывал статистику в базу данных на другой сервер. Я зашёл на факс-сервер и попытался перезапустить демон сбора статистики. Он легко завершился, а затем долго-долго запускался, но в конце концов запустился, сообщив о каком-то сбое. Я решил проверить связь с базой данных и связь с телефонной станцией. Оказалось, что этот демон не мог связаться с телефонной станцией и ему просто нечего было складывать в базу данных, поэтому веб-страничка со статистикой за прошедшую неделю была пуста.

Тут в моей голове где-то появилось странное чувство, которое я не мог объяснить. Я решил прислушаться к нему. Я полез в лог факс-сервера, чтобы узнать когда в первый раз проявились сбои. Первый сбой произошёл вторник, примерно в половине третьего.

Я начал припоминать, что в обед какого-то дня на прошлой неделе начальник заменил блоки питания в телефонной станции. Я спросил у него, в какой день это было, не во вторник ли? Он ответил утвердительно. В тот день по внутренней электронной почте всем сотрудникам было отправлено письмо, о том что в обеденное время телефонная станция будет отключена на 15 минут. Я заглянул в архив своего почтового клиента и убедился, что это действительно был вторник. Я припомнил, что на прошлой неделе он говорил о каких-то проблемах, которые возникли при замене блоков питания. После замены блоков питания конфигурация станции сбросилась и её пришлось восстановить из бэкапа, предусмотрительно сделанного перед заменой.

Всё более-менее встало на свои места. Начальник во вторник на прошлой неделе заменил блоки питания в телефонной станции. Конфигурация станции сбросилась. После восстановления конфигурации настройки доступа для сбора статистики с телефонной станции по какой-то причине не восстановились. Демон сбора статистики, стоящий на факс-сервере, не мог подключиться к телефонной станции. В демоне, судя по всему, была какая-то ошибка (этот демон был написан одним из бывших сотрудников организации, поэтому наличие ошибок в нём было весьма вероятно), которая через некоторое время ставила колом факс-сервер. Факс-сервер пропадал из сети, а сервер samba не мог получить к нему доступ и начинал сам жутко тормозить.

Вот так замена блоков питания вызвала системный эффект (или эффект домино). Перестала собираться статистика по телефонным звонкам, из сети стал пропадать факс-сервер, файловый сервер на основе samba стал из-за этого жутко тормозить. Причины - глючная телефонная станция и самодельная программа, написанная вопреки правилам безопасного программирования. Последствия - нервная неделя работы одного админа, недовольство пользователей при невозможности посмотреть принятые факсы, потеряна статистика телефонной станции за неделю.

6 комментариев:

Леонид комментирует...

Поскольку история умалчивает, остается надеяться, что админу это стоило только потрепанных нервов, и на него не свалились все шишки (не стал крайним)

Di. комментирует...

Да... интересная зависимость. Спасибо, что поделились опытом, полезно было почитать...

morbo комментирует...

>Поскольку история умалчивает, остается надеяться, что админу это стоило только потрепанных нервов, и на него не свалились все шишки (не стал крайним)

Шишки на меня не посыпались, факс-сервер и статистика телефонных переговоров в данном случае - не критичные ресурсы.

Да и виновного определить тут сложно. Для того чтобы всё это проявилось, нужно чтобы:
1. один человек написал программу без учёта возможных сбоев,
2. другой (или тот же) установил эту программу на один физический сервер с факс-сервером,
3. программа факс-сервер не умела складывать полученные факсы в сетевую папку (именно для обхода этого был придумано смонтировать сетевую папку на файл-сервере и расшарить её повторно),
4. во время телефонных переговоров были слышны щелчки, вызванные проблемами в блоках питания телефонной станции (из-за чего и были заказаны новые блоки питания),
5. телефонная станция потеряла настройки при замене блоков питания (это тем более странно, потому что все её настройки хранятся в энергонезависмой памяти).

Леонид комментирует...

Автоматическое монтирование сетевых папок -вообще беда. Я когда в fstab (на клиенте) прописал сетевую папочку, а комп, где был nfs-сервер выключил... nautilus на клиенте повесился бескомпромиссно, аж рабочий стол пропал.

Как быть? Как бы так покорректнее автоматическое монтирование сетевых дисков и каталогов организовать?

Проблема актуальна =)

morbo комментирует...

Может перестать пользоваться nautilus и "рабочим столом"? =)

Возможно поможет подкрутка таймаутов. Если клиент видит, что сервер не отвечает в течение полусекунды - он должен понять, что сервер не ответит и в следующие полминуты. NFS вплотную не пользовался, поэтому где точно копать про таймауты сказать не могу - наверное в опциях монтирования.

И ещё дело может быть в famd, он умеет подвешивать весь комп, отъедая 99% процессорного времени. Нужно заменить его на gamin.

morbo комментирует...

Читаю сейчас всё это и улыбаюсь :) Дело в том, что моя нынешняя работа в основном заключается в поддержке системы мониторинга.

Если бы файл-сервер, факс-сервер, демон на нём и содержимое базы данных со статистикой телефонных звонков стояли бы на контроле в системе мониторинга, проблема обнаружилась бы сразу после замены блоков питания телефонной станции.

Система мониторинга - это второй обязательный элемент информационной системы после системы резервного копирования :)