4

問:哪種測試和開發的生命拷貝最好?MongoDb中devel團隊的生命拷貝

當前設置:

我們有兩個亞馬遜/ EC2的mongod服務器這樣的:

Machine A: 
    A production database (on an amazon/EC2 server) (name it ‘PROD’) 
    Other databases (‘OTHER’) 

Machine B: 
    a pre-production database (name it ‘PRE’) 
    a copy for developer 1 own tests (call it ‘DEVEL-1’) 
    a copy for developer 2 (DEVEL-2) 
    …DEVEL-n 

預數據庫是集成的測試部署到生產環境之前。

DEVEL-n是爲每個開發人員打亂自己的數據,而不會讓其他開發人員煩惱。

不時,我們希望從PROD到PRE和DEVEL-n的基地,以「恢復」新的數據。

目前我們通過.copyDatabase()命令從PROD傳遞給PRE。 然後我們發出.copyDatabase()「n」次將PRE複製到DEVEL-n中。

麻煩:

副本需要SOOOO長時間(1小時元一份,DBsize超過10GB),也通常是飽和的mongod的,所以我們必須重新啓動該服務。

我們已經發現約:

  • 備份/恢復系統(如飽和.copyDatabase()一樣)
  • 副本設置
  • 主/從(好像不建議使用)

副本(套)似乎是贏家,但我們嚴重懷疑:

假設我們希望有一個副本集同步直播A/PR OD成B/PRE(並有可能作爲一個主要的和B可能爲繼發性):

一)我可以選擇從一個「幾」數據庫複製PROD但先不談其他?

b)我可以在B(如DEVEL-n)中有不在主內的「額外」數據庫嗎?

c)我可以「停止複製」,因此我們可以部署到PRE,用新數據測試軟件,用測試垃圾數據並在測試完成後「重新鏈接」副本, PRE被刪除,並且PROD中的變化被充分傳送到PRE中?

d)有沒有比適合這種情況的複製套更好的方法?

謝謝。 濱海和哈維。

回答

1

副本集似乎是贏家,但我們嚴重懷疑:

假設我們希望有一個副本集同步直播A/PROD到B/PRE (並有可能作爲一個主要的和B可能是次要的):

a)我可以從A中選擇「少數」數據庫來複制PROD,但只剩下OTHER嗎?

與在MongoDB 2.4中一樣,複製始終包含所有數據庫。設計意圖是讓所有節點成爲最終一致的副本,以便您可以故障轉移到同一副本集中的另一個非隱藏的輔助節點。

b)我可以在B(如DEVEL-n)中有不在主內的「額外」數據庫嗎?

不,只有一個副本集中的主節點。

三)我可以「停止複製」,所以我們可以部署到PRE,測試軟 新鮮的數據,與測試垃圾數據和測試後有 已經完成「重新連接」的複製品,所以PRE中的變化被刪除,並且PROD中的變化被充分運送到PRE中?

由於只能有一個主服務器,所以在同一副本集中混合生產和測試角色的用例不可能如你所想象的那樣。

最好的做法是隔離你的生產環境和dev/staging環境,這樣就不會有意外的交互。

d)有沒有比適合這種情況的副本集更好的方法?

您可以採取一些方法來限制需要傳輸的數據量,以免每次從生產中複製整個數據庫(10Gb)。副本集適合作爲解決方案的一部分,但您需要爲PRE環境設置單獨的獨立服務器或副本集。

幾點建議:

  • 使用副本集,並在開發環境中添加hidden secondary。您可以從此節點take backups而不影響您的生產應用程序,並且由於二次複製發生更改,您應該做一個相對較快的備份本地網絡副本。

  • 根據MongoDB的tailable cursoroplog實現您自己的部分複製方案。本地oplog.rs加蓋集合與用於將更改轉發到副本集成員的機制相同,幷包含插入,刪除和更新的詳細信息。您可以在相關的database namespaces上匹配,並將生產副本集中的更改匹配到您的隔離的PRE環境中。

這兩種方法都可以控制何時將備份從PROD轉移到PRE,以及在測試後從以前的點重新啓動。

+0

非常感謝@Stennie我認爲你的回答非常有幫助 –

0

在我們的設置中,我們使用EBS快照在分段環境中快速複製生產數據庫。作爲備份週期的一部分,快照每隔幾個小時運行一次。在啓動新數據庫服務器時,它會查找最新的數據庫快照並將其用於EBS驅動器。 拍攝快照幾乎是即時的,恢復速度也非常快。這種方法也可以很好地擴展,我們實際上在大型的MongoDB安裝中使用它。唯一的缺點是您需要依靠AWS服務來實現它。在某些情況下這可能是不可取的。

+0

謝謝邁克爾,但是這個備份解決方案不適合我們的問題,不同的數據庫數量或停止和重新開始傳播測試的選項。 –

+0

這絕對不能滿足您的要求,但可能您的需求是在您預見的具體解決方案的影響下形成的。這也完全有可能,我沒有正確掌握背後的背景知識:) 我試圖解釋我們如何處理在我們的系統中爲集成測試提供數據庫環境的問題。在此設置中,無需限制複製數據庫,因爲無論您複製多少個數據庫,性能都很好。如果您有常規快照並且恢復速度很快,則連續複製也不是必需的。 –