![Как проверить предварительные условия на недавно установленном сервере, чтобы убедиться, что сервер действительно будет работать](https://rvso.com/image/623614/%D0%9A%D0%B0%D0%BA%20%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%B8%D1%82%D1%8C%20%D0%BF%D1%80%D0%B5%D0%B4%D0%B2%D0%B0%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D1%8F%20%D0%BD%D0%B0%20%D0%BD%D0%B5%D0%B4%D0%B0%D0%B2%D0%BD%D0%BE%20%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5%2C%20%D1%87%D1%82%D0%BE%D0%B1%D1%8B%20%D1%83%D0%B1%D0%B5%D0%B4%D0%B8%D1%82%D1%8C%D1%81%D1%8F%2C%20%D1%87%D1%82%D0%BE%20%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%20%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%20%D0%B1%D1%83%D0%B4%D0%B5%D1%82%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C%20.png)
При установке новых серверов я обычно забываю что-то, что необходимо для работы сервера. Мне бы хотелось иметь какую-то автоматическую предварительную проверку, чтобы заметить отсутствующие функции перед первым запуском сервера и иметь живых пользователей, работающих на сервере.
Допустим, я запускаю пул серверов приложений, использующих платформу вроде Tomcat или PHP за балансировщиком нагрузки. Обычно сервис требует несколько из следующих вещей:
- установленное программное обеспечение (внешние программы, такие как wget или ImageMagick и т. д.)
- установленные модули (например, libcurl, mod_rewrite, Oracle и т.д.)
- файлы конфигурации (например, tnsnames, php.ini и т.д.)
- смонтированные файловые системы, символические ссылки где-либо, особые разрешения для некоторых каталогов
- определенные сетевые порты должны быть доступны с машины (например, mysql или http-прокси)
- на машине должны быть доступны определенные сетевые порты (это необходимо проверить с другой машины, например, rsync или порт 8080)
- должны быть запущены определенные процессы
- cronjobs должны существовать
Я предполагаю, что можно было бы написать модульные тесты для большинства этих условий и запустить их на каждой машине после установки, но я бы предпочел более специализированный инструмент для такой задачи, возможно, со специальным языком, похожим на оболочку, для написания тестов (учитывая, что для тестирования всего необходимы разные инструменты, это будет включать запуск скриптов Perl, программ Java, проверку файлов, разрешений, строк в файлах confic и т. д.).
Добавлю, что я не хочу иметь возможность исправить недостающие элементы, я просто хочу проверить, нужно ли мне запрашивать дополнительные изменения у коллег по эксплуатации.
решение1
Мы делаем это, используя CFengine (но Puppet тоже подойдет) для настройки отдельных узлов на основе централизованной конфигурации. CFengine будет обеспечивать правильную конфигурацию машины в правильном порядке и продолжать это делать, например, процессы будут перезапущены, если они остановлены.
На всех узлах доступен скрипт для проверки ряда вещей (доступны ли файлы в центральном хранилище для чтения, можем ли мы открыть соединение с кластером MySQL и т. д.). Этот скрипт используется балансировщиком нагрузки для проверки работоспособности: только если все проверки пройдены, узел вернет значение, ожидаемое балансировщиком нагрузки, и будет помечен как «включенный» и ему будет разрешено обрабатывать трафик.
решение2
Вам необходимо задокументировать процесс сборки, прежде чем вы сможете создать сценарий для проверки «готовности» ваших новых систем. Документ процесса предоставит вам контрольный список, который вы хотите проверить, и последовательную сборку каждого сервера. Cfengine и puppet — отличные способы автоматизации сборок, но для их использования вам нужен список всего, что нужно настроить.