Непрерывное развертывание на кластере серверов
В настоящее время я работаю со стартапом, который находится в переходной фазе.
У нас есть веб-приложение на PHP и мы используем непрерывную интеграцию со стандартными модульными и регрессионными тестами (селеном), выполняемыми через Дженкинса. У нас есть сервер разработки, на котором размещен вновь принятый код, и промежуточный сервер, на котором сборка готова к развертыванию на рабочем сервере. Мы развертываем на производственном сервере через элементарный скрипт, который извлекает последнюю копию svn и перезаписывает изменения в каталоге htdocs. Любые изменения SQL применяются через функцию синхронизации из MySQL Workbench.
Эта установка отлично работает для очень простой среды, но сейчас мы находимся в процессе перехода от установок с одним сервером к кластерам из-за большого трафика, и я столкнулся с загадкой.
Моя главная проблема заключается в том, как именно мы переключаем развертывание с одного сервера на кластер серверов? Каждый сервер будет иметь свою собственную базу данных htdocs и SQL, и при текущей настройке мне потребуется выполнить скрипт на каждом сервере, что звучит как отвратительная вещь. Я изучал puppet, который можно использовать для автоматизации задач sysadmin, но я не уверен, является ли это грозным подходом для развертывания новых сборок в кластере.
Моя вторая проблема связана с базой данных. Теперь я предполагаю, что изменения в коде будут применены немедленно, но, поскольку у нас будет репликация базы данных / ведомой базы данных, моя проблема в том, что изменения базы данных будут дольше распространяться и, таким образом, приводить к несоответствиям во время развертывания. Как можно одновременно синхронизировать код и базу данных?
Моя третья проблема связана с автоматизацией изменений в базе данных. Кто-нибудь знает, каким образом я могу автоматизировать процесс обновления схемы БД без необходимости запуска синхронизации вручную? На данный момент мне нужно вручную запустить инструмент синхронизации рабочей среды, в то время как я действительно ищу коммит и забыл подход. Я фиксирую это, и изменения БД автоматически синхронизируются между установками dev и QA.
1 ответ
Я использую аналогичный сценарий, но я использую Cloud Provider для моей производственной среды, чтобы мне не нужно было заботиться о репликации БД, нескольких серверов и т. Д. (Я использую pagodabox, но AWS также будет работать отлично отлично).
Я бы порекомендовал вам создать реальные миграции для миграции баз данных, чтобы отслеживать их через svn или что-то еще. В этом случае вы также можете предоставить информацию, как откатиться. Я использую https://github.com/doctrine/migrations, но в основном потому, что я использую доктрину в качестве ORM.
Если у вас есть инструмент миграции, вы можете легко добавить команду в сценарий развертывания для запуска этих миграций после развертывания.
Я не думаю, что синхронизация базы данных является большой проблемой во время развертывания. Это может зависеть от фактической инфраструктуры, которую вы используете. Облачные провайдеры, такие как pagoda или aws, позаботятся об этом за вас.