2013-04-09 162 views
2

我對我的應用程序使用了AWS。當前的配置是: 負載均衡器 - >多個EC2實例(自動縮放) - >所有安裝一個NFS驅動器與SVN同步多服務器更新體系結構

每當我們想要更新應用程序,我們登錄到NFS服務器(另一個EC2實例),並執行svn update到應用程序文件夾。

我想知道是否有更好的方法(架構)工作,因爲我有時在SVN更新和服務器需要一段時間更新後得到權限更改。 (考慮將S3安裝爲驅動器)。

我的應用程序是PHP + Yii framwork +和mysql數據庫。

感謝您的幫助, 丹尼

+0

爲什麼不直接寫一個腳本來從每個EC2實例「svn up」? – 2013-04-09 22:02:17

+0

目前尚不清楚你目前的解決方案沒有問題。 「權限更改」是​​什麼意思,就像錯誤一樣?爲什麼需要一段時間才能更新,而一段時間是什麼意思?你正在尋找一個解決你目前的問題或只是替代解決方案? – 2013-04-10 03:00:44

+0

您可以創建自動啓動腳本,更新存儲庫並在每次啓動時對權限進行設置,然後監視存儲庫中的更改。 – Tim 2013-04-10 06:43:12

回答

1

你可以使用一個稍微複雜的解決方案:

  1. 把你所有的動態目錄(protected/runtime/assets/等)SVN目錄外(使用svn:ignore)並將它們符號鏈接到您的應用程序目錄中。不過,這可能需要在Web服務器上進行一些配置更改才能遵循符號鏈接。

    /var/www/myapp/config 
    /var/www/myapp/runtime 
    /var/www/myapp/assets 
    /var/www/myapp/htdocs/protected/config-> ../../config 
    /var/www/myapp/htdocs/protected/runtime -> ../../runtime 
    /var/www/myapp/htdocs/assets -> ../assets 
    
  2. 在部署啓動一個新的SVN在htdocs.new複製,你創建相同的符號鏈接,並可以修復權限

    /var/www/myapp/htdocs.new/protected/config-> ../../config 
    /var/www/myapp/htdocs.new/protected/runtime -> ../../runtime 
    /var/www/myapp/htdocs.new/assets -> ../assets 
    
  3. 移動htdocshtdocs.oldhtdocs.newhtdocs。您可能還需要HUP網絡服務器。

這樣你就可以完全避免NFS掛載你有時間準備的步驟1和2的唯一challange是同步在所有機器上的步驟3。例如,您可以使用at同時安排所有機器上的更新。

作爲獎勵,您可以隨時撤消部署,如果出現問題。

但是,如果您必須運行遷移,情況可能會更復雜。如果遷移不與您的應用程序向後兼容,那麼您可能無法避免一些停機時間。

+0

感謝您的好評...實際上,這正是我今天的工作(符號鏈接)我正在尋找的是創建一個共享資源(驅動器)之間的所有服務器(這是從AMI圖像自動調節)其他然後一個NFS是有風險的(單點失敗)。即使有選擇在AWS中備份,我認爲還有更好的體系結構。 – 2013-04-10 07:07:40