У меня много серверов Linux (SUSE 9 &10), используемых для запуска веб-сервисов, которые предоставляют данные для крупных вычислительных сетей. Недавно у нас было несколько труднообъяснимых сбоев (т. е. журналы аппаратного и программного обеспечения не показывают никаких очевидных ошибок), и мы начали задаваться вопросом, не является ли проблемой длительное время безотказной работы (обычно 200-300 дней). Учитывая, что эти серверы интенсивно используются, следует ли мне рассмотреть возможность регулярной перезагрузки?
Ответ 1
Вы должны перезагрузиться после обновления ядра (если вы не используете KSplice), в остальных случаях необязательно. Лично я перезагружаюсь ежемесячно во время окна обслуживания, чтобы убедиться, что сервер и все службы работают как положено. Таким образом, я могу быть уверен, что, если мне придется делать перезагрузку вне графика (например, при критическом обновлении ядра), система восстановится должным образом. Автоматизированный мониторинг серверов и служб (например, Nagios) также значительно помогает в этом процессе (перезагрузка, наблюдение за тем, как индикаторы становятся красными, а затем, надеюсь, снова зелеными). Если вы регулярно перезагружаетесь, вам нужно убедиться, что вы настроили проверку fsck (т. е. максимальное количество монтирований между проверками) соответствующим образом, иначе быстрая 2-минутная перезагрузка может занять 30 минут, если сервер начнет fsck'ить пару терабайт данных. Обычно я устанавливаю счетчик монтирования на 0 (tune2fs -c 0) и интервал между проверками на 6 месяцев или около того, а затем вручную принудительно проверяю fsck время от времени и сбрасываю счетчик.
Ответ 2
Серверы Linux никогда не нуждаются в перезагрузке, если только вам не нужно изменить версию работающего ядра. Большинство проблем можно решить, изменив конфигурационный файл и перезапустив службу с помощью скрипта init. Вам нужно следить за перезагрузками... если вы изменили что-то «на лету», не отразив свои изменения в конфигурационном файле службы, эти изменения не будут применены после перезагрузки. Я обычно перезагружаюсь после запланированных обновлений системы. Обычно в этом нет необходимости, но я делаю это, когда никого нет в офисе, так почему бы и нет? В любом случае, когда я делаю обновление, часто происходит обновление ядра.
Ответ 3
Я думаю, что вам следует перезагрузиться, если недавно было обновление ядра ИЛИ обновление libc. Многие вещи связаны с libc, и невозможно полностью выгрузить эту библиотеку из памяти и заменить ее новой версией, пока вы не перезагрузитесь. Например, даже такие базовые вещи, как /bin/ls, и другие вещи в /bin используют libc. Если вы просто работаете в консоли и используете bash, вы используете libc.
$ ldd /bin/bash
linux-gate.so.1 => (0xffffe000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0xb8029000)
libdl.so.2 => /lib/libdl.so.2 (0xb8025000)
libc.so.6 => /lib/libc.so.6 (0xb7ed9000)
/lib/ld-linux.so.2 (0xb804b000)
$ ldd /bin/ls
linux-gate.so.1 => (0xffffe000)
librt.so.1 => /lib/librt.so.1 (0xb7f3a000)
libacl.so.1 => /lib/libacl.so.1 (0xb7f33000)
libc.so.6 => /lib/libc.so.6 (0xb7de7000)
libpthread.so.0 => /lib/libpthread.so.0 (0xb7dd0000)
/lib/ld-linux.so.2 (0xb7f61000)
libattr.so.1 => /lib/libattr.so.1 (0xb7dcc000)
И да, если вы измените файлы в /etc/init.d, которые каким-либо образом влияют на запуск, я бы рекомендовал перезагрузиться. Вы же не хотите обнаружить, что допустили небольшую ошибку в файле запуска, когда вам нужно быстро восстановить работоспособность системы.
Если сервер проработал много дней без перезагрузки, это означает, что нет возможности быть уверенным в том, что он снова заработает правильно. Это, опять же, связано с тем, что на нем могло быть изменено множество конфигурационных файлов, и никто не перезагружал его в течение длительного времени, чтобы убедиться, что он работает. Также, если на сервере много обновлений, а вы давно не перезагружались, перезагрузитесь перед применением обновлений, иначе, если возникнет проблема, вы не сможете быть уверены, что она была вызвана ошибкой конфигурации давным-давно или новыми обновлениями, которые вы применили. И наконец, если вы перезагружаете критически важный сервер после очень долгого времени, fsck может означать, что вам придется очень долго ждать, пока он восстановится. Вы можете использовать tune2fs, чтобы избежать этого, но, я полагаю, это хорошая идея — проверять его регулярно. Вот почему вы не должны быть в положении, когда вы зависите только от одного сервера, и если он падает, весь ваш сайт пропадает. У вас должен быть резервный сервер наготове.
Ответ 4
Моя инфраструктура имеет два сайта данных: альфа (где операции выполняются ежедневно) и бета (резервный сайт на случай, если в альфа произойдут какие-либо сбои). Хотя в настоящее время это не так, я настаиваю на том, чтобы каждые 6 месяцев на сайте альфа проводились плановые простои, чтобы мы могли запускать все сервисы с сайта бета. Это позволит достичь двух целей. Во-первых, это докажет, что наша площадка аварийного восстановления вполне жизнеспособна. Во-вторых, это даст мне неделю времени, чтобы удалить накопившийся мусор на альфа-версии. И без того я не перезагружаю свои серверы так часто, как следовало бы. Я согласен с другими авторами, которые сказали, что важно знать, что ваши серверы восстановятся, когда вам это понадобится. Вы же не хотите «думать», что так и будет, и только потом обнаружить, что вы что-то изменили, но сделали это неправильно или не задокументировали.
Ответ 5
Вы можете дополнительно написать несколько скриптов, которые будут проверять (насколько это возможно), будет ли текущее состояние вашей машины состоянием машины после перезагрузки.
Я имею в виду следующее...
/etc/init.d/*
Проверить, что все службы, запущенные в данный момент, отмечены как запускаемые при загрузке.
Проверьте, что все незапущенные службы помечены как не запускающиеся при загрузке.
/etc/fstab
Проверьте, что все смонтированные файловые системы (т. е. /etc/mtab) имеют соответствующую запись в /etc/fstab.
Проверьте, что все файловые системы, указанные в /etc/fstab для монтирования при загрузке, также смонтированы в данный момент.
Это, конечно, не полная проверка, но она снижает риск возникновения проблем после перезагрузки. В дополнение к этому вы должны установить политику обновления пакетов сервера в каком-то разумном порядке, скажем, 1 группа в неделю...
Серверы для аварийных и активных систем
Серверы разработки, учебные серверы
Тестовые серверы
Предпроизводственные серверы
Производственные серверы
Также необходимо иметь общий план, например: «Все серверы будут проходить полное обновление ОС раз в 6 месяцев».
Linux