Развертывание контента на несколько серверов (EC2)

Я работаю над облачным веб-приложением (AWS EC2), и я борюсь с одной проблемой, когда речь заходит о работе с несколькими серверами (все это под балансировщиком балансировки нагрузки AWS). На одном сервере, когда я загружаю последние файлы, они мгновенно производятся по всему приложению. Но это неправда при использовании нескольких серверов – вы должны загружать файлы в каждый из них, каждый раз, когда вы совершаете изменения. Это может сработать, если вы не обновляете что-либо очень часто, или если у вас только один или два сервера. Но что делать, если вы обновляете систему несколько раз за неделю, через десять серверов?

То, что я ищу, – это способ «совершить» изменения с нашего разработчика или сервера тестирования и сразу же «вытолкнуть» всех наших производственных серверов. В идеале обновление будет применяться только к одному серверу за один раз (даже если он занимает всего два или два на сервер), поэтому ELB не будет отправлять трафик на него, пока файлы меняются, чтобы не нарушать какой-либо производственный трафик, который может быть протекающей к ELB. Каков наилучший способ сделать это? Одной из моих мыслей было бы использовать SVN на dev-сервере, но на самом деле это не «толкает» серверы. Я ищу процесс, который занимает всего несколько секунд, чтобы совершить обновление и впоследствии начать применять его к серверам. Кроме того, для тех из вас, кто знаком с AWS, какой лучший способ обновить AMI с последними обновлениями, чтобы авто-сканер всегда запускал новые экземпляры с последней версией программного обеспечения?

Должны быть хорошие способы сделать это … Невозможно изобразить такие сайты, как Facebook, Google, Apple, Amazon, Twitter и т. Д., Проходящие и обновляющие сотни или тысячи серверов вручную и один за другим, когда они вносят изменения.

Заранее спасибо за вашу помощь. Я надеюсь, что мы сможем найти какое-то решение этой проблемы …. Должно быть, по крайней мере, 100 поисков Google, как я, так и мой бизнес-партнер за последний день, оказались безуспешными для решения этой проблемы в большинстве случаев.

Alex

Мы используем scalr.net для управления нашими веб-серверами и экземплярами балансировки нагрузки. До сих пор он работал очень хорошо. у нас есть серверная ферма для каждой из наших сред (2 производственных фермы, постановка, песочница). У нас есть предварительно настроенные роли для веб-серверов, поэтому очень просто открывать новые экземпляры и масштабировать, когда это необходимо. веб-сервер вытаскивает код из github при его загрузке.

Мы не выполнили все изменения развертывания, которые хотим сделать, но в основном мы используем новые версии в нашей производственной среде:

  1. мы используем phing для обновления исходного кода и развертывания на каждой веб-службе. мы создали задачу, которая выполняет git pull и запускает изменения базы данных (задача dbdeploy phing). http://www.phing.info/trac/
  2. мы написали сценарий оболочки, который выполняет phing, и мы добавили его в scalr как скрипт. Scalr имеет приятный интерфейс для управления скриптами.

    #!/bin/sh cd /var/www phing -f /var/www/build.xml -Denvironment=production deploy 
  3. scalr имеет возможность запускать скрипты во всех экземплярах в определенной ферме, поэтому каждый выпуск мы просто нажимаем на главную ветвь в github и выполняем скрипт scalr.

Мы хотим создать привязку github, которая автоматически развертывается при нажатии на главную ветку. Scalr имеет api, который может выполнять скрипты, поэтому это возможно.

Посмотрите на KwateeSDCM . Он позволяет развернуть файлы и программное обеспечение на любом количестве серверов и, при необходимости, настроить параметры сервера на этом пути. Есть сообщение о развертывании веб-приложения на нескольких экземплярах tomcat, но оно не является агностиком языка и будет работать на PHP так же хорошо, как если бы вы включили ssh на своих серверах AWS.