Развертывание контента на нескольких серверах (EC2) - PullRequest
6 голосов
/ 09 октября 2011

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

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

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

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

Alex

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Мы используем 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, который может выполнять сценарии, поэтому это возможно.

0 голосов
/ 10 октября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...