Linux

Как часто следует перезагружать серверы Linux?

У меня много серверов 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

Вы можете дополнительно написать несколько скриптов, которые будут проверять (насколько это возможно), будет ли текущее состояние вашей машины состоянием машины после перезагрузки.

Я имею в виду следующее...

  1. /etc/init.d/*

  1. Проверить, что все службы, запущенные в данный момент, отмечены как запускаемые при загрузке.

  2. Проверьте, что все незапущенные службы помечены как не запускающиеся при загрузке.

  1. /etc/fstab

  1. Проверьте, что все смонтированные файловые системы (т. е. /etc/mtab) имеют соответствующую запись в /etc/fstab.

  2. Проверьте, что все файловые системы, указанные в /etc/fstab для монтирования при загрузке, также смонтированы в данный момент.

Это, конечно, не полная проверка, но она снижает риск возникновения проблем после перезагрузки. В дополнение к этому вы должны  установить политику обновления пакетов сервера в каком-то разумном порядке, скажем, 1 группа в неделю...

  1. Серверы для аварийных и активных систем

  2. Серверы разработки, учебные серверы

  3. Тестовые серверы

  4. Предпроизводственные серверы

  5. Производственные серверы

Также необходимо иметь общий план, например: «Все серверы будут проходить полное обновление ОС раз в 6 месяцев».

Схожие статьи

Linux

Как сделать так, чтобы дочерний процесс завершался после завершения родительского

Linux

Как принудительно закрыть сокет в TIME_WAIT

Linux

Стоит ли блокировать ICMP?

Linux

Как мне запросить ввод Да/Нет/Отмена в сценарии оболочки Linux