Linux Bulk / Удаленное администрирование

10

Помимо нашей внутренней ИТ-инфраструктуры, у нас есть около 500 Linux-машин, на которых размещены наши сервисы для онлайн-мира. Они сгруппированы в несколько кластеров, таких как Database An, Product An, NFS, Backoffice и так далее. Кроме того, они управляются внешним поставщиком в соответствии с нашими спецификациями и требованиями.

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

Таким образом, я попытался создать виртуальные машины, как можно точнее скопировать различные живые системы и подготовил их для подключения, например, к базам данных разработки, а не к «реальным» прозрачно для разработчиков (это не так root). Это работает довольно хорошо, но ...

Мне было интересно, как можно администрировать эти системы удаленно и навалом ? Есть ли семейство программного обеспечения, о котором я не знаю? Или, по крайней мере, некоторые методы или принципы, с которыми нужно быть знакомым?

Мы предоставим каждому разработчику кучу изображений для локального запуска (VirtualBox). Отдел обеспечения качества получит виртуальные кластеры (XEN или Hyper-V). Если мне нужно предоставить дополнительный серверный модуль, перенаправить новое соединение с базой данных или просто обновить все, что предоставляет менеджер пакетов ... как я могу это сделать без необходимости входить в каждую систему и / или попросить моих коллег скачать и запустить какой-нибудь fixture-скрипт?

Я считаю, что есть много решений. Ну, как-то я слишком глуп, чтобы вводить правильные ключевые слова в поисковые системы ... Или эта проблема не так тривиальна, как кажется?

Для записи:

  • Почти все системы работают под Debian GNU / Linux 6.x "squeeze"
  • Ни один разработчик не вынужден использовать конкретную ОС на своей рабочей станции
  • Конечно, бюджет ограничен, но не слишком мал, чтобы покупать проприетарное программное обеспечение.
  • Решение с участием нашего вышеупомянутого поставщика является предпочтительным
mjhennig
источник

Ответы:

15

Это зависит от того, что именно вам нужно и что вы ищете. Но в целом существует несколько решений для управления конфигурацией, таких как:

  1. кукольный
  2. шеф-повар
  3. Cfengine
  4. анзибль
  5. поваренная соль

и т.д. Я бы лично порекомендовал марионетку, так как она имеет большое сообщество и множество внешних рецептов. Это позволяет автоматически настраивать и управлять системами. Если вы объедините это с собственными репозиториями и автоматическими обновлениями, например, unattended-upgradesвы можете автоматически обновить систему.

Другое решение - просто предоставить свои собственные пакеты, например, company-baseи т. Д., Которые автоматически зависят от необходимого программного обеспечения и могут автоматически настраивать вашу систему.

Вы также должны изучить автоматические развертывания (barebone и виртуализированные). Если вы сочетаете это с управлением конфигурацией или собственным репозиторием, вы можете легко автоматизировать и переустановить свои системы. Если вы хотите начать работу с автоматической установкой, взгляните на theforman, который поддерживает libvirt, а также установки без костей и имеет встроенную поддержку марионеток. Если вы хотите сделать это самостоятельно, вы можете посмотреть в kickstart (redhat et. Al.) Или «preseeding» для автоматической настройки вашей системы. Для Debian вы также можете использовать что-то вроде debootstrap или оболочку с именем grml-debootstrap, поддерживающую виртуализированные образы.

Чтобы помочь представителям образов VirtualBox взглянуть на vagrant, он позволяет автоматизировать создание виртуализированных систем с VirtualBox, поддерживающим сценарии chef, puppet и shell для настройки вашей виртуальной среды.

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

Для Google ключевые слова искать в devops, configuration management, it automationи server orchestration.

Короче автоматизируйте как можно больше и даже не думайте делать что-то ручное.

Ульрих Дангел
источник
1
Спасибо! Это много вещей, чтобы прочитать, но выглядит довольно многообещающе.
mjhennig
@mjhennig я только что добавил еще немного информации. развертывание. Есть много доступных ресурсов, но самое главное, вы не должны делать что-то самостоятельно через ssh / распределенные оболочки, но должны иметь какую-то систему для этого.
Ульрих Дангел
2
Нет ничего плохого в том, чтобы делать что-то самостоятельно, особенно если доступные инструменты не соответствуют цели. Такие системы, как Puppet, в основном являются инструментами системного администрирования, а не управления конфигурацией как таковые. Подавляющее большинство систем, которые я использую, недоступны даже с центрального сервера, но с ноутбуков пользователей через (все) vpn - пытались изменить это в течение трех лет. Наш ИТ-отдел разделен по регионам, потому что каждый регион не может получить доступ к другому должным образом. Доморощенные сценарии необходимы в некоторых ситуациях. Здесь также начинается инновация.
Arcege
3
@ Arcege Я только что проголосовал за ваш комментарий, необходимы скрипты, и вам не нужно конвертировать всю инфраструктуру сразу. Самая важная часть - это автоматизировать вещи и сделать их повторяемыми. Но описательная природа кукол и поваров имеет некоторые уникальные аспекты, например, вы можете тестировать и проверять классы кукол с помощью cucumber-puppet. Конечно, вы можете разрабатывать / расширять свои собственные фреймворки, используя существующие компоненты, но это звучит так, что в настоящее время в OP ничего нет, и если вы начинаете с нуля, я думаю, что лучше использовать существующий фреймворк.
Ульрих Дангел
Да, я согласен с автоматизированными / повторяемыми операциями. У меня есть несколько автоматизированных или самодельных сценариев для взаимодействия между существующими системами, такими как интеграция Jenkins / Oc4j и Subversion / Bugzilla. Я просто не согласился (категорически) с вашим комментарием «вы не должны делать что-то самостоятельно». Иногда существующие рамки не применимы, как я описал в моей ситуации.
Arcege
3

