Обновить сервера и не сойти с ума

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

Аптайм или обновления — вот в чем вопрос

Большой аптайм — это, наверное, хорошо, так как характеризует хостинговую компанию как очень стабильную, но это также и показатель потенциальной проблемы. Проблемы, связанной с обновлением ПО на сервере. Дело в том, что постоянно выходят обновления для системы, которые требуют перезагрузки.

Если говорить об энтерпрайз системах с длительным сроком поддержки, то обновления ядра ОС несут исключительно корректирующий характер. Они исправляют дырки в безопасности, которые потенциально могут привести к взлому сервера. Особенно это важно на тех серверах, на которых работают несколько пользователей одновременно. Злоумышленник, имеющий доступ к серверу имеет намного больше шансов на успех, чем тот, который только пытается подключиться к серверу. Если удаленные уязвимости обнаруживаются крайне редко, то локальные обнаруживаются регулярно.

Обычно для устранения такой уязвимости нужно перезагружать сервер с новым ядром. В случае, когда у тебя на физическом сервере работают десятки серверов виртуальных, да еще и тебе не подконтрольных, с запущенными вручную сервисами (да да, так тоже бывает), перезагрузка превращается в ожидание проблем и ее хочется избежать любым способом. К счастью, есть другой путь для обновления ядра, который не требует перезагрузки системы. Заключается он в том, чтобы загрузить в память модуль ядра с патчем, исправляющем ошибку. Таким образом, при наличии только исправлений, не несущих существенных изменений в структуре ядра, мы можем применить патч и не перезагружать сервер. Если бы такого подхода не было, мы были бы вынуждены перезагружать наши серверы достаточно регулярно, иногда даже по несколько раз в месяц.

Системы для обновления ядра без перезагрузки

На данный момент существует множество програмных продуктов, которые умеют выполнять обновления ядра linux без перезагрузки. К примеру, это: ksplice, kGraft, kpatch, kernelcare. Мы используем систему ksplice, которую сейчас предоставляет компания Oracle. Используем эту систему достаточно давно, еще с тех пор, когда ksplice была независимой компанией и единственной на рынке, предоставляющей такой програмный продукт. Благодаря тому, что этот продукт находится на рынке дольше всех, он же и является самым стабильным и наиболее функциональным. Если другие решения находятся на стадии бета-тестирования или в зачаточном состоянии, то ksplice это уже готовый продукт, проверенный временем.

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

Старший системный администратор
Денис Мищенко