一千萬個為什麽

搜索

如何在自動縮放組中運行數據庫遷移



我們即將從一個單一的體系結構轉移到一個自動縮放的組,我不知道應該如何運行我的數據庫遷移(Laravel)。

我正在考慮一個腳本會在一個新盒子上線時運行,這會讓我最新的代碼失效。這個腳本是否應該執行我的數據庫遷移?我不知道如何才能讓它只在一個盒子上運行?

轉載註明原文: 如何在自動縮放組中運行數據庫遷移

一共有 2 個回答:

你如何進行部署? Nuke +重建ASG(無論是一次一個節點還是一次替換整個組),還是您有一個腳本來重新部署所有活動節點?

還有,你如何觸發你的部署?

理想情況下,您希望從某種形式的CI服務器(如Bamboo或Jenkins)運行/觸發部署。如果你這樣做,你可以從構建服務器(或其組件構建代理實例)運行數據庫遷移。

這將允許您更好地控制環境,例如,如果部署失敗,則可以從快照還原數據庫。

許多orm的商店遷移狀態在數據庫本身,但是如果你手動執行它,也不難建立你自己。只需要一個存儲所有執行的遷移的“遷移狀態”表。通過這種方式,當一個節點聯機時,它可以簡單地根據其本地“遷移”文件夾檢查該表,並執行缺少的內容 - 這應該會導致版本緩沖後只有您的第一個節點執行遷移。

作為備註:CloudFoundry通過允許您的縮放集中的每個實例(節點)訪問其標識符來解決此問題。第一個獲得0,下一個1等。這樣一個節點知道它是否是第一個,並且可以執行遷移。我不認為ASG具有相同的功能。