Puppet, миграция сервера, восстановление существующих постоянных данных
Что меня смущает в инструментах управления конфигурацией, таких как Puppet, так это то, что они великолепны и просты в настройке сервера с нуля, но то, что игнорируется в каждой документации, это тот случай, когда у меня есть существующие данные (например, база данных PostgreSQL), которые я хочу использовать на недавно подготовленный сервер.
Прекрасным примером является миграция между хостинг-провайдерами. Конечно, Puppet настроит новый сервер с (почти) такой же конфигурацией, как и предыдущий, но код установки (манифест Puppet) предполагает, что этот новый сервер баз данных находится в своем происхождении, в то время как существуют ценные бизнес-данные, которые необходимо восстановить.
Настройка инфраструктуры в первый раз, безусловно, стоит автоматизировать, но случаются аварии, и когда возникает необходимость восстановления сервера, у меня остается полуручная настройка:
- Puppet: настройка сервера до момента инициализации каталогов данных и запуска служб
- Я в оболочке: Восстановление данных из резервных копий в нужных местах
- Кукольный: Продолжайте с остальными, то есть запускайте службы
Это не может быть настолько необычным. Первоначальная настройка серверов без существующих данных - одноразовое событие, но их восстановление может происходить много раз, и я ожидаю, что это произойдет хотя бы один раз (поэтому мы создаем резервные копии ценных данных).
Какова обычная практика написания манипуляций Puppet для сценария, когда узел может быть настроен во второй раз и ему необходимо восстановить данные?
Как вы справляетесь с миграцией серверов, управляемых Puppet?
Гуглить это безнадежно. В основном вы сталкиваетесь со страницами, описывающими, как восстановить Puppet DB/ сервер, но эта часть инфраструктуры в основном не является тем, от чего ваш бизнес получает прибыль, верно?
Я понимаю, что на сервере Puppet есть файловый сервер, но хранение резервных данных и настройка надлежащего контроля доступа кажется очень утомительным по сравнению с управлением конфигурацией с манифестами Puppet.
Я предполагаю, что предприятия используют решения для полного сетевого резервного копирования, такие как Bacula или Amanda, или, возможно, индивидуальные решения для резервного копирования на основе Borg, Restic, Burp, Duplicati или plain rsync. Интегрируете ли вы их в свои манифесты с куклами? Как?
2 ответа
Использование инструментов управления конфигурацией (CM), таких как Puppet, Ansible, Chef или Salt, требует фундаментальных изменений в том, как вы думаете о конфигурации.
Если вы думаете о конфигурации как о единовременном событии, вы никогда не увидите (или не поймете) никакой выгоды от использования CM.
Главная сила CM - это возможность выразить желаемую конфигурацию в виде кода. Если у вас есть такая возможность, конфигурация вашего сервера:
Тестируемый Вы можете написать модульные тесты, чтобы убедиться, что вы не вносите никаких ошибок, и все это без перезапуска службы или подготовки всей тестовой / промежуточной среды. Это экономит много времени и денег.
Воспроизводимый. Вы можете создать один сервер, два сервера, десять серверов или сто серверов, используя одну и ту же базовую конфигурацию без лишних затрат. Вы пишете код один раз и применяете его много раз. Если у вас есть стандартный набор параметров конфигурации (например, настройки демона SSH, шаги по усилению), CM может автоматизировать их.
Версия Внедрить изменения так же просто, как сделать коммит Git. Отменить изменение так же просто, как
git revert
, У вас есть проверяемый источник данных с возможностью аудита (ваша история Git). Вы можете разветвлять свою кодовую базу CM, вносить изменения, получать экспертную оценку и объединять эти изменения в свойmaster
ветка.
Если вы делаете это в целях полностью автоматического аварийного восстановления, это может быть целесообразно, но в противном случае вам придется подумать о том, действительно ли вы что-то сэкономите, потратив значительное количество времени на надежную (!) Автоматизацию того, что должно быть очень редким. выключение (если вам приходится делать это постоянно, что-то не так в вашей среде). Наличие Puppet не означает, что вы должны автоматизировать все любой ценой...
Тем не менее: если вам это нужно, это не сложно: просто есть решение для резервного копирования, которое поддерживает выполнение этого из Puppet - эта поддержка может просто запускать сценарий, который делает то, что вы делали бы вручную, в противном случае в рамках запуска Puppet (обязательно запустите это только один раз...).