Ульрих уже дал ответ относительно развертывания программного обеспечения и автоматической настройки сервера.

Принципы этого

  • Определите, как должны выглядеть ваши серверы - это включает в себя стандартное программное обеспечение, которое установлено по умолчанию, схему секционирования и структуру файловой системы.
  • Производственные, промежуточные, тестовые и разрабатываемые серверы не должны отличаться в зависимости от этих основных стандартов (иначе вы столкнетесь с проблемами позже - как вы это сделали)
  • Используйте правильное управление изменениями, чтобы задокументировать ВСЕ изменения, которые вы сделали (включая крошечные однострочные изменения в любой конфигурации)
  • Всегда вы меняете сначала в тесте, потом в разработке, потом в постановке и последнем в производстве

Вы попросили удобный инструмент для управления массами серверов - мой личный фаворит это cluster-ssh ( cssh). Введите один раз и внесите изменения на многих серверах одновременно.

Если вы обнаружите проблему и исправите ее, устраните ее:

  1. Примените исправление к Test / Dev / Staging / Prod (см. Выше), если оно действительно работает
  2. Примените исправление к вашим виртуальным шаблонам, чтобы будущие VM-клоны не имели этой ошибки
  3. Примените исправление к вашему физическому процессу установки (kickstart / autoyast / что угодно)
  4. Применить исправление ко всем серверам

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

Мы используем Mantis (с открытым исходным кодом, PHP) для этой цели.

Nils
источник
2

Я управляю около 30 продуктами и несколькими сотнями серверов в разных странах. Я менеджер по настройке программного обеспечения, поэтому у меня нет корневого доступа (по замыслу), я не касаюсь баз данных или их серверов (опять же, по замыслу), и мне приходится прыгать много раз из-за корпоративной безопасности. Но я управляю конфигурациями в тестовом, промежуточном и производственном режимах, включая ссылки на базы данных и изменения. У меня есть несколько сценариев , которые выходят к серверам с помощью комбинаций ssh, pythonи сценариев оболочки.

Основные вещи, о которых стоит подумать:

  1. Какие виды взаимодействия вы будете иметь с вашими серверами? Просто загрузка файла? Запуск программ командной строки? Запуск удаленных клиентов X?
  2. Какой уровень безопасности необходим для доступа к этим серверам? Брандмауэры, безопасные сети, VPN? sshДостаточно ли и из центрального безопасного места?
  3. Сколько можно автоматизировать на каждом сервере? Можете ли вы установить программу на каждом сервере и запустить ее, или вам нужно выполнить потоковую передачу программы через что-то вроде sshудаленного запуска? Можете ли вы написать сценарий с помощью expectили просто из командной строки?

VirtualBox предоставляет множество инструментов командной строки, которые вы можете администрировать через систему sshили системы, как puppetупоминает Ульрих.

Arcege
источник
2
Просто небольшое предложение повторно. virtualbox, взгляните на vagrantup.com, он может упростить и автоматизировать создание виртуальных образов.
Ульрих Дангел
К сожалению, даже получить простой сетевой доступ между удаленными средами тестирования практически невозможно. Настройка фермы виртуальных ящиков будет еще сложнее. У меня проблемы с тем, чтобы просто попросить ИТ-отдел обновить стандартное программное обеспечение тем, что устарело больше года, потому что оно не является частью стандартных репозиториев RedHat.
Arcege
В моем опыте с устаревшим программным обеспечением мне помогло либо показать, что это либо EOL, либо проблемы с безопасностью. Настройка / подключение к сети часто бывает сложнее выполнить, возможно, стоит попытаться подчеркнуть, как подключение различных сред тестирования помогает сэкономить деньги, упростить процессы, сэкономить время контроля качества или сделать среду тестирования более реалистичной. Это также может помочь, если вы получите людей из разных филиалов на борту.
Ульрих Дангел