Как программисты, мы склонны воспринимать сисадминов как должное. Несколько раз, когда я был без хорошего системного администратора, я действительно ценил то, что вы делаете. Какие мудрые слова вы можете нам предложить, когда выходим в среду без сисадмина?
Я бы начал с:
<вставьте сюда заявление об отказе от ответственности>
О некоторых из них уже говорилось ранее, но стоит повторить.
Документация:
Документируйте все. Если у вас его нет, установите скрытую вики, но обязательно сделайте резервную копию. Начните со сбора фактов, и однажды вы увидите общую картину.
Создавайте диаграммы для каждого логического фрагмента и обновляйте их. Я не мог сосчитать, сколько раз меня спасала точная сетевая карта или кластерная диаграмма.
Сохраняйте журналы сборки для каждой системы, даже если она просто копирует и вставляет команды для ее сборки.
При создании системы установите и настройте приложения, протестируйте их работу и проведите сравнительный анализ. Теперь протрите диски. Шутки в сторону. 'dd' первый мегабайт от передней части дисков или иным образом сделать ящик не загружаемым. Время идет: докажите, что ваша документация может быть восстановлена с нуля (или, что еще лучше, докажите, что ваш коллега не может ничего, кроме вашей документации). Это составит половину вашего плана аварийного восстановления.
Теперь у вас есть первая половина вашего плана аварийного восстановления, остальное задокументируйте; как вернуть состояние вашего приложения (восстановить файлы с ленты, перезагрузить базы данных из дампов), подробности о поставщике / поддержке, требования к сети, как и где получить замену оборудования - все, что вы можете придумать, поможет восстановить вашу систему.
Автоматизация:
Мониторинг:
Аппаратура приложений - это чистое золото. Возможность наблюдать за транзакциями, проходящими через систему, значительно упрощает отладку и устранение неполадок.
Создавайте сквозные тесты, которые доказывают не только то, что приложение живо, но и действительно выполняет то, что должно. Очки ваши, если его можно подключить к системе мониторинга для целей оповещения. Это служит двойной задаче; Помимо доказательства работы приложения, оно значительно упрощает обновление системы (система мониторинга сообщает о зеленом цвете, обновление выполнено, пора домой).
Выполняйте сравнительный анализ, отслеживайте и собирайте метрики по всему, что нужно для этого. Тесты подскажут, когда ожидать, что что-то выпустит волшебный дым. Мониторинг сообщает вам, когда это произошло. Метрики и статистика упрощают получение нового комплекта (со свежим волшебным дымом) через управление.
Если у вас нет системы мониторинга, внедрите ее. Бонусные баллы, если вы действительно вставляете в него вышеуказанные сквозные тесты.
Безопасность:
"chmod 777" (также известный как предоставить весь доступ / привилегии) никогда не является решением.
Придерживайтесь принципа «наименьшего бит»; если он не установлен, не скопирован или не хранится на диске иным образом, его нельзя скомпрометировать. Установка ОС и программного обеспечения "кухонной раковины" может облегчить жизнь на этапе сборки, но в конечном итоге вам придется заплатить за это в будущем.
Знайте, для чего предназначен каждый открытый порт на сервере. Часто проверяйте их, чтобы убедиться, что не появляются новые.
Не пытайтесь очистить взломанный сервер; его нужно перестраивать с нуля. Выполните перестройку на резервный сервер со свежезагруженным носителем, восстанавливая только данные из резервных копий (поскольку двоичные файлы могут быть скомпрометированы), или клонируйте скомпрометированный хост в изолированное место для анализа, чтобы вы могли восстановить его на том же комплекте. Вокруг этого царит настоящий юридический кошмар, так что сделайте ошибку в пользу сохранения, если вам нужно использовать законные средства. (Примечание: IANAL).
Оборудование:
Никогда не предполагайте, что что-то будет делать то, что написано на коробке. Докажите, что он делает то, что вам нужно, на всякий случай. Вы обнаружите, что говорите «это почти работает» чаще, чем вы ожидали.
Не экономьте на удаленном управлении оборудованием. Последовательные консоли и управление отключением света следует считать обязательными. Бонусные баллы за удлинители с дистанционным управлением на тот случай, когда у вас нет вариантов.
(Кроме того: есть два способа решить проблему в 3 часа ночи: один - согреться, поработать на ноутбуке через VPN в пижаме, другой - в толстой куртке и поехать в центр обработки данных / офис. Я знаю, какой я предпочитаю.)
Управление проектом:
Привлекайте людей, которые будут поддерживать систему с первого дня жизненного цикла проекта. Сроки изготовления комплектов и мозговых работ могут удивить и удивят, и нет никаких сомнений в том, что у них будут (должны?) Быть стандарты или требования, которые станут зависимостями проекта.
Документация является частью проекта. У вас никогда не будет времени написать все это после того, как проект будет закрыт, а система переведена на техническое обслуживание, поэтому убедитесь, что это включено как усилие в график с самого начала.
Реализуйте запланированное устаревание в проекте с первого дня и запустите цикл обновления за шесть месяцев до дня отключения, указанного в проектной документации.
Серверы имеют определенный срок службы, когда они подходят для использования в производстве. Конец этого срока службы обычно определяется, когда поставщик начинает платить за годовое обслуживание больше, чем будет стоить обновление комплекта, или около трех лет, в зависимости от того, что меньше. По истечении этого времени они отлично подходят для сред разработки / тестирования, но вам не следует полагаться на них при ведении бизнеса. Пересмотр среды через два с половиной года дает вам достаточно времени, чтобы перепрыгнуть через необходимые управленческие и финансовые обручи для заказа нового комплекта и осуществить плавный переход, прежде чем вы отправите старый комплект крупному поставщику в небе.
Развитие:
Резервные копии
Данные, которые вы не копируете, - это данные, которые вам не нужны. Это непреложный закон. Убедитесь, что ваша реальность соответствует этому.
Резервное копирование сложнее, чем кажется; некоторые файлы будут открыты или заблокированы, тогда как другие необходимо приостановить, чтобы иметь какую-либо надежду на восстановление, и все эти проблемы необходимо решить. В некоторых пакетах резервного копирования есть агенты или другие методы для работы с открытыми / заблокированными файлами, в других - нет. Выгрузка баз данных на диск и их резервное копирование считается одной из форм «стабилизации», но это не единственный метод.
Резервные копии бесполезны, если они не протестированы. Каждые несколько месяцев вытаскивайте из архивов случайную ленту, проверяйте, действительно ли на ней есть данные и что данные согласованы.
И, самое главное...
Выберите режимы отказа, или Мерфи будет ... и Мерфи не будет работать по вашему расписанию.
Разработайте проект с учетом сбоев, задокументируйте спроектированные слабые места каждой системы, их причины и способы восстановления. Все будет иметь значение, когда что-то пойдет не так.
Не думайте, что это легко. Я знаю многих программистов, которые думают, что только потому, что они могут установить IIS или Apache на своем устройстве разработки, они могут запускать веб-ферму. Поймите, что включает в себя эта работа, и проведите свое исследование и планирование, не думайте, что работа системного администратора - это простая вещь, которую вы можете сделать за 10 минут, чтобы развернуть свое приложение.
О безопасности не думают второстепенно. Хотя взломанное приложение может выставить программиста некомпетентным, это (по крайней мере) потерянные выходные, потраченные на проверку, очистку и / или восстановление из резервных копий для системного администратора.
В этом отношении не рассматривайте резервные копии как систему контроля версий. Они предназначены для аварийного восстановления и на самом деле не предназначены для восстановления вашего кода, потому что вы забыли, что вы изменили.
И прекратите слепо обвинять обновления Windows в том, что ваш код взломан. Меня не волнует, что это работало раньше, скажите мне, почему не работает сейчас - тогда мы увидим, чья это вина.
Как отлаживать сетевые проблемы и наблюдать за работой вашей программы с помощью инструментов системного администратора. Как программист, который начал заниматься системным администрированием, я поражен тем, насколько бессильными становятся многие программисты, когда работа в сети «просто прекращается».
openssl s_client -connect target-host:port
когда-нибудь), для ручного подключения к сетевым службамЗнайте, как устранять проблемы.
Очень легко переложить ответственность (например, ваша сеть поддерживает мое общение с базой данных). Это может быть ошибка сети, но у вас должны быть журналы приложений с ошибками, которые при использовании Google или SO могут выявить проблему в конфигурации приложения.
Всем нравится обвинять оборудование, операционную систему или сеть, поэтому, если вы немного проявите должную осмотрительность, вы сделаете системного администратора счастливым человеком. Потому что, по крайней мере, вы можете указать им в определенном направлении, что может быть не так (в отличие от слов «ваша сеть - отстой» или чего-то столь же полезного).
Документируйте все, что можете. Не могу сказать вам, сколько раз последний системный администратор думал, что было бы мило не задокументировать что-то для «безопасности работы», или кто-то просто хотел войти и уйти. Как программист должен оставлять хорошие комментарии, так и системные администраторы должны документировать. Схема топологии тоже была бы неплоха.
План B.
Всегда имейте в виду план аварийного восстановления при проектировании и разработке решения. Определите единичные точки отказа, которые могут привести к отключению.
Я удивлен, что ни один из 17 ответов, приведенных здесь, пока не включает что-либо о том, чтобы ваше приложение работало при входе в систему как обычный пользователь.
Помимо процесса установки, приложение должно нормально работать при входе в систему со стандартной учетной записью.
Документация: не нужно сходить с ума, но как работает приложение, диаграмма, показывающая, как подходят биты, и способы тестирования каждого компонента, когда все идет не так. Образцы данных и вывод хороши.
Требования: на какие модули он полагается? Версии? ОПЕРАЦИОННЫЕ СИСТЕМЫ?
Мониторинг: в идеале разработчики должны включать в приложение информацию для мониторинга и тесты.
Говоря об упаковке, УПАКОВКА! Нет ничего хуже, чем «развертывание», которое означает получение новой версии файла из VCS и копирование ее на несколько серверов. Слишком часто программисты не осознают сложность развертывания программного обеспечения: есть причины, по которым пакетное программное обеспечение с версиями является основой большинства операционных систем.
Если бы разработчик пришел ко мне с RPM, который устанавливался впервые, с краткой, исчерпывающей документацией и некоторыми тестами Nagios, они были бы моим новым лучшим другом.
Хорошо, это немного разглагольствует, но:
a) При кодировании предполагайте, что базовая инфраструктура может выйти из строя и не исходит от счастливой-счастливой всегда на земле. Или Google.
б) У нас, вероятно, нет ресурсов для реализации чего-то вроде инфраструктуры, о которой вы читали, так что расслабьтесь, когда что-то пойдет не так. Скорее всего, мы знаем, что нужно делать, но по какой-то причине этого еще не произошло. Мы ваши партнеры!
c) Как сказано выше, было бы очень полезно, если бы вы хоть немного знакомы с инструментами для устранения неполадок в инфраструктуре, такими как ping, traceroute (или их сочетание - mtr), копать и т. д. Огромные бонусные баллы даже за знание Wireshark.
г) Если вы программируете компьютер, вы действительно должны знать, как он подключается к сети, и основы, такие как способность анализировать вывод ipconfig / all или ifconfig. Вы должны иметь возможность установить и запустить подключение к Интернету с минимальной помощью.
В остальном, я думаю, Эйвери в значительной степени справился. Разработчики, которые немного занимаются сисадмином, на вес золота! Но в равной степени системные администраторы, которые понимают, как разработчики работают (включая управление версиями и т. Д.), Очень важны в наши дни.
Кажется, что в данный момент это витает в воздухе, я заметил больше дискуссий о взаимоотношениях dev / ops в блогах - проверьте
Это может относиться только к начинающим программистам, но я решаю несколько вопросов в каждом проекте с некоторыми программистами.
«Это работает на моей машине» - неверное утверждение. В обязанности программиста входит создание программы установки для использования на сервере или, по крайней мере, документирование каждого соединения, библиотеки DLL и надстройки, которые потребуются на сервере.
(Я слышал это несколько раз, поэтому, пожалуйста, не смейтесь) Я запускаю exe на сервере со своей машины, и он работает. Но когда я запускаю его на сервере (Citrix, Terminal Server и т. Д.), Он не работает. Пожалуйста, разберитесь с dll и ocx, а также со всем остальным, что требуется вашей программе, где и как они зарегистрированы, и как ваша программа их использует.
Это может показаться простым, но я постоянно с этим сталкиваюсь.
Брайан
Резервное копирование Резервное копирование Резервное копирование .... Протестируйте резервную копию .... Всегда будьте готовы к откату
Что ни одна группа или функция не «лучше» другой, и что ни одна из них не требует «большего мозга», чем друг у друга. Я видел, как обе стороны проявляли всю прима-донаи в компании другой - вы все пытаетесь достичь одних и тех же целей - сосредоточьтесь на этих сходствах, а не на том факте, что вы используете разные инструменты.
Архитектор инфраструктуры, ставший программистом, может, в будущем захочет откатить эту транзакцию :)
Как человек, который был системным администратором для разработчиков и сам разработчик, приведенные здесь советы не только полезны, но и должны быть частью документации по найму новых разработчиков для компаний во всем мире.
Я не видел (пока) объяснения того, что разработчики действительно должны знать продукты, которые они будут использовать для создания программ, за которые им платят. Количество раз, которое мне приходилось объяснять и настраивать серверы apache, установку eclipse и Visual Studio, а также базу данных на машинах разработчиков, немного беспокоит.